Eine sehr komfortable und zuverlässige Lösung bietet das Programm Hylafax, das in vielen Telefonanlagen/-systemen eingesetzt wird und problemlos mehr als 20-seitige Faxe überträgt. Dessen Hauptbestandteil ist das Programm Hylafax-Server, welches mit Hylafax Clientprogrammen angesteuert wird. Eine Möglichkeit zur direkten Konsolen-Kommunikation mit dem Hauptprogramm ist auch vorhanden.

Ein bequemer, papierloser EMPFANG kann zwar auch unter Linux über Faxgeräte laufen, die sich z.B. per http über den Internetbrowser steuern lassen; zum VERSENDEN von Faxen per komfortabler, blitzschneller Faxdruckerfunktion gibt es aber leider für übliche Faxgeräte meist keine Linux-Druckertreiber.

Das Programm Hylafax-Server installiert man auf einem Rechner im Praxisnetz, auf den dann die Hylafax-Clientprogramme von den anderen Rechnern zugreifen können. An diesen Rechner hängt man ein Faxmodem, z.B. per USB-Anschluss. Den Telefonausgang dieses Modems verbindet man mit einem analogen Telefongerät-Eingang an der Fritzbox (z.B. fon1) oder an einer anderen Telefonanlage.

Wenn man möchte, dass der Faxserver rund um die Uhr läuft, man seine Praxisrechner nachts aber abstellt, ist eine Installation auf einem raspberry eine gute Lösung, da dieser wenig Strom verbraucht; ansonsten kann man jeden anderen Rechner im Netz nehmen außer dem apraxos-Server, da auf diesem Konflikte mit dem mobilen Kartenlesegerät entstehen würden.

In diesem Beispiel verwendet werden als Rechner ein raspberrypi mit installiertem rasppian bullseye, sowie ein USB-Faxmodem ( hier "US Robotics 56k Faxmodem Model 5637"), eine Steckbuchse für analoge Telefone im Router (z.B. "fon1" an der Fritzbox), hierfür das passende Telefonkabel um Faxmodem und FritzBox zu verbinden, und ein LAN-Kabel zum Verbinden des raspberrypis mit dem Switch des Praxisnetzes.

In der Fritzbox muss in "Telefonie >Fax" die Faxfunktion ausgeschaltet sein, da sonst die FritzBox alle Faxe an sich zieht und nichts am Hylafax-Server ankommt.

Auf dem raspberrypi muss das Paket modemmanager installiert sein.

Hylafax als Faxserver einrichten

Das Paket Hylafax-Server kann man z.B. über synaptic herunterladen.

Zunächst findet man danach heraus, wie das Faxmodem bezeichnet wird mit

ls -l /dev/ttyUSB* /dev/ttyA*

Als Beispiel wird hier "ttyACM0" verwendet.

Die Einrichtung von Hylafax-Server wird dann als root auf der Konsole ausgelöst durch den Befehl: "faxsetup" (und nicht wie im Ubuntu-Wiki beschrieben "faxinstall"!).

Die folgenden Abfragen bestätigt man wie vorgegeben einfach immer mit Enter.

(Wenn das Programm hängt bei "Probing for best speed to talk to modem: 38400" muss man das Modem ab- und wieder einstöpseln (wieder in dieselbe USB-Buchse!).)

Die nun entstandene Datei "/etc/hylafax/config.ttyACM0" enthält noch falsche Konfigurationen und muss angepasst werden, wenn man das "US Robotics 56k Faxmodem Model 5637" benutzt, indem man als root deren Inhalt mit dem unten angegeben ersetzt (z.B. mit Kate).

