
\chapter{eisfax - Faxserver f"ur Windows-Clients}

Version 1.0.5 - Stand 12.04.2003

(c) Stefan Krister <stefan.krister@creative.chaos.de>

\section{Voraussetzungen}

\subsection{Hardware}

eisfax ben"otigt 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.

\subsection{Software}

eisfax benutzt andere Packages:
\begin{itemize}
  \item ghostscript
  \item gppshare
  \item libpbm
  \item libpng
  \item samba
  \item perl
  \item libz
\end{itemize}

Um alle Features zu nutzen werden noch die Packages

\begin{itemize}
  \item mail
  \item apache
  \item apache\_php4
  \item sudo
\end{itemize}
ben"otigt.

\begin{itemize}
\item 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 pr"uft beim Speichern der Konfiguration, ob eisfax installiert
  ist. In der Autokonfiguration erzeugt Samba automatisch eine
  Faxdrucker- Freigabe mit Namen `eisfax'. In der man"ullen
  Konfiguration muss der Freigabename ebenfalls `eisfax' sein. N"aheres
  dazu steht in der Samba-Dokumentation.

\item Der Faxempfang ist bei analogen Modems insofern schwierig, da der
  Empf"anger nicht so leicht zu ermitteln ist. Deswegen werden auf einer
  Webseite die empfangenen Faxe f"ur den Faxadministrator dargestellt:

	http://ihr.eisfair.server/eisfax/eisfax-empfang.php

  oder im oberen Bereich von

	http://ihr.eisfair.server/eisfax/eisfax.php

\item Der Faxadministrator kann diese Faxe gezielt per Mail an den richtigen
  Empf"anger weiterleiten, ansehen oder l"oschen. Apache und PHP sind
  hier n"otig. F"ur das Weitersenden per Mail ist ein Mailsystem
  notwendig.

\item Da der Webserver nur mit wenigen Rechten ausgestattet ist, wird das
  Paket `sudo' f"ur Aktionen ben"otigt, die mehr Rechte erfordern.

\item Die Umwandlung der verschiedenen Druck-, Bild- und Faxformate
  erledigen Tools und Libraries.

\item Die zum Betrieb notwendigen Pakete sind auf

	\url{https://www.pack-eis.de/}

  aufgelistet. eisfax pr"uft, ob alle notwendigen Pakete installiert
  sind und zeigt ggf. eine Fehlermeldung an.

\end{itemize}

\section{Wie funktioniert eisfax}

eisfax hat zwei laufende Prozesse. Der Eine k"ummert sich um den
Faxempfang, der andere erledigt den Faxversand. Bei nur einem
verf"ugbarem Modem wird zwischen Empfangs- und Versandbetrieb hin- und
hergeschaltet.

\subsection{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 Z"ahler einen
Maximalwert erreicht. Ein Fax kann dabei an mehrere Empf"anger gesendet
werden. So sind Faxmailings kein Problem.

Der Absender erh"alt 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. Gleich nachdem der
`drucken'-Dialog abgeschlossen wurde, poppt ein Fenster auf
(respond.exe), welches zur Eingabe der Faxnummer(n) auffordert.

eisfax wandelt die Druckdaten um, f"uhrt sie mit den Nummern zusammen und
stellt das Fax als Job in die Warteschlange.

Der Faxadmin kann die Warteschlange "uber 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

\subsection{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 zusammengef"uhrt 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.
sch"utzen.

\section{Konfiguration}

\subsection{Windows-Client}

Zun"achst einmal braucht der Windows-PC Zugriff auf die Samba-Shares. Die
Benutzerrechte m"ussen entsprechend eingerichtet sein. Im `public'-Share
befinden sich zwei Windows-Programme:

config.exe und respond.exe

Die Default-Einstellungen k"onnen "ubernommen werden - respond.exe
sollte anschliessend per Autostart gestartet werden. Es la"urt nun in
der Tray auf Arbeit.

Nachdem die Verbindung mit dem Druckershare `eisfax' hergestellt wurde,
muss als Druckertreiber ein `Postscript'-Treiber ausgew"ahlt werden.
Druckertreiber der Klasse `Apple Laserwriter' sind hier besonders zu
empfehlen. Wichtig ist hier lediglich, dass im Eigenschaftendialog des
Druckertreibers `Tr"utype senden als Bitmap' eingestellt wird.

Eine gena"u Beschreibung ist als PDF-Datei verf"ugbar und liegt im
Verzeichnis /public/eisfax/

\subsection{eisfax Server}

START\_EISFAX='yes'

Hiermit wird die generelle Funktion ein- bzw. ausgeschaltet.

EISFAX\_TYPE='analog' / EISFAX\_TYPE='isdn'

Verwenden von analogen Endger"aten (Modems) oder einer ISDN-Karte.
Eisfax kann im Moment nur mit analogen Endger"aten arbeiten.

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 w"ahrend dem Handshake "ubermittelt.

EISFAX\_NAME='Fax-Station'

Fax-Stationsname, kann mittels @ST@ in den Faxheader eingebaut werden.
Wird ebenfalls f"ur die Faxjournale benutzt.

EISFAX\_PORTSPEED='38400'

Die Schnittstellengeschwindigkeit. Der voreingestellte Wert sollte
ausreichen. Aeltere Faxmodems sollten mit 19200 zurecht kommen.

EISFAX\_INITSTRING='ATZ'

Initialisierung f"ur das Modem.

EISFAX\_RECEIVE='yes'

Hiermit wird der Faxempfang ein- bzw. ausgeschaltet.

EISFAX\_RECEIVE\_DEVICE='ttyS0'

Bezeichnung der Schnittstelle, an der das Modem zum Faxempfang h"angt.
Die erste Schnittstelle ist `ttyS0', die zweite `ttyS1' usw.

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 Logb"uchern 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\_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 h"angen.
Die erste Schnittstelle ist `ttyS0', die zweite `ttyS1' usw.

eisfax funktioniert nat"urlich auch mit nur EINEM Modem zum Empfang und
Versand. Solange eisfax Faxe empf"angt, k"onnen nat"urlich keine Faxe
versendet werden (und umgekehrt).

eisfax f"uhrt bei mehreren Sendemodems automatisch ein sog.
Loadbalancing durch.

EISFAX\_SEND\_MSN=''

MSN, die im ISDN-Betrieb benutzt werden soll.

EISFAX\_SEND\_SUPPRESS\_MSN='no'

Unterdr"ucken der MSN oder nicht.

EISFAX\_SEND\_USE\_ISDN\_FAXSERVICE=''

ISDN-Fax Indikator benutzen oder nicht.

EISFAX\_SEND\_DIALPREFIX='ATDT2,'

Dieses Kommando wird zum W"ahlen benutzt. Es ist normalerweise etwas
einfaches wie `ATD' oder `ATDP'. Im Anschluss an dieses Kommando wird
die Faxnummer gew"ahlt. Hier k"onnen Dinge wie `Amtsholung', `Warten auf
W"ahlton' etc. eingestellt werden. Details dazu stehen im Handbuch zum
Modem.

EISFAX\_SEND\_DENY=''

Liste von Benutzernamen, die keine Faxe senden d"urfen. DIESE VARIABLE
WIRD MOMENTAN NICHT VERWENDET.

EISFAX\_SEND\_DEFAULTDELAY='18:00'

Ste"urt, wann ein zeitversetztes Fax fr"uhestens 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\_MAXFAIL\_COSTLY='5'

Hiermit kann man einstellen, wie oft ein Fax wiederholt werden soll,
wenn w"ahrend der "Ubertragung 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  = L"oschen 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:

\begin{tabular}{ll}
@ST@    &Fax-Stationsname aus EISFAX\_NAME\\
@T@     &Faxnummer an die das Fax gesendet wird\\
@U@     &Username des Versenders\\
@N@     &Vollst"andiger 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\\
\end{tabular}

EISFAX\_HEADER\_DATE='+\%d.\%m.\%Y \%H:\%M Uhr'

Bestandteile des @DATE@-Tokens

\begin{tabular}{ll}
\%d     &Tag (01..31)\\
\%e     &Tag, rechtsb"undig ( 1..31)\\
\%j     &Tag des Jahres (001..366)\\
\%w     &Tag der Woche (0..6);  0=Sonntag\\
\%a     &Wochentag, abgek"urzt (Sun..Sat)\\
\%A     &Wochentag (Sunday..Saturday)\\
\%b     &Monat, abgek"urzt (Jan..Dec)\\
\%B     &Monat (January..December)\\
\%m     &Monat (01..12)\\
\%y     &Jahr, zweistellig (00..99)\\
\%Y     &Jahr (1970\ldots)\\
\%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\\
\end{tabular}

EISFAX\_HEADER\_PERUSER='yes'

Die unter \ref{eisfax-ud-heading} erkl"arten benutzerdefinierten Faxheader k"onnen hiermit
ein- und ausgeschaltet werden.

EISFAX\_LOG\_COUNT='10'

Anzahl der Logdateien

EISFAX\_LOG\_INTERVAL='monthly'

Intervall zum Rotieren der Logb"ucher.

\marklabel{eisfax-ud-heading}{\subsection{Benutzerdefinierte Faxheader}}

Benutzerdefinierte Faxheader haben Vorrang gegen"uber dem systemweiten
Faxheader. Ein User, der einen benutzerdefinierten Faxheader verwenden
m"ochte, muss in seinem /home/username/ eine Datei Namens faxheader
erzeugen. Der Inhalt dieser Datei entspricht den M"oglichkeiten f"ur
EISFAX\_HEADER - lediglich das Datumsformat EISFAX\_HEADER\_DATE wird
"ubernommen, falls das Token @DATE@ verwendet wurde.

\subsection{erweiterte Rechte des Webservers}

Damit das Web-Frontend die n"otigen Rechte zum L"oschen 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 daf"ur `visudo'. Diesen Editor gibt es aber
bei eisfair nicht. Der normale Editor tut's genauso.

Ein Beispiel f"ur eine fertige /etc/sudoers ist als /etc/sudoers.eisfax
beigelegt.

\section{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.

