Druckeradministration unter UNIX

Willemers Informatik-Ecke

Traditionell wurden Drucker fast ausschließlich über eine serielle Schnittstelle an UNIX-Maschinen angeschlossen. Das hatte mehrere Vorteile. Serielle Leitungen können problemlos 30m lang sein. Damit brauchte der Drucker nicht direkt im EDV-Raum zu stehen. Man konnte den Drucker mit den gleichen Leitungen versorgen, die man bereits für Terminals verwandte. Die parallelen Anschlüsse waren ursprünglich nur im PC-Umfeld üblich und werden darum in erster Linie von den PC-UNIX-Versionen unterstützt. Allerdings findet man parallele Anschlüsse auch an UNIX Workstations. Parallele Leitungen sind in ihrer Länge sehr begrenzt, so dass der Drucker dann fast direkt neben dem Computer stehen muss. Inzwischen werden Drucker meistens über eine Netzverbindung angehängt. Netzkabel sind inzwischen eher billiger als serielle Leitungen.

Druckbeschreibungssprache Postskript

Neben den reinen Buchstaben wünscht man heute auch Formate, Schriften und Grafiken. Dazu braucht man eine Kommandosprache oder Sonderzeichen, die den Drucker anweisen, die Gestaltung vorzunehmen. Unter UNIX ist in diesem Bereich Postskript Standard. Postskriptdrucker sind etwas teurer, dafür aber leicht austauschbar. Dazu kommt, dass man mit der gleichen Datei einen kleinen Laserdrucker und eine Druckmaschine ansteuern kann.

PC-Drucker

Im PC-Bereich wird scharf kalkuliert und da Postskript einerseits Lizenzen kostet und vom Drucker einiges an Speicherausstattung und Rechenleistung erfordert, gibt es derartiges dort selten zu finden. Noch schlimmer ist, dass jeder Druckerhersteller seine eigenen Steuerzeichen verwendet und selbst Geräte gleicher Hersteller nicht unbedingt gleich anzusteuern sind. Unter Linux wird darum die freie Software Ghostskript verwendet, die Postskriptdateien auf beinahe jeden Drucker übersetzen kann.

Vorsicht bei GDI- oder W-Druckern

Bei den PC-Druckern gibt es seit einigen Jahren Drucker, die auf MS-Win­dows festgelegt sind. Bei diesen so genannten GDI- oder Windowsdruckern wird die Logik ins MS-Windows verlegt. Das Gerät wird dadurch ein wenig günstiger. Es ist natürlich fast unmöglich, ein solches Gerät unter einem UNIX zu betreiben. Diese peinliche Kastration tarnen viele Hersteller und deuten sie manchmal nur mit einem W im Druckertyp an. Wenn Sie Linux benutzen und auf einen derartigen Drucker bereits hereingefallen sind, lohnt es sich, einmal die Homepage des Herstellers nachzusehen. Einige bieten Treiber an, mit denen dann Linux das MS-Windows-Umfeld emuliert. Dass das letztlich nicht optimal sein kann, ist offenkundig.

Übersicht

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:

BSD AT&T Funktion
lpd lpsched Druckdämon
lpr lp Druck absenden
lpq lpstat Status der Druckerwarteschlange ermitteln
lprm cancel Entfernen eines Jobs aus der Druckwarteschlange

BSD-Unix: lpd, lpr, lpq und lprm

Die /etc/printcap

Jeder Drucker eine Zeile

Die /etc/printcap ist die Konfigurationsdatei für die Drucker im BSD System. Hier werden alle von der Maschine erreichbaren Drucker definiert, ihre Warteschlangen und eventuelle Filter. Jeder Drucker wird in einer Zeile beschrieben. Da die Zeilen aber furchtbar lang würden, verwendet man den Backslash am Ende der Zeile. Dieser verlagert das Ende der Zeile auf die nächste Zeile. Die Beschreibung eines Druckers beginnt mit dessen Namen. Ein Drucker kann mehrere Namen haben, die man durch einen senkrechten Strich trennt. Diesen Mechanismus benutzt man auch gern für kurze Druckerbeschreibungen. Üblicherweise nennt man den Standarddrucker des Systems lp.

