• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

HOWTO: Faxen mit CAPISUITE, sofortiges Ausdrucken, Mail

CAPISUITE HOWTO
Markus Görres, 20.02.2006

CAPISUITE ist ein Werkzeug, um unter Linux einen Faxserver und einen Anrufbeantworter über die CAPI-Schnittstelle via ISDN einfach einzurichten. Im Gegensatz zum bekannten Hylafax ist CAPISUITE zwar kein Universalwerkzeug, aber für den Einsatz im Privatbereich bzw. Kleinbüro ausreichend und dafür wesentlich einfacher einzurichten.
Über die normale Funktionalität hinaus fehlten mir einige Kleinigkeiten, um CAPISUITE alltagstauglich und das altertümliche Papierfax obsolet zu machen:
1. Faxversand an mehrere, auch externe Mailadressen
2. sinnvolle Dateinamen der Faxe
3. sofortiges Ausdrucken eingehender Faxe
4. Faxen via Scanner

Die Einrichtung sowohl der Standardfunktionalität als auch einiger Besonderheiten wird weiter unten beschrieben.
Dieses HOWTO deckt sicher nicht alle Fälle ab, bietet aber eine grundlegende Hilfstellung, um damit und mit den angegebenen Literaturquellen ein funktionierendes System zu realisieren und für eigene Bedürfnisse anzupassen.

0. Installation von CAPISUITE

Grundlage ist ein Suse 9.3 für eine x64-Architektur.

Hilfreiche Artikel oder Dokumentationen sind:
a) Dokumentation von Gernot Hillier zu CapiSuite 0.4.5 unter http://www.capisuite.de
b) Artikel aus der CT 03/04, Gernot Hillier: Anrufbeantworter und Fax, Teil 5: Heimserver im Eigenbau - CapiSuite
c) Artikel aus LinuxUser 06/2004, http://www.linux-user.de/ausgabe/2004/06/064-capi/index.html
c) Artikel aus LinuxUser 06/2004, http://www.linux-user.de/ausgabe/2004/06/066-capi2/index.html

Bei passiven Karten wird teilweise von Suse als Standard ein Hisax-Treiber für die AVM-Karte geladen. In diesem Fall muss der entsprechende closed-source-driver von AVM heruntergeladen werden.
FRITZ!Card PCI CAPI Driver Version 3.11.07 05.01.2006
http://www.avm.de/de/Service/Service-Portale/Service-Portal/index.php?portal=Linux
Zu finden unter Download (fcpci-suse93-64bit-3.11-07.tar.gz).

Entpacken und die Installationsanweisungen unter install_passive-d.html lesen.
Mit root-Rechten kann das Installationsskript ./install aufgerufen werden, dass die notwendigen Treiber in das aktuelle Modulverzeichnis kopiert.
Anschliessend muss Yast gestartet werden, um die ISDN-Karte unter Netzwerkgeräte einzurichten. Wichtig ist die Wahl des CAPI2.0-Treibers (nicht Hisax) und die Eingabe der Ortskennziffer ohne führende 0.
Der nächste Schritt kann übersprungen werden, wenn keine Verbindung zum Internet über ISDN gewünscht wird.
Nun sollte die ISDN-Karte samt Treiber ordentlich geladen sein. Nach Aufruf von capiinfo sollten einige Ausgaben erscheinen.
Wichtig: nach jedem Kernel-Update muss das Installationsskript neu aufgerufen werden und die ISDN-Karte mittels Yast ausgewählt werden. Andernfalls wundert man sich über nicht empfangene Faxe.

Die Konfiguration von CapiSuite in der Konfigurationsdatei (/etc/capisuite/fax.conf) enthält einen globalen Teil und benutzerspezifische Teile.
Die benutzerspezifischen Angaben überschreiben die globalen Angaben und können bequem über Yast eingerichtet werden. Benutzer aus der Liste auswählen, Faxnummer eingeben, die StationID und die Kopfzeile (wird beim Faxversand übertragen). Bei der Aktion MailAndSave wird das Fax im Verzeichnis /var/spool/capisuite/users/<user> gespeichert und als Mail verschickt.
Hier können die Wahlwiederholungen eingestellt werden: send_tries="3" (default ist 10).