# $Id$
#
# HylaFAX Facsimile Software
#
# Copyright (c) 1990-1996 Sam Leffler
# Copyright (c) 1991-1996 Silicon Graphics, Inc.
# HylaFAX is a trademark of Silicon Graphics, Inc.
#
# Permission to use, copy, modify, distribute, and sell this software and
# its documentation for any purpose is hereby granted without fee, provided
# that (i) the above copyright notices and this permission notice appear in
# all copies of the software and related documentation, and (ii) the names of
# Sam Leffler and Silicon Graphics may not be used in any advertising or
# publicity relating to the software without the specific, prior written
# permission of Sam Leffler and Silicon Graphics.
#
# THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND,
# EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
# WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
#
# IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR
# ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
# OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
# WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF
# LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
# OF THIS SOFTWARE.
#
#
# Configuration for using the Class 1 command interface with
# a USR Courier or Sportster modem and XON/XOFF flow control.
#
#
CountryCode:		49
AreaCode:		     [Vorwahl ohne führende Null]
FAXNumber:		     [Faxnummer]
LongDistancePrefix:	0
InternationalPrefix:	00
DialStringRules:	etc/dialrules
ServerTracing:		1
SessionTracing:		11
RecvFileMode:		0644
LogFileMode:		0644
DeviceMode:		     0666
RingsBeforeAnswer:	1
SpeakerVolume:		off
GettyArgs:		"-h %l dx_%s"
LocalIdentifier:	"Praxis Mustermann, Xort"
TagLineFont:		etc/lutRS18.pcf
TagLineFormat:		"From %%l|%c|Page %%P of %%T"
MaxRecvPages:		25
#
#
# Modem-related stuff: should reflect modem command interface
# and hardware connection/cabling (e.g. flow control).
#
ModemType:		Class1		# use class 1 interface
ModemRate:		19200		# rate for DCE-DTE communication
ModemFlowControl:	rtscts		# software flow control
#
ModemSetupDTRCmd:	ATS13=1&D3	# setup so DTR drop resets modem
ModemSetupDCDCmd:	AT&C1		# setup so DCD reflects carrier (or not)
ModemNoFlowCmd:		AT&H0	# setup modem for no flow control
ModemHardFlowCmd:	AT&H1	# setup modem for hardware flow control
ModemSoftFlowCmd:	AT&H2	# setup modem for software flow control
ModemResultCodesCmd:	ATQ0X4		# enable result codes
#
ModemMfrQueryCmd:	!USR5637
ModemModelQueryCmd:	ATI3
ModemRevQueryCmd:	ATI7		# XXX returns a multi-line result
#
# When AT+FCLASS=1 is issued the modem automatically switches
# to software flow control; these parameters let the fax software
# reset flow control as needed after entering Class 1.
#
Class1NFLOCmd:		AT+FLO=0	# setup modem for no flow control
Class1HFLOCmd:		AT+FLO=2	# setup modem for hardware flow control
Class1SFLOCmd:		AT+FLO=1	# modem does this automatically
#
# This should resolve "DIS/DTC received 3 times" errors:
#
Class1ResponseWaitCmd:	AT+FRS=1	# wait after sending TCF for response
#
# The remainder of this configuration is included so that the
# modem "idles" in Class 0 while not sending or receiving facsimile.
#
ModemSetupAACmd:	AT+FCLASS=0	# leave modem idling in class 0
ModemAnswerCmd:		AT+FCLASS=1;A	# answer in Class 1
#
# When using AT+FRS=n we see USR modems reset themselves in the middle of sessions
# this is not good.  So, we seem to work-around that problem by not using the
# command.  Unfortunately, this isn't an ideal thing.
#
Class1SwitchingCmd:	"<delay\0727>"

Nun kopiert man den o.a. Inhalt in die Datei "/etc/hylafax/config.ttyACM0", fügt dann die eigenen Daten ein in die Zeilen: 78, 79, 91 (für die Kopfzeile/Absenderzeile auf den Faxen).

DIE EINRICHTUNG VON HYLAFAX

Eine gute, aktuelle Hilfe findet man unter:

https://wiki.debian.org/HylaFax

Zunächst trägt man seine Netzwerkadressesn ein wie im Kapitel "Acess Controls" auf

https://wiki.debian.org/HylaFax#Creating_Users

beschrieben.

Dann erstellt man auf dem raspberry User je Praxisrechner, von dem aus auf den raspberry zugegriffen werden soll, einen raspberry-User: z.B. "Anmeldung1" und "Server", und gibt ihnen ein User-Passwort nur für den raspberry mit

sudo passwd server
sudo passwd Anmeldung1

Mit dem Befehl aus dem Raspberry "cat /etc/group" erscheinen die Usernummern, aus denen man sich die entsprechende herausucht, zB "server:x:1001".

Mit dem Kommando "faxadduser" auf der Konsole des Hylafax-Server-Rechners (hier der raspberry), z.B. den User "server" mit Passwort "faxuserpasswort" hinzuzufügen (als Beispiel: "faxadduser -p [faxuserpasswort] -u [usernummer] server"). Dieses Passwort sollte ein neues, nur für Hylafax verwendetes sein.

