Der Linuxrechner als Faxserver

In den aktuellen Betriebssystemversionen (z.B. Windows 95 und OS/2 Warp) sind meistens Programme enthalten, mit denen Sie vom PC aus Faxe versenden und empfangen können. Bei einem Netzwerk würde das allerdings erfordern, daß an jedem PC ein Faxmodem vorhanden und angeschlossen ist und daß für den Empfang von Faxen die PCs alle ständig in Betrieb sein müßten. Sinnvoller ist es da, nur auf dem Server ein Programm laufen zu lassen, daß mit dem Faxmodem kommuniziert und in der Lage ist, von den anderen Rechnern im Netz Faxaufträge entgegenzunehmen. Genau das ist mit kostenfreier Software möglich.

Konfiguration des Servers

Um den Linuxrechner als Faxserver benutzen zu können, müssen folgende Voraussetzungen erfüllt sein: Sie müssen über ein Modem verfügen, daß in der Lage ist, Faxe zu versenden und zu empfangen (ein sogenanntes Faxmodem). Ein derartiges Modem dürfte für unter 200,- DM im Handel erhältlich sein.

Das Modem muß am Linuxrechner an einem seriellen Anschluß (unter DOS und Windows z.B. COM1 und COM2) und logischerweise an die Telefonleitung angeschlossen sein.

Sie müssen auf dem Server das Programmpaket HylaFAX installiert haben. Unter S.u.S.E.-Linux sollten Sie dies entweder bei der Grundinstallation oder zu einem späteren Zeitpunkt mit Hilfe des Setup-Tools YaST durchführen. HylaFAX finden Sie im Paket Netzwerk-Support.

Sie müssen dann, bevor Sie HylaFAX zum ersten Mal benutzen können, das Skript "faxsetup" starten. Das Skript überprüft das Vorhandensein diverser Verzeichnisse und fragt dann Details zum verwendeten Modem ab. Bei meiner Installation fehlten einige Unterverzeichnisse im Verzeichnis /var/spool/fax. Es müssen dort folgende Verzeichnisse vorhanden sein:

/var/spool/fax/archive
/var/spool/fax/bin
/var/spool/fax/client
/var/spool/fax/config
/var/spool/fax/dev
/var/spool/fax/docq
/var/spool/fax/doneq
/var/spool/fax/etc
/var/spool/fax/info
/var/spool/fax/log
/var/spool/fax/pollq
/var/spool/fax/recvq
/var/spool/fax/sendq
/var/spool/fax/status
/var/spool/fax/tmp

Überprüfen Sie Ihre Verzeichnisstruktur, am besten bevor Sie faxsetup starten und legen Sie fehlende Verzeichnisse mit mkdir gegebenenfalls an, das Skript bricht sonst mit der entsprechenden Fehlermeldung wieder ab. Ein kleiner Tip noch an dieser Stelle. Bei mir tut ein ZyXEL-Modem seinen Dienst. Es wird offiziell als Modem vom Typ "Class 2.0" bezeichnet. Aber irgendein Detail in der Implementierung stimmt da wohl nicht, es läßt sich als Class 2.0-Modem mit HylaFAx nicht zur Arbeit überreden. Das Modem läuft jedenfalls problemlos als "Class 2"-Modem. Sehen Sie ggf. in Ihrem Modem-Handbuch nach. Im Verlaufe des Setup-Prozesses erscheint eine Meldung, die Sie darauf hinweist, daß das HylaFAX client-server protocoll nicht per inetd gestartet wird und Sie werden gefragt, ob "Should an entry be added to inetd.conf?". Antworten Sie hier mit "no". Unter S.u.S.E.-Linux wird HylaFAX anders gestartet (s.u.).

Wenn Sie später ein anderes oder ein zusätzliches Modem anschließen, können Sie dies tun, indem Sie nur das Skript "faxmodem" starten.

Wenn Sie die obigen Schritte erfolgreich abgeschlossen haben, müssen Sie in der Datei /etc/rc.config den Eintrag START_HYLAFAX=no in START_HYLAFAX=yes ändern.

Ein Hinweis noch: Ich erinnere mich, daß ich zwischenzeitlich Probleme mit HylaFAX hatte, nachdem ich faxsetup bzw. faxmodem gestartet hatte. Die Probleme hatten damit zu tun, daß die Dateien FIFO, FIFO.modem und _FIFO.ttyS1 als Eigentümer dem user fax zugeordnet waren. Überprüfen Sie dies durch Eingabe von "ls -l /var/spool/fax" und ändern Sie dies ggf. mit Hilfe des Kommandos chown uucp Datei" für die drei oben genannten Dateien.

