Ein ISDN - Fax unter Linux

ArticleCategory:

SystemAdministration

AuthorImage:

Sebastian Bauer

TranslationInfo:

original in de Sebastian Bauer 

AboutTheAuthor:

Ich bin am Anfang meines Studiums mehr unfreiwillig mit Linux "zusammengestoßen". Seitdem habe ich einiges dazugelernt und schätze die Freiheiten und Möglichkeiten, die man mit Linux und Open Source hat. Meine Homepage könnt ihr unter www.goblin.kicks-ass.org besuchen.

Abstract:

In diesem Artikel soll beschrieben werden, wie man Linux dazu bringt, das komfortable hylafax zum Faxen über eine ISDN-Karte von AVM zu verwenden.

ArticleIllustration:

penguin_fax

ArticleBody:

Einleitung

Um mit Linux über einen ISDN-Anschluss zu faxen, braucht man nicht allzu viel

Ich werde mich in diesem Artikel auf passive Karten von AVM beschränken, da es meines Wissens nach nur von AVM capi-Treiber für Linux gibt. Es sollten zwar auch beliebige aktive Karten zum Faxen geeignet sein, ich kann mich dazu aber nicht äußern, weil diese für mich leider unerschwinglich sind (für Hardwarespenden bin ich immer offen). Es werden alle verwendeten Programme in dieser Anleitung aus den Quelltexten kompiliert. So ist am ehesten sichergestellt, dass der gezeigte Weg auf möglichst vielen Distributionen zum Ziel führt. Ich habe das beschriebene Vorgehen mit einer FritzCard PCI und einem ISDN Adapter Classic (ISA) auf SuSE 8.1 und Redhat 8.0 getestet (da hat es funktioniert). Leider kann ich natürlich nicht garantieren, dass es überall und immer funktioniert.

Kerneleinstellungen

Da für die nächsten Schritte unbedingt ein Kernel mit capi-Support nötig ist, sollte man zuerst einen neuen Kernel kompilieren. Informationen dazu findet man bei The Linux Documentation Project z.B. im Kernel-HowTo. Viele Distributionen enthalten keinen capi-Support im Kernel oder verwenden nicht den Standartkernel. Deshalb sollte man sich den Quelltext des aktuellen Kernels bei www.kernel.org herunterladen. Neben den Einstellungen, die man bei make xconfig für sein System braucht, müssen noch die folgenden Optionen aktiviert werden.

Kernel Settings

Danach kann der Kernel ganz normal mit

make dep
make bzImage
make modules
make modules_install

kompiliert werden. Anschließend muss der neue Kernel gebootet werden und wenn alles geklappt hat, geht es mit der Installation von capi4linux weiter.

capi4linux

Die capi4linux-Treiber von AVM sind zwar offiziell nur für SuSE-Linux erhältlich, man kann sie aber für beliebige Distributionen (speziell beliebige Kernel) verwenden. Zuerst sollte man die Treiber bei www.avm.de herunterladen. Dabei muss man nur darauf achten, dass man den richtigen Kartentyp auswählt. Die Version von SuSE, für die der Treiber gedacht ist, ist im wesentlichen egal (es müssen lediglich die Major-Release-Versionen der verwendeten Compiler übereinstimmen). Die Treiber können dann z.B. mit

tar xfz fcpci-suseX.X-XX.XX.XX.tar.gz

bzw.

tar xfz fcclassic-suseX.X-XX.XX.XX.tar.gz

entpackt werden. Nun kann man im neuen Verzeichnis fritz mit

make

die Datei src.drv/fcpci.o bzw. src.drv/fcclassic.o erstellen. Diese muss dann nach /lib/modules/2.4.XX/kernel/drivers/isdn/avmb1/ kopiert werden. Anschließend müssen noch die Modulabhängigkeiten mit

depmod

neu definiert werden. Die Fehlermeldung Unresolved symbols in /lib/modules/2.4.XX/kernel/drivers/isdn/avmb1/fcpci.o, die fast mit Sicherheit kommt, kann dabei einfach ignoriert werden. Um die Konfiguration der ISDN-Karte abzuschließen, muss noch die Datei /etc/capi.conf erstellt werden. Das Beispiel von AVM sieht in etwa so aus:

