Der Heimserver auf Linux- oder einer anderen Unix-/BSD-Basis eignet sich als Druckerstation. Verbreitet ist der CUPS-Server, der übrigens auch auf dem Apple Macintosh zum Einsatz kommt. CUPS loggt die Druckaufträge mit, was praktisch ist, wenn man eine Übersicht über den Verbrauch benötigt oder die gedruckten Seiten abrechnen will (für den Arbeitnehmer, in der WG, was auch immer). Das funktioniert jedoch lediglich bei Postscript-Druckern. Wie man Seitenstatistiken für PCL-Drucker erzeugen kann, zeigt folgender Artikel.

Das Beispiel funktioniert auf Debian/Ubuntu-Systemen, ist jedoch mit wenig Aufwand an andere Linux-Distributionen oder Mac angepasst.

Das Grundproblem bei PCL-Druckern in CUPS ist, dass sie in aller Regel Rohdaten erhalten und an den Foomatic-Filter weiterleiten. In der Log-Datei wird der gesamte Auftrag als eine Seite gewertet. Die kann man leicht mit den Aufruft sudo less /var/log/cups/page_log überprüfen.

Abhilfe schafft ein Filter, der die Seiten zerlegt und zählt. Ein sehr zuverlässiger Filter ist pkpgcounter, der mit Hilfe von tea4cups in CUPs eingebunden werden kann. Beide Programme sind Teil des in Python geschriebenen PyKota-Pakets.

pkpgcounter installieren

Das eigentliche Zählprogramm für PCL-Druckerdaten ist pkpgcounter. Neben PCL-Daten kann es eine Reihe von anderen Formaten analysieren und die Seitenzahl ausgeben. Daneben beherrscht es eine Analyse des Tintenverbrauchs, wenn man es noch genauer will. Details zu pkpgcounter können der Homepage des Programms entnommen werden.

Zum Installieren und Ausführen des Programms benötigt man die Skriptsprache Python. Unter Debian und Ubuntu sind die Pakete python, python-dev, python-imaging notwendig.

Man kann pkpgcounter leicht ausprobieren, indem man z.B. die Länge einer PDF-Datei analysiert:

Der Aufruf sollte die korrekte Länge des Dokuments ausgeben.

tea4cups installieren

Nun muss CUPS noch so konfiguriert werden, dass pkpgcounter auch beim Drucken aufgerufen wird. Eine relativ einfache installation ermöglicht das Python-Paket tea4cups, welches an den Unix-Befehl tea angelehnt ist.

Wer die 25 EUR für das Paket nicht aufbringen will, kann sich die aktuelle Entwicklungsversion per Subversion herunterladen (man benötigt das Paket svn):

Dann müssen die Dateien in entsprechende Verzeichnisse kopiert werden:

CUPS muss nun neu gestartet werden, um tea4cups erkennen zu können:

Damit ist nun die Grundlage für das Accounting gelegt.

Abrechnung für einen Drucker einrichten

Will man nun die Abrechnung für einen Drucker einrichten, muss man zunächst die Konfiguration von tea4cups so anpassen, dass auch tatsächlich abgerechnet wird. Die vorhin kopierte Datei /etc/cups/tea4cups.conf muss angepasst werden. Man sucht nach dem Begriff „simple accounting” in dieser Datei – eine einfache Vorlage steht nämlich schon bereit. Man muss das Kommentarzeichen am BEginn der Zeile prehook_accounting löschen. Ich habe die Zeile ein wenig abgewandelt:

Damit werden Fehler in der Debian-Umgebung (z.B. bei der Pfadangabe) verhindert. Außerdem wird zu jedem Druckauftrag das Datum mit angegeben.

Laut tea4cups-Anleitung soll das Einrichten von Druckern per CUPs funktionieren – Bei mir hat das jedoch nicht geklappt! Es ist jedoch einfach, tea4cups für bereits bestehende Drucker einzurichten. Dazu öffnet man die Datei /etc/cups/printers.conf als root und sucht sich den entsprechenden Drucker heraus. Unter dem Eintrag „DeviceURI” fügt man tea4cups: vor der URI ein. Für einen Brother-Laser-Drucker am USB-Port wäre das zum Beispiel: DeviceURI tea4cups:usb://Brother/HL-1250%20series. Ein Neustart von CUPS danach ist notwendig.

Ganz fertig ist man jedoch noch nicht: Die Seiten und die Zeit sollen ja in die Datei /var/log/printaccounting.log geschrieben werden. Es schadet nicht, diese Datei per touch /var/log/printaccounting.log anzulegen und für normale Benutzer zur Ansicht freizuschalten (z.B mit chmod 644 /var/log/printaccounting.log). Nun sollte das Accounting funktionieren. Ein Druckauftrag sieht folgendermaßen aus:

BrotherLaser 123 myuser 10 2010-03-07 16:07:03

Die erste Spalte ist der Drucker, die zweite die Nummer des Druckauftrags. In der nächsten Spalte steht der Benutzername, gefolgt von der Anzahl der gedruckten Seiten. Die beiden letzten Spalten geben Datum und Uhrzeit wieder.

Das Beispiel in der Datei /etc/cups/tea4cups.conf zeigt eine einfache Möglichkeit des Loggings. Denkbar sind hier natürlich auch andere Varianten, z.B. das Schreiben der Daten in eine Datenbanktabelle oder das Aufrufen eines Webservice per curl.

HTML-Ausgabe

Wer einen Webserver auf dem Heimserver besitzt kann mit einem einfachen PHP-Skript die Ausgabe dort anzeigen. Das folgende Beispiel sei als Anregung gedacht – viel Spaß damit.