Der CapiSuite-Dämon wird in der Regel von Suse automatisch beim Systemstart aktiviert.

1. Faxverand an mehrere, auch externe Mailadressen
Falls die Faxe an eine externe Mailadresse versendet werden sollen, muss die Absendeadresse mit einer gültigen Domain versehen sein. Andernfalls ist eine Fehlermeldung des Providers vorprogrammiert und die Mail wird nicht verschickt. Dies kann sowohl in den globalen als auch in den benutzerspezifischen Teilen erfolgen.
Mehrere Mailadressen werden per Kommata getrennt. Dies funktioniert aufgrund eines Bugs nur nach einer Änderung der Skripte, was weiter unten erläutert wird.
Code:
fax_email_from="richtiger.name@web.de"
fax_action="MailAndSave"
fax_email="name@localhost,externer.name@web.de"

Die Lösung dieses Bugs ist beschrieben in http://www.capisuite.de/mantis/view.php?id=123.
Die Datei /usr/lib64/python2.4/site-packages/cs_helpers.py muss hier angepasst werden.
In der Funktion def sendMIMEMail muss folgende Änderung vorgenommen werden:
zeile:
Code:
import email.MIMEBase,email.MIMEText,email.MIMEAudio,email.Encoders,encodings.ascii,smtplib,popen2,capisuite
ersetzen mit:
Code:
import email.MIMEBase,email.MIMEText,email.MIMEAudio,email.Encoders,encodings.ascii,smtplib,popen2,capisuite,string
vor:
Code:
server.sendmail(mail_from,mail_to,msg.as_string())
diese Zeile einfügen:
Code:
mail_to = string.split (mail_to, ",")

2. sinnvolle Dateinamen der Faxe

CAPISUITE nummeriert die Faxe aufsteigend. Zur eindeutigen Erkennung und Zuordnung ist dies nur begrenzt hilfreich, die eingehende Faxnummer ist an dieser Stelle aus meiner Sicht hilfreicher.

Für diesen Zweck wurde ein weiteres Python-Skript namen faxen_machen.py geschrieben, das ein Namen ermittelt und ebenfalls eine Funktion für den Ausdruck (siehe Punkt 3) bereitstellt.
Die Funktion muss am Anfang der Datei /usr/lib/capisuite/incoming.py unmittelbar hinter den anderen Importzeilen importiert werden.
Code:
import faxen_machen

Der Name des Faxes setzt sich zusammen aus der eingehenden Nummer und Empfangsdatum und -zeit. Hierzu wird die formatierte Zeitausgabe, eine Standardfunktion von Python, verwendet. Bei Bedarf ist diese natürlich beliebig anzupassen. Näheres unter http://www.python.org.

Der Funktionsaufruf in der Datei /usr/lib/capisuite/incoming.py muss entsprechend angepasst werden:

Code:
filename=faxen_machen.name(udir+"received/",call_from,faxFormat) # neuer aufruf
		#filename=cs_helpers.uniqueName(udir+"received/","fax",faxFormat) alter aufruf
Code von /usr/lib64/python2.4/site-packages/faxen_machen.py
Code:
# hilfsroutinen fuer capisuite
# copyright markus goerres 10.02.2006
#
# printfax = fax direkt ausdrucken
#

def printfax(filename):
	import cs_helpers
	# fuer die funktion sfftotiff
	import string
	# fuer string-funktionen
	import os
	# fuer die systemfunktionen
	namen = string.split(filename,".")
	suffix = namen[1]
	dateiname = namen[0]
	if (suffix=="sff"):
		ret=cs_helpers.sfftotiff(filename,dateiname+".tif")
		command="tiff2ps -a -h11 -w8.5 "+dateiname+".tif"+" | lp"
		os.popen2(command)
		command="rm "+dateiname+".tif"
		os.popen2(command)
	else:
		raise "color fax kann nicht ausgedruckt werden!"
# ende