Tragen Sie dann noch die IP-Nummern aller Rechner, die Faxe an HylaFAX weiterreichen dürfen, in die Datei /var/spool/fax/etc/hosts ein. In jede Zeile eine IP-Nummer. Bei mir dürfen das alle Rechner des lokalen Netzes, die Datei hat folgenden Inhalt:
localhost
127.0.0.1
192.168.1.2
192.168.1.3
192.168.1.4
192.168.1.5
192.168.1.6

Wenn Sie daran interessiert sind, die Kopfzeile jeder Faxseite selbst zu gestalten, dann sollten Sie die Datei /var/spool/fax/etc/config.modem bearbeiten.
In der Zeile
LocalIdentifier: sollten Sie ggf. Ihren Namen und die Faxnummer eintragen
(z.B. MeinName: +49 meine Nummer) und
wenn Sie Ihre Faxe überwiegend im deutschen Sprachraum verschicken, sollten Sie die Zeile:
TagLineFormat: ändern in "Von %%l|%c|Seite %%p von %%t".

Sie müssen den Linuxrechner jetzt neu starten; beim Systemstart sehen Sie dann am Ende die Startmeldung von HylaFAX.

Wichtiger Hinweis zum Update der Distribution: Wenn Sie die Linuxdistribution updaten, müssen Sie das Skript faxsetup auch auf einem System, auf dem HylaFAX bereits erfolgreich gelaufen ist, anfangs noch einmal laufen lassen. HylaFAX findet sonst das modem nicht (Hat mich eine schlaflose Nacht gekostet!)

Die Einrichtung eines Windows 95- / Windows NT-Client für Hylafax

Voraussetzung für die Nutzung von HylaFAX unter Windows ist die Installation des TCP/IP-Protokolls.

In meinen Augen gibt es zur Zeit zwei vernünftige Lösungen für 32-Bit-Windows. Zum einen den Windows-Hylafax-Client (WHFC) von Ulrich Eckhardt und das auf Windows portierte SuSEFAX der Firma SuSE. Beide Programme sind kostenlos.

WHFC

Für Windows 95 und Windows NT gibt es einen kostenlosen Client (WHFC, Copyright (c) 1996 RGW Express Airfreight GmbH). Sie finden die aktuelle Version des Programms(seit Ende 1998 dem Alpha-Stdium entwachsen) auf der WHFC-WWW-Seite.

Das Programm läuft im Hintergrund und wartet darauf, daß Sie über einen speziell eingerichteten Drucker eine Datei drucken. Diese wird dann von WHFC an den Faxserver weitergereicht. Zusätzlich verfügt das Programm noch über ein Telefonbuch. Im Grunde ist die Installation sehr simpel und auch ausreichend in der README-Datei von WHFC beschrieben. Deshalb spare ich mir hier weitere Hinweise

Als letztes erstellen Sie eine Verknüpfung mit dem Programm whfc.exe in der Gruppe Autostart, wenn WHFC automatisch beim Systemstart geladen werden soll. Wenn Ihr Linuxserver nicht ständig in Betrieb ist, ist es besser, das Programm nur bei Bedarf zu starten.

Sie können jetzt aus jeder Windows-Anwendung faxen, indem Sie den Postscriptdrucker auswählen, der mit dem whfc-Port verbunden ist. Nach dem Drucken werden Sie von WHFC dann jeweils nach der Faxnummer gefragt.

Ich habe mir z.B. für Word für Windows ein Makro gebastelt, das das aktuelle Dokument auf dem Faxdrucker ausgibt und dann wieder den Standarddrucker aktiviert. Das Makro habe ich mit einem Button in der Buttonleiste von Winword verbunden. Damit funktioniert das Faxen dann "auf Knopfdruck". Das Makro sieht für Word 97 so aus (Sie müssen dann die Einträge , die im folgenden rot markiert sind entsprechend ihrer Rechnerkonfiguration anpassen):

'***** Makro FaxDrucken **************************************************