# card      file    proto  io     irq  mem  cardnr  options
#b1isa      b1.t4   DSS1   0x150  7    -    -       P2P
#b1pci      b1.t4   DSS1   -      -    -    -
#c4         c4.bin  DSS1   -      -    -    -
#c4         -       DSS1   -      -    -    -
#c4         -       DSS1   -      -    -    -       P2P
#c4         -       DSS1   -      -    -    -       P2P
#t1isa      t1.t4   DSS1   0x340  9    -    0
#t1pci      t1.t4   DSS1   -      -    -    -
#fcpci      -       -      -      -    -    -
#fcclassic  -       -      0x300  5    -    -

In dieser Datei kann man einfach den Eintrag für die entsprechende Karte entkommentieren (Die Zeile für die fcclassic muss man eventuell anpassen).

capi4k-utils

Die capi4k-utils stellen einige kleine aber wichtige Programme für die capi-Schnittstelle zur Verfügung. Um sie zu installieren, muss man die Datei capi4k-utils-XXXX-XX-XX.tar.gz hier herunterladen und dann wieder einmal mit

tar xfz capi4k-utils-XXXX-XX-XX.tar.gz

entpacken. Anschließend kompiliert und installiert man die capi4k-utils mit

cd capi4k-utils
make menuconfig
make
make install

Die Optionen bei make menuconfig kann man im Zweifel so lassen wie sie sind. Es muss nur darauf geachtet werden, dass die eventuellen Änderungen auch nachher konsistent durchgezogen werden. Anschließend sollten in der Datei /etc/modules.conf noch die Einträge

alias char-major-43 capidrv
alias char-major-44 capidrv
alias char-major-45 capidrv

hinzugefügt bzw. geändert werden. Jetzt kann man dann endlich mit

capiinit start
modprobe capidrv

die capi-Module laden. Wieder entfernt werden sie mit

rmmod capidrv
capiinit stop

Beim Entfernen der Module können eventuelle Fehlermeldungen mit gutem Gewissen ignoriert werden. Um das Laden/Entfernen der Module zu automatisieren, habe ich ein einfaches Startscript geschrieben.

#!/bin/bash
#
# System startup script for the isdn-capi subsystem

case "$1" in
     start)
        echo -n "Setting up capi-drivers for ISDN subsystem"
        capiinit start
        modprobe capidrv
        ;;

     stop)
        echo -n "Remove capi-drivers for ISDN subsystem"
        rmmod capidrv
        capiinit stop
        ;;
     restart)
        $0 stop
        $0 start
        ;;
     *)
        echo "Usage:$0{start|stop|restart}"
        ;;
esac
exit 0

Dieses Skript kann nach /etc/init.d/ bzw. /etc/rc.d kopiert und dazu verwendet werden, die capi-Module automatisch beim Systemstart zu laden.

libtiff

Wenn man auf seinem System kein libtiff installiert hat oder bei den entsprechenden rpms irgendwelche Header-Dateien fehlen, muss man libtiff installieren, bevor man mit der Installation von hylafax fortfahren kann. Dieses Paket kann bei www.libtiff.org heruntergeladen werden. Die Installation von libtiff sollte mit

tar xfz tiff-vX.X.X.tar.gz
cd tiff-vX.X.X
./configure
make
make install

getan sein. Und schon kann es mit der Installation von hylafax weitergehen.

hylafax

Um hylafax zu installieren, braucht man zuerst den Quelltext, den man bei www.hylafax.org herunterladen kann. Nachdem man den Quelltext, wie üblich mit

tar xfz hylafax-X.X.X.tar.gz

entpackt hat, geht es mit

cd hylafax-X.X.X
./configure

weiter. Bei den nun folgenden Abfragen sollte man das Spool-Verzeichnis (Option 7) auf /var/spool/fax und das Papierformat (Option 13) auf A4 setzen. Alle anderen Einstellungen können beibehalten werden. Anschließenden kann man die Installation mit

make
make install
faxsetup

fortsetzen. Mit faxsetup werden dann die Einstellungen für die Orts- und Landesvorwahl (beide ohne die führenden Nullen - die werden bei Long Distance Prefix und Int. Distance Prefix) etc. eingetragen. Im Zweifel können die Default-Einstellungen beibehalten werden. WICHTIG: Die letzte Frage nach

faxaddmodem

muss auf jeden Fall mit NO beantwortet werden. Anschließend sollte man das Script /etc/init.d/hylafax bzw. /etc/rc.d/hylafax zu Automatisierungszwecken noch ein wenig verändern. Dazu fügt man unter start möglichst an letzter Stelle die beiden Zeilen

$ECHO "Starting capifax receive..."
/usr/local/bin/c2faxrecv &

und bei stop möglichst am Anfang

$ECHO "Shutting down capifax receive..."
killall -15 c2faxrecv