#
# name = rueckgabe eines eindeutigen namens aus faxnummer + datum + zeit + endung
#
def name(directory,call_from,suffix):
	import time
	faxtime = time.strftime("%Y-%m-%d_%H-%M-%S")
	if (call_from=="-"):
		faxnumber = "unknown"
	else:
		faxnumber = call_from
	faxname = directory+"fax_"+faxnumber+"_"+faxtime+"."+suffix
	return faxname

3. sofortiges Ausdrucken eingehender Faxe

Um Faxe nach dem Empfang direkt auszudrucken, muss das Python-Skript am Ende der Funktion faxIncoming in der Datei /usr/lib/capisuite/incoming.py folgende Programmzeile eingefügt werden:
Code:
faxen_machen.printfax(filename)

In dieser Funktion (siehe oben) wird aus dem Fax (Endung sff) eine Tiff-Datei erzeugt, diese in Postscript umgewandelt und an den Drucker umgeleitet. Anschliessend wird die Tiff-Datei wieder gelöscht.
Bei ausgeschaltetem Drucker verbleiben die Druckaufträge in der Warteschlange, bis der Drucker angeschaltet wird.


4. Faxen via Scanner

Wie Faxe aus KDE und ObenOffice versendet werden, kann in d) nachgelesen werden.
Um jedoch ein handelsübliches Faxgerät komplett abschaffen zu können, müssen ebenfalls Papiervorlagen verarbeitet werden können.
Hierzu kann man sich des Pakets xsane bedienen, dass unter Suse bereits vorhanden ist. Neben der normalen Scanner-Funktion bietet xsane ebenfalls die Funktionalität einer Kopie sowie einer Faxansteuerung.
In der Konfiguration Fax müssen folgende Anpassungen vorgenommen werden:
- Befehl: /usr/bin/capisuitefax eintragen.
- Option für Empfängernummer -d
- Option für Postscriptdatei bleibt leer.
- Option für Normalmodus entfernen.
- Option für Feinmodus entfernen.

Im Hauptdialog von xsane statt Betrachter einfach Fax auswählen, in dem erscheinenden Dialog ein Faxprojekt erstellen und die gewünschte Faxnummer eingeben. Nach Scannen der Vorlage die entsprechende Datei auswählen und auf Projekt senden drücken. Nach Umwandlung wird die Datei an CAPISUITE übergeben und als Fax verschickt.

Ich hoffe, dass dieser Beitrag für kleinere Anwendungen als HIlfe fungiert.
Gruss

markus_aus_do
Code:
 

Yehudi

Guru
Hallo whois.

den kannste abschließen, der ist im Wiki es fehlt jetzt von der Hylafax Sektion nur noch der:
http://www.linux-club.de/viewtopic.php?t=54889

Gruß

Yehudi
 
Hallo,

erstmal danke, das ist genau das was ich gesucht habe.
Ich benutze Suse 9.2 mit python2.3 und CapiSuite 0.4.4. Die Dateien werden korrekt umbenannt, nur leider funktioniert das automatische ausdrucken nicht.

In faxen_machen.py wird ja die cs_helpers included die für die funktion sfftotiff gebraucht wird, nur leider scheint es die funktion bei mir nicht zu geben.

Kann jemand seine cs_helpers.py posten oder hat jemand eine idee wie ich das lösen könnte?

Gruss

Mario
 
OP
M

markus_aus_do

Newbie
hallo mariohaner,

an der grundsätzlichen funktion von capisuite bzw. auch der cs_helper.py datei wurde nichts geändert.
prüfe zunächst ob die funktion sfftotiff stand-alone funktioniert.

hierzu ist es hilfreich, python über die kommandozeile zu bedienen.
Code:
python
wenn es dann möglich ist, einige funktionen bzw. kommandos händisch zu starten, ist gewährleistet, dass alle notwendigen dinge funktionieren.

ich hatte schwierigkeiten, wenn die funktionen nur teilweise geschrieben waren und bereits importiert wurden. eine zusätzlich aufgenommen funktion wurde dann nicht mehr ausgeführt.
in diesem fall hilft simples neutippen aller funktionen, abspeichern unter einem anderen namen <funktionsname.py> und anpassen des funktionsaufrufs.