Minimalausstattung

Durch Doppelpunkte werden Attribute des Druckers abgetrennt. Die wichtigsten Einträge sind das Drucker Device (lp), das Spoolverzeichnis (sd) und die Protokolldatei (lf). Beipielsweise ist der Standarddrucker auf meinem Linuxsystem folgendermaßen definiert.

lp|lp2|cljet5-a4-auto-color-300|cljet5 a4 auto color 300:\
        :lp=/dev/lp0:\
        :sd=/var/spool/lpd/cljet5-a4-auto-color-300:\
        :lf=/var/spool/lpd/cljet5-a4-auto-color-300/log:\
        :if=/var/lib/apsfilter/bin/cljet5-a4-auto-color-300:\
        :mx#0:sh:sf:

Der Hauptdruckername ist lp. Er druckt auf die erste parallele Schnittstelle des Computers /dev/lp0. Das Spooldirectory befindet sich unterhalb des Verzeichnisses /var/spool/lpd und wird nach dem Drucker benannt. Darin befindet sich auch die Protokolldatei mit dem Namen log. Der Eintrag hinter if bezeichnet den Druckerfilter, der in diesem Fall durch einen apsfilter-Skript realisiert wird. Der apsfilter sorgt für die Übersetzung der Postskriptinformationen in die druckereigene Steuerungssprache. Hinter den apsfiltern verbirgt sich letztlich Ghostscript.

Parameter Bedeutung
mx#0 maximale Größe des Drucks in Blöcken, 0 heißt unbegrenzt.
sh Banner abschalten
sf Form-Feed abschalten

Netzdrucker eintragen

Ein Eintrag für einen fernen Drucker unterscheidet sich von einem lokalen Drucker in erster Linie dadurch, dass das Druckdevice (lp) leer gelassen wird und der Zielhost (rm) und der Druckername auf dem fernen System (rp) angegeben wird. Ein lokales Spoolverzeichnis ist dennoch notwendig, da der Druckinhalt zwischengespeichert werden muss, solange der lpd auf der fernen Maschine noch keinen Vollzug meldet. Beispiel:

laser|300 dpi Laser|Registratur:\
    :lp=:rm=reg_pc01:rp=lp:\
    :sd=/var/spool/lpd/laser:

Der fremde Rechner heißt reg_pc01 und der Druckername auf jenem Rechner ist lp.

Änderungen in der /etc/printcap liest der Druckdämon lpd beim Start. Der Versuch, den lpd zum Neueinlesen zu bewegen, indem man ihm per kill ein SIGHUP schickt, führt zum spontanen Tod des lpd. Das ist aber normalerweise nicht weiter tragisch, da man ihn einfach neu starten kann. Allerdings ist es durchaus klug, mit dem Abschuss zu warten, bis der lpd gerade keinen Druckauftrag bearbeitet.

Arbeitsablauf des Druckdämons

Lesen der /etc/printcap

Der lpd liest beim Start die Datei /etc/printcap. Darin findet er die definierten Drucker und deren Spoolverzeichnisse. Liegt in einem der Spoolverzeichnisse eine Daten- (beginnt mit d) und eine Kontrolldatei (beginnt mit c) für einen Ausdruckswunsch, geht lpd davon aus, dass dieser Auftrag nicht vollständig ausgedruckt wurde. Ansonsten hätte der vorher laufende lpd ihn ja schließlich gelöscht. Entsprechend stößt er den Druck nun noch einmal an.