ein. Diese Änderungen sind nötig, dass gleichzeitig mit dem hylafax System auch der Faxempfang gestartet wird.

capi4hylafax

Da hylafax eigentlich nur mit "richtigen" Modems funktioniert, braucht man jetzt noch den capi4hylafax patch. Dieser gaukelt hylafax ein Modem vor, wo eigentlich "nur" eine ISDN-Karte ist. Um diesen Patch zu installieren, muss man das entsprechenden Tarball bei www.avm.de herunterladen und dann mit

tar xfz capi4hylafax-XX.XX.XX.tar.gz

entpacken. Anschließend muss nur noch

cd capi4hylafax-XX.XX.XX
./install

ausgeführt werden. Hier werden die benötigten Parameter angepasst:

Outgoinging MSN Hier muss die Nummer (ohne Vorwahl) eingegeben werden, die capi4hylafax verwendet, um ein Fax zu versenden. Wenn man Supress MSN nicht auf 0 setzt, kann diese Nummer vom Empfänger gesehen werden.
Incoming MSN Hier wird die Nummer (wieder ohne Vorwahl) angegeben, an der capi4hylafax Faxe entgegennehmen soll. Wenn mehrere Nummern verwendet werden, können diese einfach durch Kommata getrennt werden.
DDI Parameter Diese Parameter sind notwendig, um capi4hylafax an einem ISDN-Anlagenanschluss mit Durchwahlmöglichkeit (DDI) zu betreiben. DDIOffset gibt dabei die Stammnummer an, DDILength die Länge der Durchwahlziffern. Bei IncomingDDIs kann eine Liste von Durchwahlziffern angegeben werden, auf die reagiert werden soll.
Beispiel: Faxnummer 123456-78
DDIOffset = 123456 (Stammnummer), DDILength = 2
FaxNumber Diese Nummer wird beim Empfänger angezeigt. Da hylafax keine Leerzeichen verarbeiten kann, sollte man die folgende Form 00XX.XX.XXXXXXXX wählen. Die Punkte werden dann automatisch in Leerzeichen umgewandelt.
FaxIdentifier Hier kann der eigene Name, der Firmenname oder ähnliches eingetragen werden. Dieser Eintrag erscheint ebenfalls auf dem Fax des Empfängers.
NumberPrefix Wenn zur Amtsholung eine Ziffer, beispielsweise 0 vorgewählt werden muss, wird diese hier eingetragen.

Nachdem alle Parameter angepasst wurden, sollte es möglich sein, ein Fax zu versenden und zu empfangen. Um dies zu testen, verwendet man zum Senden

c2faxsend -f TIFF -d [TelNum] [TIFF-Datei]

und zum Empfangen

c2faxrecv -f TIFF

Hier wird noch kein hylafax benötigt, als Funktionstest sollte es aber ausreichen.

Testen

Jetzt da alles installiert ist und hoffentlich auch alles funktioniert, sollte man hylafax neu starten (/etc/init.d/hylafax restart o.ä.) und versuchen, jemandem ein Fax zu schicken. Dazu verwendet man

sendfax -n -d [TelNum] [Fax-Datei]

Für die Fax-Datei sind eine Menge Formate wie PostScript, PDF oder TIFF möglich. Wenn ein Fax empfangen wird, sollte c2faxrecv den Anruf automatisch annehmen und das Fax in /var/spool/fax/recvq ablegen.

Schlussbemerkung

Laut AVM können die capi-Treiber nur mit einem passiven ISDN-Controller verwendet werden, da z.B. das Versenden eines Faxes sehr viel Rechenzeit beansprucht. Bei mir funktionieren sowohl Empfang als auch Versand auch während eines Kernel-Compiles wunderbar (Pentium-MMX 166 MHz). Ausserdem gab es in der news-group de.comp.os.unix.linux.isdn einige Meldungen von ehrgeizigen Zeitgenossen, die auch mehrere passive ISDN-Karten gleichzeitig verwenden. All dies und auch die vielen Möglichkeiten, die hylafax über die Standartinstallation hinaus bietet, gehen aber weit über das Maß für diesen Artikel hinaus.

Ich weiß aus eigener Erfahrung, dass Faxen mit ISDN und Linux nicht unbedingt zu den einfachen Dingen gehört - wenn man nicht weiß, wie und wo man anfängt, kann es ziemlich lästig sein. Ich hoffe aber, einigen geholfen zu haben, sich durch den capi-Sumpf zu wühlen.

Allen, die es versuchen, viel Spaß beim Faxen machen...