UNIX und TCP/IP: Drucken

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. Das AT&T-System gilt als robuster, hat aber von Haus aus keine Netzwerkunterstützung mitgebracht. Aus diesem Grund hat sich das BSD-System zum Standard entwickelt, wenn es um TCP/IP-Druck geht. Beide Systeme unterscheiden sich auch in den Namen der Befehle. Hier eine kleine Übersicht:

BSDAT&TBedeutung
lpdlpsched Druckdämon
lprlpDruck absenden
lpqlpstatStatus der Druckerwarteschlange ermitteln
lprmcancelEntfernen eines Jobs aus der Druckwarteschlange

BSD-Unix: lpd, lpr, lpq und lprm

Ablauf des Druckes

Der lpd liest beim Start die Datei /etc/printcap aus. Darin findet er die definierten Drucker und deren Spoolverzeichnisse. Findet er darin eine Daten- (beginnt mit d) und eine Kontrolldatei (beginnt mit c) für einen Ausdruckswunsch, druckt er ihn aus indem er sich an die eingetragene Schnittstelle (Parameter lp) wendet. Ist dieser Eintrag leer und stattdessen ein fremder Host (Parameter rm) eingetragen, sendet er beide Dateien an den lpd des entsprechenden Rechners. Er sendet diesem auch den Druckereintrag (Parameter rp), über den dieser ausdrucken soll.

Empfängt ein lpd einen Druckauftrag über TCP/IP, sieht er in der Datei /etc/hosts.lpd nach, ob der Sender überhaupt berechtigt ist, auf diesem Rechner zu drucken. Die Datei hosts.lpd darf kein öffentliches Schreibrecht haben. Auch alle Rechner, die in der /etc/hosts.equiv stehen, haben Druckrecht. Beim Eintrag des Hostnamen ist darauf zu achten, daß der erste Name des Rechners aus der /etc/hosts verwendet wird, da er sonst nicht erkannt wird.

Ein lpd verwendet zum Senden eines Druckauftrages einen Port aus einem Bereich, den nur ein unter root laufender Prozeß erhalten kann. Dies prüft der lpd auf der Gegenseite, um sicher zu sein, daß ihm nicht irgendwer Daten unterschieben will. Paßt alles, sendet der Quellrechner, wie groß die Datei ist und die Steuerdaten. Der lpd nimmt sie entgegen. Anschließend werden die Daten übergeben. Der lpd des Zielrechners überprüft noch einmal die Länge und meldet dann sein Ok. Jetzt wird die Spooldatei des Quellrechners gelöscht. Ging irgendetwas schief, wird eine Fehlermeldung gesendet und der Zielrechner löscht alle bisher empfangenen Daten. Die Übertragung beginnt von vorn.

Befehle

Um als Anwender Dateien in das Spoolverzeichnis des lpd zu schreiben, wird das Frontend lpr verwendet. Der Aufruf lautet:

Unter Linux:

    lpr -P<printer> <Dateiname>
Unter SCO:
    lpr -d<printer> <Dateiname>
Unter Windows NT und OS/2 (PCTCP):
    lpr -S<hostname> -P<printername> <Dateiname>

Die /etc/printcap

Ein Eintrag für einen fernen Drucker hat folgendes Aussehen:
<Hiesiger Druckname>[|<Weitere Beschreibung>]:\
    :lp=:rm=<Name des Remote Hosts>:rp=<Druckname auf Remote Host>:\
    :sd=<Pfadname des lokalen Spoolverzeichnisses>:
Beispiel:
laser|300 dpi Laser|Registratur:\
    :lp=:rm=reg_pc01:rp=lp:\
    :sd=/var/spool/lpd/laser:
Der Eintrag lp, der normalerweise das Ausgabedevice bezeichnet, muß für Remote-Drucken leer sein.

ParameterBedeutung
sh Banner abschalten
sf Form-Feed abschalten

AT&T: lpsched, lp, lpstat und cancel

Befehlsübersicht

lpstat zeigt den Zustand der Warteschlangen der Drucker an
cancel [Jobnummer] [Drucker] Druckjob aus der Warteschlange entfernen
disable Drucker Drucker aus dem Drucksystem auskoppeln
enable Drucker Drucker in das Drucksystem einkoppeln

Konfiguration per lpadmin

Auch wenn es einige AT&T-Systeme gibt, die inzwischen die /etc/printcap zum Konfigurieren verwenden, ist das eigentliche Tool lpadmin.