Es nutzt also gar nichts, einen nicht gewünschten Druck dadurch zu beenden, dass man den entsprechenden Druckdämon abschießt oder in wilder Panik die Maschine herunterfährt. Im Gegenteil wird der Druck wieder ganz von vorn begonnen. Um einen Druck auf brutale Weise abzuwürgen, muss nach dem Abschuss des lpd also auch das Spoolverzeichnis geräumt werden. Mit Hilfe des Befehls fuser kann man sogar ermitteln welcher lpd den Druckauftrag bearbeitet und so einen Druck abschießen, ohne die anderen Druckaufträge zu belästigen.

Zusammenspiel der lpr und des lpd

Wie man den lpr benutzt, um eine Datei zu drucken, wurde im Kapitel Anwendung bereits beschrieben. Nun soll hinter die Kulissen geblickt werden. Das Programm lpr schreibt einen Druckauftrag in das Spoolverzeichnis des gewünschten Druckers in eine Datendatei. Danach erzeugt es die Kontrolldatei. Der lpd prüft regelmäßig die Spoolverzeichnisse. Findet er einen Auftrag mit Daten- und Kontrolldatei, 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 jener ausdrucken soll. Schließlich muss der lpd auf dem Zielrechner ja wissen, auf welchem seiner Drucker er ausdrucken soll.

Drucken über das Netz

Protokoll des lpd über das Netz

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 Prozess erhalten kann. Dies prüft der lpd auf der Gegenseite, um sicher zu sein, dass ihm nicht irgendwer Daten unterschieben will. Passt 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.

Kleine Printserver simulieren lpd nur

Wenn man den Ablauf dieses Prozesses kennt, wird klar, dass die zigarettenschachtelgroßen Netzgeräte, die einen gewöhnlichen Drucker zum TCP/IP-Drucker aufwerten sollen, schwerlich das Protokoll einhalten können. An sich müssten sie die gesamten Daten zwischenspreichern, bis sie sicher sind, dass die Übertragung geklappt hat. Da sie keine Festplatte besitzen, müssen sie den Kompromiss eingehen, dass sie vorab von einer korrekten Übertragung ausgehen und bereits ausdrucken, bevor die Daten komplett und bestätigt übertragen wurden.

Druckjobs administrieren

lpq

Die Druckjobverwaltung erfolgt über die Befehle lpq und lprm. lpq liefert für den angegebenen Drucker Informationen über alle anstehenden Druckjobs.

gaston# lpq
lp is ready and printing
Rank   Owner      Job  Files                     Total Size
active arnold     97   unix.ps                   4591488 bytes

Diese Meldung besagt, dass auf dem Drucker lp ein Job mit der Nummer 97 aktiv ist, den der Benutzer arnold gestartet hat. Die in Auftrag gegebene Datei heißt unix.ps und ist etwa 4,5MB groß.

lprm

Mit dem Befehl lprm 97 kann der oben einstehende Druckjob wieder entfernt werden. Die Ausgabe des Befehls sieht etwa so aus:

gaston# lprm 97
dfA097gaston dequeued
cfA097gaston dequeued

Hier wird deutlich, dass ein Druck aus zwei Dateien besteht. Dies ist einmal die Steuerdatei, deren Name mit cf (control file) und die Datendatei, deren Name mit df (data file) beginnt. Beide Dateien befinden sich im Spoolverzeichnis.

lpc

Um einen Drucker oder seine Warteschlange aus dem System zu entfernen, verwendet man den Befehl lpc. Dieser Befehl hat mehrere Kommandos als Parameter. Der wichtigste Parameter des Befehls ist der Name des Druckers.

Befehl Wirkung
lpc disable lp sperre die Warteschlange für lp
lpc enable lp gebe die Warteschlange für lp frei
lpc stop lp stoppe Drucke aus der Warteschlange für lp
lpc start lp lasse Drucke aus der Warteschlange für lp wieder zu
lpc down lp stoppe Drucke und Warteschlange für lp
lpc up lp starte Drucke und Warteschlange für lp wieder
lpc status lp Informationen über den Zustand der Sperrungen