faxadduser -p [faxuserpasswort] -u 1001 server

Die Kontrolle der Einrichtung des Hylafax-Servers erfolgt mit Konsoleneingabe "faxstat": Ziel ist die Meldung: „Running and idle“.

UNTER DEBIAN-BULLSEYE wird mit systemd gearbeitet, deshalb zum Starten des hylafax-servers ab dieser Version eingeben:

systemctl enable hylafax.service hfaxd.service

Dagegen unter Debian-Buster mit:

service hylafax start

Jetzt kann man Faxe versenden, entweder über die Konsole (siehe Hylafax Handbuch) oder über einen Faxclient, den man zunächst auf dem raspberrypi, dann auf den Clientrechnern im Praxisnetz einrichtet.

Faxempfang

Zum Empfangen von Faxen muss das faxgetty-Modul eingeschaltete werden, unter Debian bis buster mit:

faxgetty

Unter Debian-Bullseye wird mit systemd gearbeitet, deshalb ab dieser Version mit:

service faxgetty@ttyACM0 start

Hylafax-Client einrichten

Als Faxclientprogramm beschreibe ich hier den yajhfc ("Yet Another Java Hylafax Client") von Jonas Wolz. Diesen installiert man auf allen Rechnern, von denen aus man ein Fax senden möchte, auch auf dem apraxos-Server und dem raspberry. Zum bequemen Versenden richtete man den Faxdrucker yajhfc sowohl im CUPS des Servers als auch im lokalen CUPS eines Clients ein.

Das Paket lädt man herunter und installiert es nach der Anleitung auf:

https://www.yajhfc.de/downloads/deb-packages

Der Hylafax-Server lässt nur Anmeldungen von Fax-Clients zu, die in der Datei hosts.hfaxd eingetragen sind.

a. Zur Nutzung lokal auf einem Clientrechner "Anmeldung1"

Zum direkten Faxen eines auf diesem Clientrechner gespeicherten PDF-Dokuments: hat man auf diesem Anmeldung1 das Hilfsprogramm yajhfc installiert und in dessen lokalen CUPS eingefügt, funktioniert er als Faxdrucker wie ein normaler Drucker über "Datei > Drucken": damit wird der Faxauftrag zum Faxserver-Rechner (z.B. den raspberry) gesendet, welcher dann alle Faxaufträge nacheinander selbständig abarbeitet, bei Scheitern mit Wahlwiederholungen (Achtung: die Wahlwiederholung z.B. auf 12x zu stellen, kann bei einer Falscheingabe der Faxnummer für den falschen Empfänger nervtötend sein!). Das Symbol auf dem Desktop des Clientrechners1 benennt man am besten mit "yajhfcLokal".

Die einfachste Möglichkeit wäre eigentlich mit Xsane einen Scan zu starten, bei Einstellung "Fax". Leider kollidieren XSane und yajhfc, sodass man eine anderen Weg nehmen muss: statt den Scan auf Anmeldung1 zu holen, lässt man ihn vom LAN-Scanner auf Anmeldung1 schicken. Der LAN-Scanner Brother ADS-2400DN z.B. hat drei Automatiktasten: Taste 1 kann man so einrichten, dass der Scanner einseitig gescannte Vorlagen als pdf auf den Weg ins Verzeichnis a/mail-in des apraxos-Servers schickt, Taste 2 dto. für beidseitiges Scannen. Taste 3 dagegen könnte den Scan auf Anmeldung1 in ein eigenes Scan-to-Fax-Verzeichnis schicken. Dort öffnet man das angekommene pdf, geht auf "Datei > Drucken" und wählt den yajhfc-Drucker aus: nun öffnet sich ein Fenster zur Auswahl oder Eingabe der Faxnummer des Empfängers. Mit Absenden wird die Sendedatei auf den raspberry geschickt und man kann sofort das Fenster schließen, oder aber den Sendevorgang verfolgen und kontrollieren.

Damit der LAN-Scanner Brother ADS-2400DN mit den Automatiktasten einen Scan in ein PC-Verzeichnis schicken kann, bietet er eigentlich verschiedene Modi an, aber FTP und SFTP habe ich leider nicht einrichten können (obwohl der Scanner brav seinen publickey zum Zielrechner sendet: selbst die Brother Hotline sieht sich nicht in der Lage, die Voraussetzungen dazu mitzuteilen), also muss man zum Empfang des Scans auf dem Clientrechner einen Ordner für samba freigeben.