Sub FaxDrucken()
'
' FaxDrucken Makro
' Makro von Detlev Reymann
' Zweck des Makros: Das aktuelle Dokument mittels
' WHFC ausdrucken
'
' Feststellen, ob Hylafax bereits läuft
If Tasks.Exists("WHFC") = False Then
    ' Wenn nicht, Das Hylafax-Programm starten
    Dim Ergebnis As Integer
    Ergebnis = -1
    ' In der folgenden Zeile ggf. den Installationspfad von whfc anpassen !!!
    Ergebnis = Shell("C:\Programme\Hylafax\Whfc.exe", 6)
    ' Wenn das nicht funktioniert hat, Fehlermeldung und Makro beenden
    If Ergebnis < 0 Then
        Ergebnis = MsgBox("Kann Hylafx-Client nicht starten", vbInformation, "Achtung")
        Exit Sub
    End If
End If
' Jetzt den Drucker zum aktiven Drucker machen, der mit whfc verbunden ist
' In der folgenden Zeile muß der Druckername ggf. angepaßt werden
' Im Zeifelsfall in Word im Dateimenü Drucken aufrufen und die Liste der
' Drucker überprüfen
ActivePrinter = "Faxdrucker"
' Das ganze Dokument drucken:
Application.PrintOut
    FileName:="", Range:=wdPrintAllDocument, Item:= _
    wdPrintDocumentContent, Copies:=1, Pages:="", PageType:=wdPrintAllPages, _
    Collate:=True, Background:=True, PrintToFile:=False
' Den Standarddrucker wieder einstellen
' auch hier wieder die eigenen Daten eintragen
' Im Zeifelsfall in Word im Dateimenü Drucken aufrufen und die Liste der
' Drucker überprüfen
ActivePrinter = "Standarddrucker"
End Sub
'******Ende Makro FaxDrucken********************************


Die OLE-Fähigkeit von WHFC macht es auch möglich, mittels Word Serienfaxe zu erstellen! Dabei können Sie die vollständigen Serienbrieffunktionen von Word verwenden! Sie müssen in Word ein Serienbriefhauptdokument erstellen (Menü: Extras->Seriendruck) und das Hauptdokument mit einer Datenquelle verbinden. In der Datenquelle muß ein Feld vorhanden sein, das im Titel den Text Telefax enthält. Es ist egal, welches Feld (erstes, zweites, letztes ...) dies ist, das Makro sollte es alleine herausfinden.
Das Makro sorgt dafür, daß für jeden Datensatz, für den eine Faxnummer definiert ist, ein separates Fax erstellt wird.
Ich habe mir in die Symbolleiste für den Seriendruck einen Button eingefügt, der mit dem unten stehenden Makro verknüpft ist.

Auch hier sind die Stellen, an denen Sie das Makro ggf. anpassen müssen rot markiert.
'********Makro SerienfaxDrucken*******************************
Sub SerienFax()
'
' SerienFax Macro
' Dieses Makro erstellt Serienfaxe auf Basis eines Word-Seriendruckdokumentes
' Es basiert auf einem Macro von Keith Gray,
' und wurde angepasst von Detlev Reymann am 22.3.99
'

' Variablen definieren
Dim whfc As Object
Dim OLE_Return As Long
Dim FaxNummer As String
Dim SpoolFile As String
Dim Title As String
Dim WhfcPrinter As String
Dim NbrOfFields As Integer
Dim j As Integer
Dim TelefaxNrFeld As Integer
Dim Ergebnis As Integer

' Damit das Makro funktioniert muß das aktive Dokument ein Serienbriefhauptdokument sein
' und es muß eine Datei mit den Datensätzen definiert sein.
' Das wird im folgenden überprüft
If ActiveDocument.MailMerge.State <> wdMainAndDataSource Then
    Ergebnis = MsgBox("Kein Seriendruckdokument oder keine Datenquelle", vbInformation, "Achtung")
    Exit Sub
End If

' Feststellen wieviele Faxe geschickt werden sollen
' Dazu Nummer des letzten Datensatzes feststellen
ActiveDocument.MailMerge.DataSource.ActiveRecord = wdLastRecord
NmbOfFaxes = ActiveDocument.MailMerge.DataSource.ActiveRecord

' Ersten Datensatz zum aktiven Datensatz machen
ActiveDocument.MailMerge.DataSource.ActiveRecord = wdFirstRecord