Mit dem lpc können auch anstehende Druckaufträge in ihrer Reihenfolge verändert werden. Dazu wird das Kommando topq, der Drucker und die Jobnummer angegeben, die an die erste Stelle gesetzt werden soll.

gaston# lpc topq lp 97

Linux-PC als Druckserver

Ein PostScript-Drucker mit Netzschnittstelle ist nicht billig. Da ist es ein naheliegender Gedanke, einen ausgedienten PC mit den preiswerten PC-Druckern auszustatten und ins Netz zu hängen. Gegenüber einem netzwerkfähigem TCP/IP-Drucker hat diese Lösung den Vorteil, dass der Linux-PC das lpd-Protokoll korrekt einhält. Die PostScriptfähigkeit wird durch ghostscript realisiert und als Zugabe kann man die Drucker sogar in Samba einbinden und dadurch von den Arbeitsplätzen unter MS-Windows mitverwenden.

Filter und Postscript

Unter UNIX ist PostScript der Standard für Drucker. Das ist sehr praktisch, da die meisten Anwendungsprogramme kein Problem damit haben, eine PostScriptausgabe zu erzeugen. Das Programm Ghostscript ist ein Übersetzer von Postskript auf die verschiedensten Ausgabemedien. Dazu zählen neben dem Bildschirm auch alle gängigen Drucker.

apsfilter

Die PostScriptwandlung erfolgt durch einen Filter, der mit dem Eintrag if in die /etc/printcap eingetragen wird. Bei der Linux-Distribution von S.u.S.E. erscheint dort nach einer Druckerinstallation ein apsfilter. Dahinter verbirgt sich ein Programm, das den Programmnamen in einen Aufruf von ghostscript umsetzt. ghostscript setzt nun den Input in PostScript auf diverse propitiäre Formate um.

Eigenen Skript in if eintragen

Einen Interface-Skript wie den apsfilter kann man unter anderen Linuxsystemen leicht selbst schreiben, indem man eine Datei mit folgender Zeile erzeugt:
1)

/usr/bin/gs -q -dNOPAUSE -dSAFER -sDEVICE=clj5 -sOutputFile=-

Der Name des Skripts (beispielsweise /usr/local/cljf) wird dann unter :if=/usr/local/cljf: in die /etc/printcap eingetragen. Der unter if eingetragene Filter erhält die Eingabedaten über stdin und muss die Ausgabedaten nach stdout wieder abliefern. Das ist der Grund für den Bindestrich hinter -sOutputFile=.

Druckerdevices unter Linux

Druckeranschlüsse

Der Anschluss der Schnittstellen befindet sich als special files im Verzeichnis /dev, wie dies unter UNIX üblich ist. Bei PCs sind die Druckeranschlüsse parallele Schnittstellen. Davon kann jeder PC drei Stück haben, wobei der dritte keinen Interrupt besitzt und per Polling abgefragt werden muss. Dazu kommen die USB-Anschlüsse und die maximal vier
2) seriellen Schnittstellen, von denen wiederum zwei mit eigenen Interrupts belegbar sind. Insgesamt kann man einen solchen Rechner also recht ordentlich bestücken.

Device Anschluss Interrupt
/dev/lp0 parallele Schnittstelle (LPT1) 7
/dev/lp1 parallele Schnittstelle (LPT2) 5
/dev/ttyS0 serielle Schnittstelle (COM1) 3
/dev/ttyS1 serielle Schnittstelle (COM2) 4
/dev/usblp0 per USB angeschlossener Drucker

Druckerinterrupt auf Linuxsystemen

Polling contra Interrupt

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 direkt nach Ablieferung eines Druckzeichens 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. Bei Einzelplatzsystemen ist der Unterschied nicht signifikant. Unter Multitasking-Systemen, insbesondere bei mehreren Druckern, sollte eine interruptgetriebene Ansteuerung verwendet werden.

Ein PC hat zwei Interrupts für das Drucken

