LPD mit gimp-print

Aus UUGRN
Version vom 20. Februar 2007, 22:47 Uhr von Mile (Diskussion | Beiträge) (→‎gimp-print/gutenprint)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)

Drucken mit LPD ist erheblich leichter als es viele befürchten. Der klassische LPD und seine Derivate sind sehr einfach gehalten, denn sie sind nur Spooler für die Drucker. Sie wissen nichts von irgendwelchen erwarteten Druckerformaten wie PCL oder Postscript. Aber sie bieten eine äußerst einfache Möglichkeiten verschiedene Treiber einzubinden. Wie das geht, soll im Folgenden geklärt werden.

Das folgende Beispiel wurde auf einem FreeBSD-System erstellt, auf dem der systemeigene LPD verwendet wurde. Es gibt vom klassischen BSD-LPD verschiedene Implementationen, die sich in Details unterscheiden können, im Wesentlichen aber für das hiesige Beispiel keine Rolle spielen sollten.

/etc/printcap

Diese Datei ist für den LPD die zentrale Steuerdatei. Sie regelt, welche Drucker vorhanden sind, wer sie von wann bis wann benutzen darf und viele weitere interessante Kleinigkeiten. Für jeden Drucker wird ein Record angelegt, der wie das folgende Beispiel aussehen kann:

lp|ps:\
        :sh:\
        :if=/usr/local/libexec/lpr-if:\
        :pw#80:pl#72:mx#0:\
        :lp=/dev/lpt0:sd=/var/spool/lpd/lp:lf=/var/log/lpd-errs:

Die entscheidende Stelle ist hier der Eintrag: if=/usr/local/libexec/lpr-if. Dieser erzeugt einen Inputfilter. Durch diesen Filter wird der eingehende Datenstrom gejagt und erst dessen Output weiterverwertet.

/usr/local/libexec/lpr-if

Das eigentliche Filterskript nimmt den Datenstrom von STDIN an, verarbeitet die Daten und schreibt nach STDOUT. Zusammen mit Ghostscript kann damit jeder Drucker angesteuert werden, für den Ghostscript eingebaute Unterstützung hat.

gimp-print/gutenprint

Ghostscript kann über den hpijs-Treiber nahezu alle gängigen Tintenstrahldrucker ansteuern. Der ijs-Treiber lagert dabei den eigentlichen Druckersupport an gimp-print oder gutenprint aus. Als Beispiel sei mal ein Epson Stylus C84 angenommen. Für den sähe ein einfacher Filter beispielsweise so aus.

#!/bin/sh
# Input filter for postscript files.

/usr/local/bin/gs -dSAFER -dNOPAUSE -q -sDEVICE=ijs \
   -sIjsServer=/usr/local/bin/ijsgimpprint \
   -sDeviceManufacturer=EPSON -sDeviceModel=escp2-c84 \
   -sPAPERSIZE=a4 -dIjsUseOutputFD \
   -sIjsParams='Density=0.8' \
   -sOutputFile=- - \
&& exit 0

Damit hat man einen Filter, der Postscript-Input in druckerverständlichen Output übersetzt. Alles weitere regelt obiger printcap-Eintrag.