' Feststellen, welches Datenfeld die Bezeichnung Telefax enthält
' Das sollte es möglich machen, an beliebiger Stelle ein Feld
' für die Telefaxnummer zu definieren. es muß nur der Text
' fax in der Feldbezeichnung vorkommen.
' Es müßte also auch Telefax-Nr funktionieren
NbrOfFields = ActiveDocument.MailMerge.DataSource.DataFields.Count
' j speichert die Feldnummer
For j = 1 To NbrOfFields
    If InStr(1, ActiveDocument.MailMerge.DataSource.DataFields(j).Name, "fax") > 0 Then
        TelefaxNrFeld = j
        Exit For
    End If
Next j

' Wenn kein Datenfeld für die Faxnummer gefunden wurde
' das Makro abbrechen
If j > NbrOfFields Then
    Ergebnis = MsgBox("Kein Datenfeld für die Telefaxnummer definiert", vbInformation, "Achtung")
    Exit Sub
End If

' OLE-Verbindung zu WHFC herstellen
Set whfc = CreateObject("WHFC.OleSrv")

' Jetzt in einer Schleife die Faxe drucken
For i = 1 To NmbOfFaxes
    ' Für jedes einzelne Fax eine temporäre Datei
    ' Hier muß ggf. wieder der Pfad angepaßt werden
    SpoolFile = "C:\Temp\whfc\fax" & i & ".ps"
    Title = "WHFC OLE Serienfaxmakro"

    ' Die aktualisierten Datenfelder anzeigen
    ' Das ermöglicht die Verwendung der Seriendruckfelder im Hauptdokument
    ' und sorgt dafür, daß die korrekten Werte des aktiven Records
    ' angezeigt werden
    ActiveWindow.View.ShowFieldCodes = False
    ActiveWindow.View.MailMergeDataView = True

    ' Die Faxnummer aus dem Feld nehmen, daß oben ermittelt wurde
    FaxNummer = ActiveDocument.MailMerge.DataSource.DataFields(j)

    ' Fax nur schicken, wenn Faxnummer eingetragen ist
    If FaxNummer > "" Then

        ' Einen Postscriptdrucker als Drucker festlegen
        ' Achtung !!!!!!!!!!!!!!!!!!!!!!!!!
        ' Hier muß ggf. der eigene Postscriptdrucker eingetragen werden
        ' Ich hatte hier Probleme, den WHFC-Drucker zu verwenden und habe
        ' extra einen Postscriptdrucker mit Ausgabe in eine Datei definiert
        WhfcPrinter = "Apple Color LW 12/600 PS"
        ActivePrinter = WhfcPrinter$
        ' Jeweils das ganze Dokument drucken
        Application.PrintOut FileName:="", Range:=wdPrintCurrentPage, _
            Item:=wdPrintDocumentContent, Copies:=1, Pages:="", _
            PageType:=wdPrintAllPages, Collate:=True, Background:=True, _
            PrintToFile:=True, OutputFileName:=SpoolFile, Append:=False

        ' Mit diesem Kommando wird das jeweilige Fax an WHFC übergeben und von
        ' diesem an den Faxserver weitergeleitet.
        OLE_Return = whfc.SendFax(SpoolFile, FaxNummer, True)
        ' Falls das nicht klappt, Fehlermeldung
        If OLE_Return <= 0 Then
            Ergebnis = MsgBox("Fehler bei Verbindung zu WHFC", 16, Titel)
        End If

    End If
    ' Nächsten Datensatz holen
    ActiveDocument.MailMerge.DataSource.ActiveRecord = wdNextRecord
Next i

Set whfc = Nothing
' Wieder Standarddrucker einstellen
' Auch hier bitte den eigenen Standarddrucker eintragen
ActivePrinter = "Standarddrucker"
End Sub

Es gibt damit aus meiner Sicht keinen Grund mehr, kommerzielle Programme für die Faxerstellung zu verwenden!

SuSEFAX unter Windows

Die Firma SuSE hat einen Client für Hylafax in der Programmiersprache Java programmiert und stellt diesen auch für  Windows 95 und Windows NT zur Verfügung. Sie müssen die heruntergeladene Zip-Datei entpacken und in ein beliebiges Verzeichnis entpacken. Bei meiner Installation wurde das Unterverzeichnis images fälschlicherweise parallel zum Verzeichnis bin installiert und nicht unterhalb des Verzeichnisses bin!