Beim Design des PCs sind von vornherein Interrupts für den Drucker vorgesehen gewesen. Für die erste parallele Schnittstelle ist der Interrupt 7 reserviert. 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.

Unter Linux kann durch den Befehl tunelp der Druckerinterrupt eingeschaltet und zugeordnet werden. Standardmäßig arbeitet LINUX mit Polling. Interessanterweise erreicht Linux auch so eine ganz anständige Leistung aus dem Drucker. Wenn aber Leistungseinbrüche beim Druck oder hohe Belastungen des Systems durch den Druck feststellbar sind, sollte man die Interrupts aktivieren.

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

Hier wird Schnittstelle LPT1 auf den Interrupt 7 und LPT2 auf den Interrupt 5 gesetzt. Seit der Kernelversion 2.1.131 (Die Kernelversion meldet der Befehl uname -r) wird die Steuerung der parallelen Schnittstellen durch das parport-System übernommen. In der Konfigurationsdatei /etc/modules.conf erreicht der folgende Eintrag, dass die Druckerschnittstellen 1 und 2 per Interrupt betrieben werden.

alias parport_lowlevel parport_pc
options parport_pc io=0x378,0x278 irq=7,5 

System V: lpsched, lp, lpstat und cancel

Das Drucksystem von System V ist bei den neueren Systemen von Solaris, bei HP-UX, AIX, SCO und anderen Systemen das Standardverfahren zum Drucken. Es bietet einige sehr interessante Eigenschaften. Allerdings hat man leider kein netzweites Drucken vorgesehen. Das führt zu Erweiterungen wie bei HP. Dort ist es möglich, einen Netzdrucker nach BSD-Standard anzusteuern. Andere Systeme, wie SCO, erlauben es, stattdessen das BSD-System zu installieren.

Der Druckdämon lpsched

lpsched und lpshut

Der Druckdämon des System V Drucksystems heißt lpsched und wird durch die rc-Dateien bei Systemstart hochgefahren. Der Dämon verhindert einen versehentlichen Doppelstart durch Anlegen einer Sperrdatei namens SCHEDLOCK, die im Verzeichnis /var/spool/lp liegt. Normalerweise wird der Dämon durch den Aufruf von lpshut wieder gestoppt. Sollten Sie in die Verlegenheit kommen, den Server auf andere Weise zu beenden, müssen Sie vor einem Neustart die Sperrdatei von Hand löschen.

Konfiguration per lpadmin

Druckdämon lpsched

Das Administrationstool von System V Druckersystemen heißt lpadmin. Auf HP-UX-Systemen wird vor Verwendung von lpadmin der Dämon mit lpshut heruntergefahren. Bei Solaris dagegen muss der Dämon lpsched laufen, damit lpadmin funktioniert.

Mit dem Tool lpadmin werden in erster Linie Drucker eingerichtet. Das folgende Beispiel richtet einen Drucker namens laser ein, der auf der Gerätedatei /dev/lp erreichbar ist. Es handelt sich um einen Farblaserdrucker vom Modell colorlaserjet.

lpadmin -plaser -v/dev/lp -mcolorlaserjet

Druckermodell

Bei Einrichten eines neuen Druckers muss mindestens der Druckname, also die Option -p, die Gerätedatei (-v) und der Druckertyp angegeben werden. Der Druckertyp wird im oberen Beispiel mit dem Modell (-m) bestimmt. Welche Modelle ein System kennt, findet sich in dem Verzeichnis /var/spool/lp/model. Am portabelsten ist natürlich das Modell postscript. Alternativ kann mit -i ein Skript angegeben werden, der die Umformatierung vornimmt. Dabei ist es im Gegensatz zum if-Paramter in der printcap des BSD-Systems kein Filterprogramm. Es wird vom lpsched aufgerufen und erhält die auszugebenden Dateinamen als Parameter. Die Argumente sind im einzelnen:
3)

AuftragsID Benutzer Titel Kopien Optionen Datei(en)

