Unter UNIX drucken
Willemers Informatik-Ecke
Unter aktuellen Linux und den meisten UNIX-Systemen wird für die Ansteuerung das System CUPS verwendet. Dennoch funktionieren die beschriebenen Verfahren in der Regel auch heute noch. Ggf. muss das eine andere Paket nachinstalliert werden.

Es gibt zwei Drucksysteme unter UNIX. Dies ist historisch durch die Aufteilung zwischen dem BSD-UNIX aus dem universitären Bereich und dem AT&T-UNIX entstanden. Welches System auf dem eigenen Rechner installiert ist, erkennt man am Aufruf. Funktionieren die Aufrufe lpr, lpq und lprm, ist es offensichtlich ein BSD-System.

BSD-Unix: lpr, lpq und lprm

Das BSD-Drucksystem ist inzwischen recht weit verbreitet, da es Netzdrucker unterstützt. Dieser Standard ist bereits in andere Betriebssysteme als UNIX übernommen worden, so dass es sich inzwischen zu einem Quasistandard für TCP/IP Drucker entwickelt hat. Dass MacOS X das BSD-System verwendet, verwundert nicht, immerhin basiert es auf FreeBSD. Aber auch Linux, das sich in vielen Dingen an System V hält, verwendet primär das BSD-System.

Start des Druckauftrages

Der Server des Druckdienstes heißt lpd. Um als Anwender Dateien in das Spoolverzeichnis des lpd zu schreiben, wird das Frontendprogramm lpr verwendet. Will man eine Datei auf den Standarddrucker ausgeben, reicht der Befehl:

lpr meinedatei

PRINTER

lpr wird die Datei an den lpd senden und ihm mitteilen, welches der Standarddrucker ist. Die Information, welcher Drucker der Standarddrucker ist, entnimmt lpr der Umgebungsvariablen PRINTER. Daraufhin wird lpd den Druckauftrag zum Spoolen einstellen und nach und nach auf dem Drucker ausgeben.

Drucken aus der Pipe

Typischer ist es jedoch, dass die Druckdatei als solche gar nicht existiert, sondern der Text vor dem Druck aufbereitet oder erst erzeugt wird. Dann wird der Druck an den lpr per Pipe übermittelt. Beispielsweise wird eine Textdatei meist vor dem Druck etwas geschönt und nach Postscript konvertiert. Standardmäßig beherrschen UNIX-Drucker Postscript.

pr -h "/etc/printcap vom 3.3.2001" /etc/printcap  | lpr

Im Beispiel wird die Druckerkonfigurationsdatei mit einer Titelzeile ausgedruckt. Das Kommando pr formatiert ASCII-Dateien vor. Das Ergebnis geht auf stdout und von dort über eine Pipe an den Drucker über lpr. Man könnte auch auf diese Weise eine aktuelle Prozessliste ausgeben:

ps -alx | pr -h "ps um 14:13" | lpr

Die Prozessliste wird mit ps erzeugt, mit pr formatiert und wandert dann zum Drucker.

Umgang mit mehreren Druckern

Häufig steht aber nicht nur einer, sondern mehrere Drucker zur Verfügung und so wird in einem Parameter für den lpr angegeben, welcher der Drucker verwendet werden soll. Angenommen es gebe noch einen Farblaserdrucker, der sinnigerweise farblaser getauft wurde. Der Aufruf lautet unter Linux oder Solaris:

a2ps meinedatei | lpr -Pfarblaser

Unter SCO heißt die Option -d statt -P. Von Fremdsystemen wie MS-Windows oder OS/2 muss noch zusätzlich der Servername mit -S angegeben werden. Der Name des Druckers wird in der Datei /etc/printcap definiert. Diese enthält auch die Information, ob der Drucker direkt an dieser Maschine angeschlossen ist oder über das Netz erreichbar ist.

Druckkontrolle

Druckstatus: lpq

Mit dem Befehl lpq kann man sich die eingestellten Druckjobs anzeigen lassen. Verwendet man einen anderen als den Standarddrucker, wird der gleiche Parameter -P wie beim lpr verwendet, um die Druckwarteschlange zu betrachten. Alle eingestellten Drucke bekommen eine Nummer. Diese Nummer ist wichtig, wenn man einen Druck wieder entfernen will.

Stornieren: lprm

Mit lprm und besagter Drucknummer kann man einen eingestellten Druck wieder aus der Warteschlange entfernen. Das funktioniert eventuell nicht mehr, wenn der Druckdämon den Auftrag bereits in der Bearbeitung hat.

AT&T: lp, lpstat und cancel

lp -d Drucker

Beispielsweise AIX und SCO verwenden von Haus aus das AT&T Drucksystem. Mit dem Kommando lp werden auf AT&T-Systemen Druckaufträge abgesetzt. Um einen anderen als den Standarddrucker anzusprechen, wird die Option -d gefolgt vom Druckernamen verwendet.

Druckkontrolle: lpstat und cancel

Der Befehl lpstat gibt eine Liste über den Status der verschiedenen Drucker aus. Beispiel:

Ausgabe von lpstat

Queue Dev   Status  Job Files        User      PP %  Blks Cp Rnk
----- ----- ------- --- ------------ --------- -- -- ---- -- ---
lp0   lp0   RUNNING 918 STDIN.14846  willemer   5 43   10  1   1
            QUEUED  919 STDIN.14593  willemer           3  1   2
            QUEUED  920 maskexpj     wagener            2  1   3
            QUEUED  921 STDIN.14596  willemer           2  1   4
            QUEUED  922 STDIN.21790  willemer           1  1   5
            QUEUED  923 lunget       wagener            3  1   6
bsh   bshde READY

cancel storniert Druckaufträge

Um einen Text aus der Warteschlange zu entfernen, wird der Befehl cancel verwendet. Es ist natürlich nur möglich, eigene Drucke wieder zu entfernen. Fremde Ausdrucke kann nur der jeweilige Besitzer oder der Systemverwalter beseitigen.

Druck formatieren: pr und a2ps

Das Programm pr formatiert Textdateien seitenweise. Dies ist vor allem als Vorbereitung für den Ausdruck der Dateien hilfreich. Bei der Ausgabe wird das Datum, der Name der Datei und eine Seitennummerierung als Kopf angegelegt. Der Befehl hat die Optionen:

Option Wirkung
-t keine Kopf und Fußzeilen
-Zahl erzeugt einen Ausdruck mit Zahl Spalten
-h text Als Kopfzeile wird text verwandt

Ein typischer Aufruf lautet:

pr -h "(C) Arnold Willemer" meintext | lpr

a2ps

Um reine Textdateien auszugeben, gibt es auf vielen Systemen das Programm a2ps. Der Name bedeutet etwa "ASCII to Postskript". Dabei wird der Text zweispaltig mit Überschrift und Seitennummer formatiert und dann auch gleich über den Standarddrucker ausgegeben.

http://www.inf.enst.fr/~demaille/a2ps

Diese Seite basiert auf Inhalten aus dem Buch Arnold Willemer: Wie werde ich UNIX-Guru?