b. Zum Faxen direkt aus apraxos

Zum Beispiel zum Senden einer apraxos-Externdatei direkt aus der Karteikarte, oder auch direkt aus a/mail-in. Hat man auf dem apraxos-Server den yajhfc-Faxdrucker in seinem CUPS installiert, kann dieser nicht nur vom Server aus, sondern theoretisch auch von jedem Clientrechner, der sich ins apraxos eingewählt hat, wie ein Formulardrucker angewählt werden.

Leider kann man nicht mehrere Instanzen des yajhfc gleichzeitig an einem Rechner öffnen, der Versuch eine zweite z,B. auf dem apraxos-Server, zu starten scheitert. Das bedeutet, dass man nach jedem Start des apraxos-Servers zunächst nur an diesem Rechner direkt aus apraxos heraus per Faxdrucker senden kann. Möchte man dies beim Arbeiten in apraxos von einem Clientrechner aus (z.B.Clientrechner2) tun, muss man zuvor die yajhfc-Instanz auf dem apraxos-Server abgeschaltet haben, da ja NUR EINE INSTANZ DES YAJHFC AUF DEM APRAXOS-SERVER AKTIV SEIN KANN. Diesen aktiven yajhfc auf dem apraxos-Server beendet man (meist ja schon gleich nach dem Hochfahren des apraxos-Servers) auf seiner Konsole, indem man sich mit

ps aux

alle Prozesse anzeigen lässt, dann hier mit "Bearbeiten > Suchen" den Prozess "yajhfc" sucht, sich dessen Nummer merkt und auf der Konsole eingibt:

kill <diese Prozess-Nummer>

wodurch die laufende Instanz des yajhfc auf dem apraxos-Server beendet wird. Dies muss nach jedem Anmelden und Hochfahren des apraxos-Servers wiederholt werden, es sei denn, man möchte direkt am apraxos-Server senden.

Nun kann man von EINEM Client (z.B.Anmeldung2) aus apraxos heraus PDFs faxen, indem man diese vom Anmeldung2 aus öffnet und über "Datei > Drucken" den yajhfc als Drucker auswählt. Um den Faxverlauf zu kontrollieren, richtet man sich auf dem Desktop von Anmeldung2 eine Vernüpfung zur yajhfc auf dem server ein: "ssh -X praxis@server yajhfc", welche nach Anklicken auf dem Desktop von Anmeldung2 das Faxfenster des Servers anzeigt. Diese Verknüpfung auf dem Desktop des Clientrechner2 nennt man am besten "yajhfcServer".

Auf diesem Rechner Anmeldung2 kann man als Kopierfunktion XSane benutzen, wenn hier kein lokales yajhfc installiert ist, indem man per Xsane einen Scan vom LAN-Scanner holt und zum Drucker schickt.

ACHTUNG 1: hat man in Linux-Systemeinstellungen für die Tastatur die Einstellung gewählt: "Tastenblock immer Nummerneingabe (wie bei Mac)", führt dies beim yajhfc zu Fehleingaben der Telefonnummer, wenn die "Num"-Taste nicht leuchtet: die vierte Zahl wird dann falsch und obendrein vor der dritten Zahl eingereiht! Abhilfe: Lämpchen "Num" anschalten (kann als Starteinstellung in den System Einstellungen festgelegt werden).

ACHTUNG 2: Bei einem Debian-Update des Hylafaxserver-Rechners (hier: raspberry) geht manchmal das Passwort für den Zugriff von Clients aus verloren, Abhilfe: die User alle nochmal zur hosts.hfaxd hinzuzufügen, so dass Hylafax die User darüber authentifiziert. Am einfachsten geht das über das Kommando faxadduser auf der Konsole des Hylafax-Server-Rechners (hier der raspberry), z.B. um den User "daniel" mit Passwort "passwort" hinzuzufügen (als Beispiel: "faxadduser -p [passwort] -u 1001 server").

faxadduser -p [faxuserpasswort] -u [Usernummer] [raspberrybenutzername]

Falls man zum EMPFANGEN von Faxen eine andere Faxbox/Telefonlage o.ä.benutzen möchte, kann man in der Konfiguration „faxgetty“ abschalten: dann wird Hylafax ausschließlich zum Senden benutzt. Das kann natürlich gelegentlich dazu führen, dass die (häufig nur zwei vorhandenen) Telefonleitungen/-kanäle beide gleichzeitig zum Faxen (eine empfängt auf der einen und Hylafax sendet auf der zweiten) benutzt werden, siehe:

https://legacy.hylafax.org/site1/howto/tweaking.html#ss6.6

Bei hohem Faxaufkommen (als Radiologe z.B.) könnte man an den Hylafaxserver-Rechner mehrere Modems anschließen, aber wie gesagt, wäre dann eine Zubuchung mehrerer Telefonleitungen/-kanäle oder/und eine weitere Fritzbox sinnvoll.

Ein RASPBERRY RECHNER arbeitet lautlos, da ohne Lüfter, und nimmt kaum Platz ein, da er fast immer ohne angeschlossenen Bildschirm, Tastatur oder Maus bleibt, welche nur für Updates angeschlossen werden. (Es gibt auch die Möglichkeit ihn "headless" zu betreiben, d.h. nur von anderen Rechnern aus mithilfe von VNC, was ich aber nicht ausprobiert habe). HINWEIS: wenn der raspberrypi ohne Monitorverbindung startet, kann er nicht auf einem HDMI-Anschluss landen. Deshalb muss man in der Datei /boot/congig.txt entkommentieren:

hdmi_force_hotplug=1
hdmi_drive=2

Diese Installation habe ich über zwei Jahre für alleinigen Faxversand ohne Empfangsfunktion getestet auf einem völlig ausreichenden raspberry pi 3 Model B (2 MB RAM) unter raspian-Stretch, mit uptime Zeiten von 150 Tagen ohne ihn abzuschalten.

Auf einem raspberry 4 Model B (4 GB RAM) Buster habe ich Hylafax auch für den Faxempfang erfolgreich getestet.

HINWEIS: es gibt Berichte, nach denen ein häufiges Ziehen des Netzsteckers ohne vorheriges Herunterfahren des Betriebssystems zur Beschädigung der micro-SD-Card führen kann: zur Sicherheit könnte man deshalb die SD-Card nach der Einrichtung des Hylafax-Servers klonen und diese Kopie zur Seite legen. Es kann auch zu einem solchen schädlichen Systemabsturz kommen, wenn man ein altes raspian (z.B. Stretch) per NOOBS aufgesetzt hatte und dies einfach mit apt dist-upgrade auf Bullseye upgraden will, weil NOOBS nicht mehr unterstützt wird.

Eine andere Option als den raspberry zu nehmen: es gibt heute lautlose, lüfterlose Mini-PCs, die nur ca. doppelt so viel kosten wie ein raspberry, und z.B. eine fest eingelötete eMMC als Laufwerk benutzen (so wie ein Surface Laptop), mit 4GB RAM, die auch sehr wenig Strom verbrauchen und nur etwas mehr als doppelt so groß wie ein raspberry sind.

Obwohl Linux sehr, sehr viel sicherer ist als Windows sollte man auch den raspberry MAXIMAL ABSICHERN: denn immer wieder tauchen ja "unbekannte Unbekannte" als Drohung oder Gefährdung auf (NSO und log4j waren ja auch nicht vorstellbar, bis sie entdeckt wurden!). Für den raspberry-Rechner sollte man deshalb (wie m.E. für alle Rechner im Praxis-Intranet) in der Fritzbox das Internet sperren und es nur alle paar Wochen kurzzeitig für Updates öffnen. Des weiteren sollte man in die Datei /etc/hosts.deny eintragen "ALL : ALL", und in die Datei hosts.allow nur die Rechner, die auf den raspberry Zugriff haben sollen. Am sichersten ist obendrein das Ausschalten der ssh-Anmeldung per Passwort ("PasswordAuthentication no) und Einschalten der Anmeldung mit ssh-key ("PubkeyAuthentication yes"): dazu muss man die pubkeys der zugelassenen Rechner in die .ssh/authorized_keys des users auf dem raspberry einfügen.

Da die eingegangenen Faxe per cronjob vom raspberry (var/spool/hylafax/recvq) auf den apraxos-Server geholt werden, braucht der raspberry keine Zugangsberechtigung für den apraxos-Server (oder einen anderen Rechner im Praxis-Intranet).

Über eine Rückmeldung von Anwendern, die diese Anleitung nützlich finden, würde ich mich sehr freuen, und noch mehr über Verbesserungsvorschläge/gefundene Bugs oder Fehler!