Die formatierten Inhalte gibt der aufgerufene Skript über die Standardausgabe aus.

Mit der Option -e kann der Druckertyp auf einen bereits existierenden Drucker bezogen werden.

Druckerklasse

Eine Besonderheit des System V Druckdienstes sind die Druckerklassen. Damit können mehrere Drucker gleichzeitig als Ziel eines Ausdrucks benannt werden. lpsched wird denjenigen Drucker aus der Klasse wählen, der derzeit frei ist. Durch die Option -c wird beim lpadmin angegeben, dass der bezeichnete Drucker einer bestimmten Klasse zugeordnet wird. Um beim Drucken eine Klasse statt einem Druckziel anzugeben, wird dem Befehl lp die Klasse hinter den Parameter -c angegeben.

Festlegen des Standarddruckers

Mit dem Befehl lpadmin kann auch festgelegt werden, welcher der definierten Drucker der Standarddrucker des Systems sein soll. Dazu wird lpadmin mit der Option -d und dem Namen des Druckers aufgerufen.

Löschen und Ändern

Das Löschen eines Druckers erfolgt mit der Option -x des lpadmin. Ist der Drucker der letzte seiner Klasse, wird auch die Klasse gelöscht. Soll ein Drucker nur geändert werden, wird der Drucker aufgerufen, als würde er neu angelegt. Es müssen aber nur die Optionen angegeben werden, die sich ändern sollen.

Die Optionen von lpadmin im Überblick:

-pDruckername
Dies ist der Name unter dem der Drucker den Druckbefehlen bekannt sein soll.
-vGerätedatei
Das ist das Device, an dem der Drucker hängt. Es ist aber nicht zwingend, dass es sich um ein Gerät handelt. Es ist durchaus möglich, mit Hilfe des Drucksystems Ausgaben in eine Datei zu Machen, bei denen das System dafür sorgt, dass sie nacheinander geschrieben werden.
-eDruckername
Das Druckermodell des unter -p angegebenen Druckers ist die gleiche wie die des bereits existierenden Druckers, der hier mit -e benannt wird.
-mModell
Der Druckertyp entspricht dem eines dem System bereits bekannten Modells. Die jeweils bekannten Modelle finden sich im Verzeichnis /var/spool/lp/model.
-iSkript
Die Anpassung an den Druckertyp erfolgt durch den angegebenen Skript.
-xDruckername
Der Drucker wird aus der Liste der verfügbaren Drucker gelöscht.
-dDruckername
Richte den Drucker als Standarddrucker ein.
-cKlasse
Ordne den Drucker der genannten Klasse zu.
-rKlasse
Entnehme den Drucker der genannten Klasse. Ist damit die Klasse leer, entferne die Klasse.

lpadmin erzeugt und verändert Textdateien, die unter dem Verzeichnis /var/spool/lp stehen. Es empfielt sich nicht, diese Dateien mit einem Editor zu bearbeiten.

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 Druck aus der Warteschlange zu entfernen, wird der Befehl cancel verwendet. Als Argument wird die Jobnummer verwendet. Jeder Anwender darf nur eigene Drucke entfernen, root darf jeden beliebigen Druckjobs entfernen. 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 mit der Druckerbezeichnung als Argument verwendet. Soll ein Drucker dagegen gesperrt werden, wird der Befehl disable mit dem Druckernamen als Parameter verwendet.

Befehlsübersicht

Die nachfolgende Tabelle zeigt die Druckbefehle des System V noch einmal in der Übersicht.

Befehl Wirkung
lpsched Druckdämon
lpshut Herunterfahren des Dämons
lpstat zeigt den Zustand der Warteschlangen der Drucker an
cancel [Jobnr] [Drucker] Druckjob aus Warteschlange entfernen
disable Drucker Drucker aus dem Drucksystem auskoppeln
enable Drucker Drucker in das Drucksystem einkoppeln

Installation des BSD-Drucksystems unter SCO