p.s.
da ich aktuell auf ubuntu umsteige, ist es mir aktuell nicht möglich, die problematik selber auszutesten.

viel erfolg
markus_aus_do
 
Hallo zusammen,

also erstmal danke für das faxe_machen Skript - hat mir bei der Lösung meines Faxproblems sehr geholfen.

Allerdings hat es vermutlich einen kleinen Fehler - lasse mich aber gerne eines besseren belehren.

markus_aus_do schrieb:
CAPISUITE HOWTO
def printfax(filename):
import cs_helpers
# fuer die funktion sfftotiff
import string
# fuer string-funktionen
import os
# fuer die systemfunktionen
namen = string.split(filename,".")
suffix = namen[1]
dateiname = namen[0]
if (suffix=="sff"):
ret=cs_helpers.sfftotiff(filename,dateiname+".tif")
command="tiff2ps -a -h11 -w8.5 "+dateiname+".tif"+" | lp"
os.popen2(command)
command="rm "+dateiname+".tif"
os.popen2(command)
else:
raise "color fax kann nicht ausgedruckt werden!"

markus_aus_do

obigen Teil habe ich bei mir so angepasst das nach der Erzeugung des .tif dieses im Verzeichnis bleibt und die .sff gelöscht wird.
Somit können mehrere Rechner auf ein Samba-Share zugreifen und den Faxeingang mit einem Imageviewer anschauen und drucken (andere Lösungen waren für mich nicht praktikabel da über die betroffene Faxnummer täglich 400-500 Seiten in ca. 200 Einzelübertragungen eintreffen)

Hier erstmal mein Codeschnipsel:

Code:
# tiffax = fax nach tif wandeln und speichern
#

def tiffax(filename):
  import cs_helpers
  # fuer die funktion sfftotiff
  import string
  # fuer string-funktionen
  import os
  # fuer die systemfunktionen
  namen = string.split(filename,".")
  suffix = namen[1]
  dateiname = namen[0]
  if (suffix=="sff"):
     ret=cs_helpers.sfftotiff(filename,dateiname+".tif")
  if (os.path.isfile(dateiname+".tif")):
     command="rm "+dateiname+".sff"
     os.system(command)
# ende

wichtig war die Änderung der vorletzten Zeile von os.popen2 nach os.system - wenn rm mit popen2 aufgerufen wurde führte das dazu das jedes eingehende Fax einen child Prozess mit dem Kommando rm auslöst, dieser child Prozess endet dann als Zombie weil capisuite bei mir i.d.R. nicht gestoppt wird sondern dauernd durchläuft (in meinem Fall war dann nach einigen Tagen die Prozessliste ziemlich voll ;-) )
Ich vermute das beim "printfax" Code das gleiche Problem besteht, lasse mich als Python Nichtsblicker ;-) gerne belehren.


Grüße
Eric
 

Wastl

Member
hi
danke für die herrvorangende Howto!
Ich verwende capisuite mit SuSE 10.0 um mit deinem Script Faxe sofort auszudrucken.

Ich bin zuerst auf das selbe Problem gestossen wie mariohaner. Meine Nachforschungen ergaben dann dass es offenbar capisuite versionen gibt deren cs_helpers.py die Funktion sfftotiff defacto nicht enthölt. Ich hatte z.B. die SuSE 10.0 Version von capisuite upgegraded auf eine version die ich von der Capisuite HP downgeloaded hatte. Dieser fehlte die Funktion. Daraufhin hab ich capisuite deinstalliert und die original Version von SuSE wieder installiert und siehe da deren cs_helpers.py besitzt eine Funktion sfftotiff. Dann alles nochmal konfiguriert und eingebunden gemäss howto und siehe da es funktioniert wunderbar.

Um festzustellen ob die Funktion da ist kann man auch einfach in /usr/lib/python24/site-packages/cs_helpers.py nach sfftotiff suchen.
Oder wie oben geschrieben versuchen die funktion mal auf der commandoziele vom python aufzurufen.

lg
Wastl
 
Oben