eisfax - Faxserver fuer Windows-Clients ======================================= Version 1.1.7 - Stand 11.01.2005 Copyright (c) 2003-2004 Stefan Krister Copyright (c) 2005 Frank Meyer 1. Voraussetzungen ================== 1.1 Hardware ------------ eisfax benoetigt ein 'Class 2' Faxmodem. Erfolgreich gestestet wurden bis jetzt: ZyXEL U1496, ZyXEL 2864/2864I, USR Courier/Sportster, MultiTech, SupraFAX v32bis, GVC FM144/+, TKR DM-24VF+ (Deltafax), Zoom V.FAST 24K/28K, ELSA Microlink und baugleiche. Ab Version 1.1.0 werden mittels dem CAPI-Paket auch die ISDN-Karten von AVM unterstuetzt. 1.2 Software ------------ eisfax benutzt andere Packages: - ghostscript - libz - gppshare - samba - libpbm - perl - libpng - CAPI Um alle Features zu nutzen werden noch die Packages - mail - apache - apache_php4 benoetigt. - Als wichtigstes Paket ist Samba vonnoeten. Ab Version 1.0.7 bringt Samba alles notwendige mit, um mit eisfax zu kooperieren. Ab Version 1.0.12 werden Faxjobs im Statusfenster des Faxdruckers angezeigt. Samba prueft beim Speichern der Konfiguration, ob eisfax installiert ist. In der Autokonfiguration erzeugt Samba automatisch eine Faxdrucker- Freigabe mit Namen 'eisfax'. In der manuellen Konfiguration muss der Freigabename ebenfalls 'eisfax' sein. Naeheres dazu steht in der Samba-Dokumentation. - Der Faxempfang ist bei analogen Modems insofern schwierig, da der Empfaenger nicht so leicht zu ermitteln ist. Deswegen werden auf einer Webseite die empfangenen Faxe fuer den Faxadministrator dargestellt: http://ihr.eisfair.server/eisfax/eisfax-empfang.php oder im oberen Bereich von http://ihr.eisfair.server/eisfax/eisfax.php - Der Faxadministrator kann diese Faxe gezielt per Mail an den richtigen Empfaenger weiterleiten, ansehen oder loeschen. Apache und PHP sind hier noetig. Fuer das Weitersenden per Mail ist ein Mailsystem notwendig. - Da der Webserver nur mit wenigen Rechten ausgestattet ist, wird das Paket 'sudo' fuer Aktionen benoetigt, die mehr Rechte erfordern. - Die Umwandlung der verschiedenen Druck-, Bild- und Faxformate erledigen Tools und Libraries. - Die zum Betrieb notwendigen Pakete sind auf http://www.pack-eis.de/ aufgelistet. eisfax prueft, ob alle notwendigen Pakete installiert sind und zeigt ggf. eine Fehlermeldung an. 2. Wie funktioniert eisfax -------------------------- eisfax hat zwei laufende Prozesse. Der Eine kuemmert sich um den Faxempfang, der andere erledigt den Faxversand. Bei nur einem verfuegbarem Modem wird zwischen Empfangs- und Versandbetrieb hin- und hergeschaltet. 2.1 Faxversand -------------- Jedes zu sendende Fax wird in eine Warteschlange gestellt. Dort wartet es, bis es an der Reihe ist. Sollte der Faxversand schiefgehen, wird es wiederholt. Solange bis es klappt, oder bis ein Zaehler einen Maximalwert erreicht. Ein Fax kann dabei an mehrere Empfaenger gesendet werden. So sind Faxmailings kein Problem. Der Absender erhaelt eine Mail, aus der hervorgeht, was mit seinem Fax geschehen ist. Das Einstellen eines Fax in die Warteschlange geschieht durch eine spezielle Druckerfreigabe im Samba. Samba erwartet als Namen der Faxfreigabe 'eisfax'. Jedes Windowsprogramm, welches in der Lage ist zu drucken, ist somit in der Lage, ein Fax zu versenden. Ab der eisfax- Version 1.0.10 und der Samba-Version 1.5.0 kann man die Faxnummer auch im Dokument selbst hinterlegen. Bei vorhandener Faxnummer wird diese direkt benutzt und der Responder auf dem PC bleibt unbehelligt. So ist das Ganze weiterhin abwaertskompatibel. Die Faxnummer muss kompatibel zu der kommerziellen Fax-Software Tobit in das Dokument eingebettet werden, naemlich: @@NUMMER 12345678@@ Dieser Teil wird vom Shell-Script automatisch aus dem Dokument entfernt, so dass es _nicht_ mit ausgedruckt wird. Das Einfaerben mit Weiss-auf-Weiss ist also nicht notwendig. Praktisch ist diese Vorgehensmethode, wenn man direkt aus einer Applikation (Datenbank) faxt, welche die Faxnummer bereits kennt und sie entsprechend in das zu faxende Dokument einbetten kann. Damit die Faxnummer erkannt werden kann, muss man die Druckeigenschaften "Eigenschaften -> Allgemein -> Druckeinstellungen -> Layout -> Erweitert -> Grafik -> TrueType-Schriftart" auf "Durch Geraeteschriftart ersetzen" einstellen. Diese Einstellung kann Probleme mit speziellen Schriften geben, die man gerne wiedererkennen moechte (corporate identity). Falls man über moderne Versionen der Windows (tm) Betriebssysteme verfuegt (XP, Win2003) [bei Win2K weiss ich das nicht], kann man dem abhelfen, indem man den Treiber "Apple Laserwriter 16/600 PS" verwendet und in "Eigenschaften -> Geraeteeinstellungen -> Ersetzungstabelle für Schriftarten" lediglich die Schrift "Courier New" durch "Courier" ersetzen laesst und alle anderen Schriftarten (insbesondere die corporate Schrift) auf "Nicht ersetzen" einstellt. Falls das Ergebnis nicht zufriedenstellend ausfaellt, bleibt immer noch der Weg, die Faxnummer(n) via Respond zu uebermitteln. Fehlt die Faxnummer im Dokument, poppt ein Fenster auf (respond.exe), welches zur Eingabe der Faxnummer(n) auffordert. Eisfax wandelt die Druckdaten um, fuehrt sie mit den Nummern zusammen und stellt das Fax als Job in die Warteschlange. Der Faxadmin kann die Warteschlange ueber ein Web-Frontend einsehen und beeinflussen: http://ihr.eisfair.server/eisfax/eisfax-versand.php oder im unterem Bereich von http://ihr.eisfair.server/eisfax/eisfax.php Ein Journal der versendeten Faxe ist auf http://ihr.eisfair.server/eisfax/eisfax-versand-journal.php 2.2 Faxempfang -------------- eisfax lauscht an der Modemschnittstelle. Sobald das Modem ein 'ring' signalisiert, wird abgehoben. Nach dem Handshake wird das Fax empfangen. Die einzelnen Faxseiten werden zusammengefuehrt und als PDF-Datei gespeichert. Der Faxadmin kann die PDF-Dateien per Webseite bearbeiten. Die Webseite findet sich unter http://ihr.eisfair.server/eisfax/eisfax-empfang.php oder im oberen Bereich von http://ihr.eisfair.server/eisfax/eisfax.php Damit nicht jeder Zugriff auf diese Seite bekommt, sollten Sie sie ggf. schuetzen. 3. Konfiguration ---------------- 3.1 Windows-Client ------------------ Zunaechst einmal braucht der Windows-PC Zugriff auf die Samba-Shares. Die Benutzerrechte muessen entsprechend eingerichtet sein. Im 'public'-Share befinden sich zwei Windows-Programme: config.exe und respond.exe Die Default-Einstellungen koennen uebernommen werden - respond.exe sollte anschliessend per Autostart gestartet werden. Es lauert nun in der Tray auf Arbeit. Nachdem die Verbindung mit dem Druckershare 'eisfax' hergestellt wurde, muss als Druckertreiber ein 'Postscript'-Treiber ausgewaehlt werden. Druckertreiber der Klasse 'Apple Laserwriter' sind hier besonders zu empfehlen. Wichtig ist hier lediglich, dass im Eigenschaftendialog des Druckertreibers 'Truetype senden als Bitmap' eingestellt wird. Eine genaue Beschreibung ist als PDF-Datei verfuegbar und liegt im Verzeichnis /public/eisfax/ 3.2 eisfax Server ----------------- START_EISFAX='yes' Hiermit wird die generelle Funktion ein- bzw. ausgeschaltet. EISFAX_TYPE='analog' / EISFAX_TYPE='isdn' Verwenden von analogen Endgeraeten (Modems) oder einer AVM-ISDN-Karte. EISFAX_ID='49 xxx xxxxxxx' Die Faxkennung. Sie kann mittels @ID@ auf jedes Fax als Kopfzeile eingebaut werden. Sie wird sowohl beim Empfang, als auch beim Senden dem Faxpartner als ID waehrend dem Handshake uebermittelt. EISFAX_NAME='Fax-Station' Fax-Stationsname, kann mittels @ST@ in den Faxheader eingebaut werden. Wird ebenfalls fuer die Faxjournale benutzt. EISFAX_PORTSPEED='38400' Die Schnittstellengeschwindigkeit. Der voreingestellte Wert sollte ausreichen. Aeltere Faxmodems sollten mit 19200 zurecht kommen. EISFAX_INITSTRING='ATZ' Initialisierung fuer das Modem. EISFAX_REFRESH='60' Das Update-Intervall fuer das Webfrontend in Sekunden. Eine '0' bedeutet kein automatisches Browserupdate. EISFAX_RECEIVE='yes' Hiermit wird der Faxempfang ein- bzw. ausgeschaltet. EISFAX_RECEIVE_DEVICE='ttyS0' Bezeichnung der Schnittstelle, an der das Modem zum Faxempfang haengt. Die erste Schnittstelle ist 'ttyS0', die zweite 'ttyS1' usw. WICHTIG fuer ISDN: ttyS0 bitte unveraendert so drinlassen! EISFAX_RECEIVE_MSN='' MSN, auf die im ISDN-Betrieb gehoert werden soll. EISFAX_RECEIVE_LOGLEVEL='4' Protokolllevel - 0 bis 9. Je hoeher dieser Wert ist, desto mehr wird in den Logbuechern mitprotokolliert. EISFAX_RECEIVE_AUTOMAIL='yes' Soll jedes empfangene Fax per Mail-Anhang versendet werden? EISFAX_RECEIVE_AUTOMAIL_MAILADDR='faxadm' Mail-Adresse desjenigen, der die Faxe erhalten soll. EISFAX_RECEIVE_AUTOPRINT='yes' Soll ein empfangenes Fax automatisch gedruckt werden? EISFAX_RECEIVE_PRINTERQUEUE='pr1' Auf welche Druckerqueue soll gedruckt werden? EISFAX_RECEIVE_PRINTERDRIVER='' Welcher Druckertreiber soll verwendet werden? Zur Verfuegung stehen im Moment folgende Druckertreiber: bbox bff bit bitcmyk bitrgb bmp16 bmp16m bmp256 bmp32b bmpa16 bmpa16m bmpa256 bmpa32b bmpamono bmpasep1 bmpasep8 bmpgray bmpmono bmpsep1 bmpsep8 ccr cfax cgm24 cgm8 cgmmono cif dfaxhigh dfaxlow epswrite faxg3 faxg32d faxg4 inferno jpeg jpeggray mag16 mag256 mgr4 mgr8 mgrgray2 mgrgray4 mgrgray8 mgrmono miff24 pbm pbmraw pcx16 pcx24b pcx256 pcx2up pcxcmyk pcxgray pcxmono pdfwrite pgm pgmraw pgnm pgnmraw pkm pkmraw pksm pksmraw plan9bm png16 png16m png256 pnggray pngmono pnm pnmraw ppm ppmraw psgray psmono psrgb pswrite sgirgb sunhmono sxlcrt tiff12nc tiff24nc tiffcrle tiffg3 tiffg32d tiffg4 tifflzw tiffpack alc2000 alc4000 alc8500 alc8600 ap3250 appledmp atx23 atx24 atx38 bj10e bj10v bj10vh bj200 bjc600 bjc800 bjc880j bjccmyk bjccolor bjcgray bjcmono cdeskjet cdj1600 cdj500 cdj550 cdj670 cdj850 cdj880 cdj890 cdj970 cdjcolor cdjmono chp2200 cljet5 cljet5c cljet5pr coslw2p coslwxl cp50 declj250 deskjet dj505j djet500 djet500c djet820c dl2100 dnj650c epl2050 epl2050p epl2120 epl5800 epl5900 epl6100 eps9high eps9mid epson epsonc escp escpage escpc fmlbp fmpr fs600 gdi hl1240 hl1250 hl7x0 hpdj1120c hpdj310 hpdj320 hpdj340 hpdj400 hpdj500 hpdj500c hpdj510 hpdj520 hpdj540 hpdj550c hpdj560c hpdj600 hpdj660c hpdj670c hpdj680c hpdj690c hpdj850c hpdj855c hpdj870c hpdj890c hpdjplus hpdjportable ibmpro imagen iwhi iwlo iwlq jetp3852 jj100 la50 la70 la75 la75plus laserjet lbp310 lbp320 lbp8 lex2050 lex3200 lex5700 lex7000 lips2p lips3 lips4 lips4v lj250 lj3100sw lj4dith lj4dithp lj5gray lj5mono ljet2p ljet3 ljet3d ljet4 ljet4d ljet4pjl ljetplus ln03 lp1800 lp1900 lp2000 lp2200 lp2563 lp3000c lp7700 lp8000 lp8000c lp8100 lp8200c lp8300c lp8300f lp8400f lp8500c lp8600 lp8600f lp8700 lp8800c lp8900 lp9300 lp9400 lp9600 lp9600s lq850 lx5000 lxm3200 lxm5700m m8510 md1xMono md2k md50Eco md50Mono md5k mj500c mj6000c mj700v2c mj8000c ml600 necp6 npdl oce9050 oki182 oki4w okiibm paintjet pcl3 photoex picty180 pj pjetxl pjxl pjxl300 pr1000 pr1000_4 pr150 pr201 pxlcolor pxlmono r4081 rpdl samsunggdi sj48 st800 stcolor t4693d2 t4693d4 t4693d8 tek4696 uniprint xes ijs nullpage Welcher Treiber fuer Ihren Drucker der richtige ist, erfahren Sie hier: http://www.cs.wisc.edu/~ghost/doc/gnu/7.05/Devices.htm Das Drucken ist im Moment noch _ueberhaupt_ _nicht_ ausgereift. Es ist durchaus moeglich, dass das Druckergebnis nicht zufriedenstellend ist. Zum einen mag das am Treiber liegen - dann die jeweilige Verwandtschaft ausprobieren. Zum anderen liegt es an der Umwandlung der empfangenen Dateien ueber mehrere Stufen ins Druckformat. Dies geschieht in der Datei /etc/mgetty+sendfax/new_fax bzw. new_capifax - diejenigen die sich auskennen durefen gerne Aenderungen vornehmen. EISFAX_SEND='yes' Hiermit wird der Faxversand ein- bzw. ausgeschaltet. EISFAX_SEND_DEVICE='ttyS0:ttyS1' EISFAX_SEND_DEVICE='ttyS0' Bezeichnung der Schnittstellen, an der die Modems zum Faxversand haengen. Die erste Schnittstelle ist 'ttyS0', die zweite 'ttyS1' usw. eisfax funktioniert natuerlich auch mit nur EINEM Modem zum Empfang und Versand. Solange eisfax Faxe empfaengt, koennen natuerlich keine Faxe versendet werden (und umgekehrt). eisfax fuehrt bei mehreren Sendemodems automatisch ein sog. Loadbalancing durch. WICHTIG fuer ISDN: ttyS0 bitte unveraendert so drinlassen! EISFAX_SEND_MSN='' MSN, die im ISDN-Betrieb benutzt werden soll. EISFAX_SEND_SUPPRESS_MSN='no' Unterdruecken der MSN oder nicht. EISFAX_SEND_USE_ISDN_FAXSERVICE='' ISDN-Fax Indikator benutzen oder nicht. EISFAX_SEND_DIALPREFIX='ATDT2,' Dieses Kommando wird zum Waehlen benutzt. Es ist normalerweise etwas einfaches wie 'ATD' oder 'ATDP'. Im Anschluss an dieses Kommando wird die Faxnummer gewaehlt. Hier koennen Dinge wie 'Amtsholung', 'Warten auf Waehlton' etc. eingestellt werden. Details dazu stehen im Handbuch zum Modem. EISFAX_SEND_DENY='' Liste von Benutzernamen, die keine Faxe senden duerfen. DIESE VARIABLE WIRD MOMENTAN NICHT VERWENDET. EISFAX_SEND_DEFAULTDELAY='18:00' Steuert, wann ein zeitversetztes Fax fruehestens gesendet werden soll (falls in config.exe 'delayed send - checkbox' gesetzt wurde. EISFAX_SEND_MAIL_ON_SUCCESS='yes' Soll eine Mail an den Absender gesendet werden, wenn das Fax erfolgreich versendet wurde? EISFAX_SEND_MAIL_ON_FAILURE='yes' Soll eine Mail an den Absender gesendet werden, wenn der Faxversand erfolglos war? EISFAX_SEND_MAIL_WITH_PDF='no' Soll eine Mail an den Absender gesendet werden, mit dem Fax im Anhang? EISFAX_SEND_MAXFAIL_COSTLY='5' Hiermit kann man einstellen, wie oft ein Fax wiederholt werden soll, wenn waehrend der Uebertragung ein Fehler passierte. EISFAX_SEND_MAXFAIL_TOTAL='10' Hiermit kann man einstellen, wie oft ein Fax wiederholt werden soll, falls noch keine Verbindung zustande kam. EISFAX_SEND_ACTION='delete' delete = Loeschen der Faxjobs nach erfolgreichem Versand archive = Konvertieren der Faxdateien in PDF und Ablegen in /var/spool/fax/archive/ nothing = Markieren der Faxjobs als erledigt EISFAX_SEND_ARCHIVE_PREFACE='yes' Wenn EISFAX_SEND_ACTION='archive' werden die Statusinformationen der einzelnen Sendeversuche auf der ersten PDF Seite hinterlegt. EISFAX_HEADER='@N@ @ID@ an @T@ Seite @P@ von @M@ / @DATE@' Bestandteile des Faxheaders auf jeder Faxseite. Dabei ist "eisfax Server" fester Bestandteil des Headers. Es sind folgende Token definiert: @ST@ Fax-Stationsname aus EISFAX_NAME @T@ Faxnummer an die das Fax gesendet wird @U@ Username des Versenders @N@ Vollstaendiger Name des Versenders (von respond.exe oder aus /etc/passwd) @P@ aktuelle Seitennummer @M@ Gesamtzahl der Seiten @ID@ Fax-Id aus EISFAX_ID @DATE@ Datum und Uhrzeit - frei definierbar in EISFAX_HEADER_DATE. EISFAX_HEADER_DATE='+%d.%m.%Y %H:%M Uhr' Bestandteile des @DATE@-Tokens %d Tag (01..31) %e Tag, rechtsbuendig ( 1..31) %j Tag des Jahres (001..366) %w Tag der Woche (0..6); 0=Sonntag %a Wochentag, abgekuerzt (Sun..Sat) %A Wochentag (Sunday..Saturday) %b Monat, abgekuerzt (Jan..Dec) %B Monat (January..December) %m Monat (01..12) %y Jahr, zweistellig (00..99) %Y Jahr (1970...) %U Kalenderwoche mit Sonntag als ersten Tag der Woche (00..53) %V Kalenderwoche mit Montag als ersten Tag der Woche (01..53) %W Kalenderwoche mit Montag als ersten Tag der Woche (00..53) %H Stunde (00..23) %I Stunde (01..12) %k Stunde ( 0..23) %l Stunde ( 1..12) %M Minute (00..59) %S Sekunden (00..60) %T Uhrzeit, 24-Stunden-Format (hh:mm:ss) %r Uhrzeit, 12-Stunden-Format (hh:mm:ss [AP]M) %p AM / PM %s Sekunden seit `00:00:00 1970-01-01 UTC' (a GNU extension) %c Datum und Uhrzeit (Sat Nov 04 12:02:33 EST 1989) %D Datum (mm/dd/yy) %x Datum (mm/dd/yy) %X Uhrzeit (%H:%M:%S) %z Zeitzone aus RFC-822 (-0500) (a nonstandard extension) %Z Zeitzone %% Das Prozentzeichen EISFAX_HEADER_PERUSER='yes' Die unter 3.3 erklaerten benutzerdefinierten Faxheader koennen hiermit ein- und ausgeschaltet werden. EISFAX_LOG_COUNT='10' Anzahl der Logdateien EISFAX_LOG_INTERVAL='monthly' Intervall zum Rotieren der Logbuecher. 3.3 benutzerdefinierte Faxheader -------------------------------- Benutzerdefinierte Faxheader haben Vorrang gegenueber dem systemweiten Faxheader. Ein User, der einen benutzerdefinierten Faxheader verwenden moechte, muss in seinem /home/username/ eine Datei Namens faxheader erzeugen. Der Inhalt dieser Datei entspricht den Moeglichkeiten fuer EISFAX_HEADER - lediglich das Datumsformat EISFAX_HEADER_DATE wird uebernommen, falls das Token @DATE@ verwendet wurde. 3.4 erweiterte Rechte des Webservers ------------------------------------ Damit das Web-Frontend die noetigen Rechte zum Loeschen der Faxdateien bekommt, muss die Datei /etc/sudoers um folgende Zeile ergaenzt werden: wwwrun ALL = NOPASSWD: /usr/bin/faxrm, /usr/bin/faxq Im Normalfall benutzt man dafuer 'visudo'. Diesen Editor gibt es aber bei eisfair nicht. Der normale Editor tut's genauso. Ein Beispiel fuer eine fertige /etc/sudoers ist als /etc/sudoers.eisfax beigelegt. 4. Verwendete Software ---------------------- Die Kommunikation mit dem Modem, das Einstellen von Jobs in die Warteschlange und Versenden daraus wird durch das Paket 'mgetty+sendfax' erledigt. Details dazu sind auf http://alpha.greenie.net/mgetty/ zu finden. Die Umwandlung der Postscript-Druckerdaten wird durch 'ghostscript' vorgenommen. Details dazu sind auf http://www.cs.wisc.edu/~ghost/ zu finden. Die Kommunikation mit dem Windows-Client wird durch 'respond' vorgenommen. Details dazu sind auf http://www.boerde.de/~horstf/ zu finden. Die Schnittstelle zwischen Samba und mgetty erledigt ein Perlscript 'printfax.pl', welches ebenfalls dort zu finden ist. 5. Dank ------- Da ich selbst keinen ISDN-Anschluss habe, muss ich mir die ISDN- Geraetschaften ausleihen. Im einzelnen waeren das: - ISDN Telefonanlage Quante Maxima IS-2 (1x intern S0, 1x extern S0) von Tobian Matthies - 2x AVM B1 von Klaus Bader - 1x AVM Fritz! PCI und 2x ISDN-Dose von Oliver Musch Diesen Personen gilt mein ausdruecklicher Dank fuer die Unterstuetzung!