SCO hat standardmäßig das System V Druckprotokoll installiert. Um mit einem System auf lpd-Basis arbeiten zu können, muss zunächst das BSD System über das bisherige hinweg installiert werden. SCO bezeichnet das BSD-lpd System als Remote-Line-Printing (rlp). Die Installation geschieht über den Befehl

mkdev rlp

Zugriff auf einen BSD-Netzdrucker unter HP-UX

HP-UX nach BSD

HP-UX hat den Druckserver dahingehend erweitert, dass man mit dem Befehl lpadmin auch Netzdrucker erreichen kann. Als Netzprotokoll wird das des BSD lpd verwendet. HP-UX sendet den Druckauftrag an einen lpd-Server, wenn Sie beim beim Befehl lpadmin hinter der Option -m das Wort >>rmodel<< steht. Dann kann mit Hilfe weiterer Optionen bestimmt werden, an welchen Drucker übermittelt wird. Die benötigten Parameter lauten:

-m
muss auf rmodel stehen.
-ormHostname
für den Zielrechner.
-orpPrinter
der Druckername auf dem Zielsystem.
-ob3
verwendet dreistellige Anfragenummern, die für BSD-Zugriffe gebraucht werden.

Zum Einrichten des Druckers lp vom Rechner gaston als Drucker linux auf HP-UX wird folgende Befehlsfolge gegeben.

hp# lpshut
scheduler stopped
hp# lpadmin -plinux -v/dev/null -mrmodel -ormgaston -orplp -ob3
hp# accept linux
destination "linux" now accepting requests
hp# enable linux
printer "linux" now enabled
hp# lpsched
scheduler is running
hp# lp -d linux /etc/hosts
request id is linux-0 (1 file)
hp#

Der letzte Befehl ist lediglich der Test, ob der Druck funktioniert.

LPRng

Die Existenz zweier Drucksysteme ist natürlich wenig befriedigend und es ist eigentlich ein naheliegender Gedanke, beide zusammen zu führen und sowohl die Kommandos des einen als auch des anderen Systems zuzulassen. LPRng ist eine solche Neuentwicklung, die versucht, das Beste des BSD und des System V Drucksystem zu einem System zusammenzufassen und an einigen Stellen zu modernisieren.

LPRng ist kompatibel

LPRng ist eine Neuimplementation des BSD Drucksystem und hält sich vollständig an die Schnittstellen der RFC1179 und erbt damit dessen Netzwerkfähigkeit. LPRng verwendet wie das BSD System die Aufruf lpr, lprm und auch die anderen Kommandos des BSD-Systems. Auch die /etc/printcap kann direkt weiterverwendet werden. Hinzu kommen die Befehle des System V, die als Links ausgeprägt sind, so dass beide Arten, den Druckprozess anzusprechen, funktionieren. Darüber hinaus beherrscht LPRng auch die dynamische Druckzuteilung, also das, was unter System V Druckerklassen sind. Über beides hinaus geht die wesentlich bessere Fehlerinformation des Aufrufers.

Konfiguration

Neben der Datei /etc/printcap gibt es die Datei lpd.conf und die Datei für die Festlegung der Berechtigungen namens lpd.perms. Jeder Benutzer kann sich eine eigene Datei .printcap definieren, die er in seinem Heimatverzeichnis abstellt. Diese Datei wird vom System bei der Interpretation der systemweiten /etc/printcap quasi vorangestellt. Dadurch kann jeder Benutzer festlegen, welcher Drucker sein Standarddrucker ist und natürlich eigene Drucker hinzufügen. Die Datei lpd.conf kann normalerweise so bleiben, wie sie als Standard ausgeliefert wird. Auch die lpd.perms kann so bleiben wie sie ist, wenn man nicht besondere Benutzer zulassen oder aussperren will. Zu beiden gibt es eine eigene Manpage.

checkpc prüft die Installation

