Erfassung der gedruckten SeitenVorläufige Dokumentation (Entwurf, 2. Fassung)Im Folgenden beschreibe ich den von mir umgesetzten Mechanismus zur Erfassung der auf einem Laserdrucker gedruckten Seiten. Sie stellt in
hohem Maße eine "Bastellösung" dar, die Übertragung auf andere Systeme dürfte nicht
problemlos möglich sein. Die Lösung besteht aus folgenden Modulen:
Die Lösung arbeitet bislang nicht perfekt. Die Erfassung der gedruckten Seiten setzt voraus, das ein Druckjob tatsächlich auch erfolgreich angefangen bzw. zu Ende gebracht worden ist.
Wenn der Drucker z. B. wegen Papierstau, leerem Tonerbehälter oder ähnlichem nicht weiterdrucken kann, wird das tatsächliche Ende eines Druckjobs nicht erfasst, da ich in lplog zur Verhinderung von Endlosschleifen vorerst eine Beschränkung auf maximal 30 Sekunden (nach Ende der Datenübertragung zum Drucker) vorgesehen habe. Dadurch kann es im Einzelfall
geschehen, dass Druckjobs mit langer Bearbeitungszeit nicht erfasst werden.
Installation der Skripte1. Dateien entpackenDie Dateien können Sie als ZIP-Datei herunterladen und nach dem Entpacken manuell mit dem mv-Befehl an die jeweiligen Zielorte verschieben (siehe Tabelle oben).2. lplog installierenDas C-Programmlplog.c muss zunächst übersetzt und die
ausführbare Datei verschoben werden:
gcc lplog.c; mv a.out /usr/local/sbin/lplog
Auf die Datei /usr/local/sbin/lplog müssen dann Soft-Links gesetzt werden, so dass sowohl lplogend als auch lplogstart auf lplog verweisen: -rwxr-xr-x 1 root root 15616 May 28 18:34 /usr/local/sbin/lplog lrwxrwxrwx 1 root root 5 May 28 17:53 /usr/local/sbin/lplogend -> lplog lrwxrwxrwx 1 root root 5 May 28 17:53 /usr/local/sbin/lplogstart -> lplog 3. Gruppe pcost erzeugenDer Webserver (hier: Apache, läuft unter der Benutzerkennung www) muss
Lese- und Schreibberechtigung auf die Datenbank
mit den Kontoständen der Benutzer in /var/pcost/ sowie Leseberechtigung für die
Logdateien in /var/log/pcost/ haben, damit das CGI-Skript pcost.cgi zur Ausgabe der Kontostände
und zur Verwaltung der Einzahlungen korrekt funktioniert. Eine Möglichkeit hierzu ist, hierzu zunächst eine eigene Benutzergruppe pcost
in /etc/group hinzuzufügen und den Server unter dieser Gruppenidentität (gid)
zu starten (siehe unten). pcost:x:58:lp,www,wwwrun,root,binDie gid (hier: 58) darf natürlich noch nicht anderweitig vergeben sein. Der Benutzer lp, unter dem der Druckderdämon läuft, wird ebenfalls in die Gruppe aufgenommen, damit er Schreibzugriffe auf die Logdateien ausführen kann. 4. Verzeichnisse erzeugenDie Logdateien, die die Angaben zu Seitenzahlen und Benutzern der einzelnen Druckaufträge enthalten, sollen in dem Verzeichnis /var/log/pcost/ abgelegt werden. Dazu ist es zu erzeugen (mit einer leeren Logdatei) und mit den richtigen Rechten zu versehen:mkdir /var/log/pcost touch /var/log/pcost/pc-log chown www.pcost /var/log/pcost -R chown .pcost /var/log chmod g+rwx /var/log chmod g+rwx /var/log/pcostDanach sollte ein ls -l /var/log/pcost folgende Ausgabe ergeben: drwxrwxr-x 3 www pcost 4096 Jun 2 00:03 . drwxrwxr-x 5 root pcost 4096 Jun 1 12:16 .. -rw-rw-r-- 1 www pcost 69 Jun 2 00:03 pc-logEntsprechend ist mit der Datei für die Datenbank der Kontostände zu verfahren: mkdir /var/local touch /var/local/pcost-db chown www.pcost /var/local -R chown .pcost /var/localDanach sollte ein ls -l /var/local folgende Ausgabe ergeben: drwxrwxr-x 2 www pcost 4096 Jun 2 00:03 . drwxr-xr-x 25 root root 4096 May 28 17:42 .. -rw-rw-r-- 1 www pcost 1188 Jun 2 00:03 pcost-db 5. /etc/printcap anpassenDie Datei /etc/printcap muss bei dem betreffenden Drucker um die Einträge zu den Optionen as und ae (accounting start/end) ergänzt werden::as=|/usr/local/sbin/lplogstart:\ :ae=|/usr/local/sbin/lplogend:\Insgesamt ergibt sich bei uns beispielsweise folgender printcap-Eintrag: lp|lp3|raw|ljetplus-a4-raw|ljetplus a4 raw:\ :lp=/dev/lp0:\ :sd=/var/spool/lpd/ljetplus-a4-raw:\ :lf=/var/spool/lpd/ljetplus-a4-raw/log:\ :as=|/usr/local/sbin/lplogstart:\ :ae=|/usr/local/sbin/lplogend:\ :af=/var/spool/lpd/ljetplus-a4-raw/acct:\ :if=/var/lib/apsfilter/bin/ljetplus-a4-auto-mono-600:\ :mx#0:\ :tr=:sh:sf:rw:Der Druckerdämon muss nun neu gestartet werden: /sbin/init.d/lpd stop /sbin/init.d/lpd start 6. WebServer konfigurierenZunächst sind die Eintragungen für Benutzer und Gruppe, unter der der Server läuft, zu prüfen bzw. anzupassen: User www Group pcostDann ist ggf. der Pfad mit dem CGI-Skript pcost.cgi mit einem Alias zu versehen, damit es künftig direkt über den URL http://servername/cgi-pcost/pcost.cgi zu starten ist: Alias /cgi-pcost/ /home/www/admin/pcost/ Bei den Eintragungen zu den Verzeichnissen sind dann die Rechte für das CGI-Skriptverzeichnis anzupassen: # cgi-bin für Druckkostenabrechnung pcost <Directory /home/www/admin/pcost> AllowOverride None Options +ExecCGI -Includes Options FollowSymLinks ExecCGI AuthType Basic AuthName DruckkostenabrechnungLehrer AuthUserFile /home/www/admin/.htpasswd AuthGroupFile /dev/null <Limit GET POST> require valid-user </Limit> </Directory>Nach diesen Anpassungen ist der Webserver neu zu starten: /sbin/init.d/apache restartbzw. /sbin/init.d/apache stop /sbin/init.d/apache start 7. Cron-Job eintragenDamit wöchentlich Druckkostenabrechnungen versendet werden, muss pcost.pl wöchentlich ausgeführtwerden.Unter einem SuSe-System kann dazu ein Skript mit folgendem Inhalt in /etc/cron.weekly/ erstellt werden: #!/bin/sh # # PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin export PATH /usr/local/sbin/pcost.pl | mail printmaster@arkturAuf dem c't/ODS-Kommunikationsserver Arktur sollte es genügen, diese Datei als /usr/lib/ods-server/cron/job.WOCHE.pcostversand zu speichern. In beiden Fällen sind die Rechte mit chmod u+x /etc/cron.weekly/pcostversand bzw. chmod u+x /usr/lib/ods-server/cron/job.WOCHE.pcostversand anzupassen, damit das Skript ausgeführt werden kann. Die vorgestellte Lösung - und vor allem ihre Dokumentation - befindet sich noch im Experimentierstadium. Ich kann weder Support leisten noch ist absehbar, wann eine Verbesserung stattfinden wird. Dennoch bin ich für Hinweise auf Fehler dankbar. Bei der Lösung mit einem eigenen Print-Server ist es notwendig, dass das Skript /home/www/admin/pcost/lehrer/pcost.cgi für die Einzahlungen passwortgeschützt ist. Die hierfür erforderliche Datei /home/www/admin/.htpasswd (unter SuSe) wird bei uns durch einen per Cron-Job (auf Arktur) viertelstündlich aufgerufenes CGI-Skript (auf dem Printserver), das die verschlüsselten Passwörter der Lehrer übermittelt, erreicht. Bei Interesse kann ich die hierfür notwendigen Skripte (für Arktur und für den Printserver) auch hier veröffnetlichen. Falls Sie die vorgestellte Lösung selbst auch implementiert haben, wäre ich Ihnen für eine Nachricht per E-Mail dankbar, da das Paket noch nicht "fertig" entwickelt ist und ich mich daher über einen Austaush sehr freue. Auch könnte ich Sie dann kurzfristig über Änderungen informieren. Stand: 03.06.2001 |