Anders als WHFC handelt es sich nicht um einen Portmonitor (ein Programm, das gewissermaßen an einem virtuellen Druckeranschluß lauscht) sondern um ein Programm, das überprüft, ob eine bestimmte Datei (Spooldatei) verändert wird. Sie müssen also auch hier einen Postscriptdurcker im System einrichten, nur daß dieser nicht an einen Druckeranschluß angeschlossen wird, sondern daß Sie hier eine Ausgabedatei (eben die Spooldatei von SuSEFax) definieren müssen Im Unterverzeichnis bin finden Sie das Programm SuSEFax.exe. Unter Einstellungen müssen Sie dort auch den Server eintragen und die Spooldatei. Entweder starten sie SuSEFax indem Sie eine Verknüpfung in den Autostart-Ordner aufnehmen oder Sie starten es, wenn Sie es benötigen.

Die Einrichtung eines Linux-Client für Hylafax

Unter Linux steht ein freies Programm zur Verfügung, das von der Firma S.u.S.E. stammt. Es benötigt allerdings die grafische Oberfläche X-Window. Sie sollten das Programm mit dem Setup-Tool YaST installieren. Es befindet sich im Paket "Netzwerk-Support" und heißt "susefax". Achtung!!! Die Version von susefax, die mit der Originalversion 5.0 ausgeliefert wird, hat noch Fehler - es funktioniert nur auf dem Rechner, auf dem auch der HylaFAX-Server installiert ist. Wenn HylaFAX wie in unserem Beispiel auf einem anderen Rechner läuft, müssen Sie die aktualisierte Version benutzen.. Besorgen Sie sich vom Support-Server der Firma S.u.S.E. ggf. die aktuelle Version. Nach erfolgter Installation finden Sie im Verzeichnis /usr/X11R6/bin/ ein Skript mit dem Namen susefax. Susefax bietet einen ähnlichen Funktionsumfang wie WHFC, nur daß schon eine Serienfax-Funktion eingebaut ist. Das Programm wird noch als Betaversion bezeichnet, deshalb ist die Dokumentation wohl auch noch etwas spärlich. Auch susefax erwartet Postscriptdateien, Sie müssen den Namen der Datei und das Verzeichnis bei der Konfiguration von susefax angeben (z.B. /tmp/fax.ps). Soweit ich das ausprobiert habe, muß susefax permanent aktiviert sein. Wenn Sie dann eine Datei mit diesem Namen erzeugen, fragt susefax nach der Faxnummer, die dann auch über das Telefonbuch eingegeben werden kann.

Die Einrichtung eines Windows 3.x Client für Hylafax

Auch für Windows 3.x gibt es einen freien Client. Leider habe ich damit keine Erfahrungen.

Die Einrichtung eines OS/2-Client für Hylafax

Stefan Buckmann hat mir Anfang Oktober 98 per Mail beschrieben, wie er SuSEFax (wenigstens so halbwegs) unter OS/2 zum laufen gebracht hat.
Ich füge seine Beschreibung nachfolgend ein (Sollte noch jemand etwas über einen Client für OS/2 wissen, wäre ich für Hinweise dankbar):

--------------------------------Beschreibung von Stefan Buckmann Beginn----------------------------------------------

Software -
IBM OS/2 Warp 4.0 mit aktuellstem Fixpack, deutsch Java 1.1.6
SYSLEVEL.JAV : XR04006 SYSLEVEL.OS2 : XRG4000
 

SuSEFax in einem Verzeichnisbaum wie folgt installieren: -
X:\SuSEFax : faxcover.ps und susefax.cmd (siehe unten)
X:\SuSEFax\SuSEFax : alle .class-Dateien
X:\SuSEFax\images: alle .gif-Dateien
X:\SuSEFax\META-INF : MANIFEST.MF extrahiert, ausser faxcover.ps und susefax.cmd.

Die Umgebungsvariable HOME muss auf ein existierendes Verzeichnis zeigen.

susefax.cmd erzeugen -
(Die Pfadangaben sind entsprechend anpassen)
/* SUSEFAX.CMD Starten von SuSEFax via Java */
'set path=c:\os2;c:\java11\bin;r:\susefax\susefax'
'set beginlibpath=c:\java11\dll;r:\susefax\susefax;'
'r:'
'cd \susefax'
'start /PM java SuSEFax/SuSEFax'
'exit'

Probleme -
- - Braucht viel Speicher
- - Ladezeit sehr lang
- - Beim Beenden der Applikation bleibt JAVA im Speicher
- - Bei jedem Programmstart wird eine neue Instanz von JAVA geladen
- - Der Systemabschluss funktioniert nicht immer korrekt

--------------------------------Beschreibung von Stefan Buckmann Ende----------------------------------------------


Zurück zur Hauptseite