Zu LPRng gehört das Programm checkpc, das die Installationsdateien prüft. Sie sollten das Programm nach Änderungen in den Konfigurationsdateien aufrufen, um sicher zu gehen, dass die Konfiguration stimmt. Das Programm wird bei einigen Linuxdistributionen in die rc-Datei gestellt. Leider blockiert dieses Programm unter unglücklichen Umständen und verhindert in diesem Fall den Systemstart. Aus diesem Grund sollten Sie den Aufruf auskommentieren. Man findet ihn durch Aufruf von grep checkpc im Verzeichnis, in dem die rc-Skripten stehen.

CUPS - Common UNIX Printing System

Das Common UNIX Printing System (CUPS) ist ein Paket der Firma Easy Software Products, das verschiedene Designprobleme der alten Drucksysteme beseitigen will. Es ist auf den wichtigsten UNIX-Systemen bereits verfügbar und wurde unter die GNU-Lizenz gestellt, ist also freie Software.

Nach dem Installieren des Paketes kann man normalerweise bereits den Server von CUPS starten. Er heißt cupsd und befindet sich im Verzeichnis /usr/sbin.

CUPS unterstützt sowohl die BSD-Kommandos als auch die von System V. Die Druckerklassen von System V kennt CUPS genauso wie die Fähigkeit des Netzbetriebs von BSD.

Drucker hinzufügen

Port 631

Die Administration des CUPS kann weitgehend über den Browser erfolgen. Dabei wird allerdings kein Webserver mit dem Standardport 80 aufgerufen, sondern der CUPS Server, der über den Port 631 erreichbar ist.

http://localhost:631/admin

lpadmin von der Konsole

Alternativ kann mit dem Kommandozeilenwerkzeug lpadmin gearbeitet werden. Die Option -p fügt einen Drucker hinzu. Die allgemeine Form sieht so aus.

/usr/sbin/lpadmin -p printer -E -v device -m ppd

Ein paar Beispiele beleben die Vorstellungskraft. Soll ein HP Deskjet an den parallelen Port des Computers angeschlossen werden, lautet der Aufruf:

lpadmin -p DeskJet -E -v parallel:/dev/lp1 -m deskjet.ppd

Ein HP Laserjet mit einer JetDirect Netzwerkkarte mit der IP-Adresse 192.168.109.192 würde mit dem folgenden Kommando eingerichtet:

lpadmin -p HPLJ -E -v socket://192.168.109.192 -m laserjet.ppd

cups.conf

Im Verzeichnis /etc/cups finden sich die Konfigurationsdateien von CUPS, insbesondere die Datei cupsd.conf. Ihr Aufbau erinnert fast ins Detail an die httpd.conf des Webservers
apache.

Beispielsweise kann der Zugriff auf die Drucker mit der Allow-Anweisung wie bei der Konfiguration des apache auf einzelne Rechner oder bestimmte Netze beschränkt werden.

Konfiguration per Browser

Das System hebt sich besonders dadurch heraus, dass es per Browser administriert wird. Das hat natürlich den Vorteil, dass kein Portierungsaufwand bei der grafischen Oberfläche erforderlich ist und dass die Administration gleichzeitig per Netz erfolgen kann.


1 vgl. Barakati, Naba: Linux Red Hat 6.0, 2000, Franzis', S. 466.
2 Mit einer speziellen Karte sind auch mehr als vier serielle Schnittstellen möglich. Diese teilen sich dann den Interrupt. Man sollte aber vor der Verwendung prüfen, ob sie auch von Linux unterstützt werden.
3 vgl. Nemeth, Evi / Snyder, Garth / Seebass, Scott / Hein, Trent R.: UNIX Systemverwaltung. Markt+Technik - Prentice Hall, München, 2001. S. 857.

Diese Seite basiert auf Inhalten aus dem Buch Arnold Willemer: Wie werde ich UNIX-Guru
Verlagsrechte bei galileo computing


Homepage (C) Copyright 2002 Arnold Willemer