Zunächst wird mit lpshut der Druckdämon lpsched heruntergefahren. Dann kann mit lpadmin konfiguriert werden. Anschließend wird lpsched wieder gestartet. Nur Solaris besteht darauf, daß lpsched während der Konfiguration läuft.

-pPrinter Druckername
-vDevice Schnittstelle

lpadmin -plaser -v/dev/tty01

Richtet einen Drucker namens laser auf dem Device /dev/tty01 ein.

lpstat und cancel

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

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

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.

Ist ein Drucker durcheinander geraten, erkennt man dies beim lpstat am Status DOWN. Um diesen nach Beseitigung der Störung wieder in Betrieb zu nehmen, wird das Kommando enable Drucker verwendet.

Besonderheiten verschiedener Systeme

Besonderheiten der PC-Hardware

Auf einem Einzelplatzsystem wie unter MS-DOS wartet das Programm normalerweise auf den erfolgten Druck in einer Endlosschleife. Dies nennt man Polling. Die Alternative dazu ist die Interruptsteuerung. Dazu wird der Prozeß, der den Druck steuert in eine Warteschlange gesetzt. Die CPU wendet sich neuen Aufgaben zu. Sobald der Drucker fertig ist, unterbricht er die CPU (Interrupt) in ihrer derzeitigen Beschäftigung. Diese holt den wartenden Prozeß wieder aus der Warteschlange und setzt ihn fort.

Während Polling die CPU mit ständigem Beobachten belastet, findet beim Interrupt nur dann eine Aktion statt, wenn der Ablauf das erfordert. Unter Einzelplatzsystemen ist der Unterschied nicht signifikant. Unter Multitasking-Systemen, insbesondere bei mehreren Druckern sollte unbedingt eine interruptgetriebene Ansteuerung verwendet werden.

Ein normaler PC ist mit einer parallelen Schnittstelle für einen Drucker ausgestattet. Nach MS-DOS Tradition wird sie LPT1 genannt. Ihr ist der Interrupt 7 zugeordnet.

Ein zweiter Parallelanschluß (LPT2) ist mit dem Interrupt 5 vorgesehen. Aufgrund der Interrupt-Knappheit in einem PC wird dieser Interrupt allerdings gern für andere Peripherie verwendet, da nur wenige PCs wirklich zwei Druckerschnittstellen besitzen.

Ein dritter Anschluß (LPT3) ist zwar ansteuerbar, hat aber keinen Interrupt zugeordnet.

Besonderheiten von LINUX

Unter Linux kann durch den Befehl tunelp der Druckerinterrupt eingeschaltet und zugeordnet werden. Standardmäßig arbeitet LINUX mit Polling.

tunelp /dev/lp1 -i7
tunelp /dev/lp2 -i5

Hier wird Schnittstelle LPT1 auf den Interrupt 7 und LPT2 auf den Interrupt 5 gesetzt.

Besonderheiten des SCO

SCO hat standardmäßig das lpd-Protokoll nicht installiert. Um mit einem System auf lpd-Basis arbeiten zu können, muß zunächst das Remote-Line-Printing (rlp) installiert werden. Dies geschieht über den Befehl
    mkdev rlp

Besonderheiten von Windows

Windows 95/98 kennen den TCP/IP-Druckdienst von Haus aus nicht.

Unter Windows NT kann als lpd-Server auftreten. Unter Systemkonfiguration-Netzwerk kann als zusätzlicher Dienst der "Microsoft TCP/IP Druckdienst" hinzugefügt werden.

Um einen lpr-Client einzurichten, wird ein lokaler Arbeitsplatzdrucker installiert. Wenn der Assistent nach dem Port fragt, kann man einen neuen Port anfordern. Dort findet sich in der Liste auch der LPR-Port. Gibt man diesen an, fragt Windows nach dem Server und dem dortigen Namen des Druckers. Die Eingaben werden sofort überprüft. Daneben verfügt Windows NT auch über die Befehle lpr und lpq auf der Konsole (MS-DOS Eingabeaufforderung).

Besonderheiten des PCTCP unter OS/2

Der lpd wird nicht vom PCTCP automatisch gestartet. Er muß von Hand gestartet werden.
minstart lpd
Ein detach hat zu erheblichen Performance-Einbrüchen geführt. Weitere Verbesserungen der Performance erreicht man, wenn in der Datei \pctcp\etc\pctcp.ini bei Angabe der Schnittstelle der Zusatz /redirected angehängt wird. So werden die Daten block- und nicht buchstabenweise verarbeitet. Beispiel:
[Epson]
   device = LPT1/redirected

Homepage (C) Copyright 1999 Arnold Willemer