Galileo Computing < openbook >
Galileo Computing - Bücher zur Programmierung und Softwareentwicklung
Galileo Computing - Bücher zur Programmierung und Softwareentwicklung


'Wie werde ich Unix-Guru' als Buch bestellen
A. Willemer
Wie werde ich UNIX-Guru
I  ANWENDUNG
Know-How für Unix/Linux-User: Einführung, Shell, Befehle, Hilfe, Arbeit mit Dateien, Editoren, Reguläre Ausdrücke, nützliche Tools, Hardware.

II  ADMINISTRATION
Tools, Systemstart, Benutzer verwalten, Hardware konfigurieren, Software installieren, Datensicherung, Tuning, Kernel

III  NETZWERK
Client/Server Systeme, TCP/IP, Routing, IPv6, Internet-Dienste, DHCP, Webserver, Firewalls

IV  DAS X-WINDOW SYSTEM
Die grafische Oberfläche von UNIX einrichten und nutzen

V  PROGRAMMIERUNG VON SHELLSKRIPTEN
Automatisieren von Tasks durch Shell-Skripte.

VI  PERL
Interpreter, Syntax, Variablen, Steuerung, Funktionen, UNIX-Aufrufe, GUIs mit Tk

VII  PROGRAMMIERWERKZEUGE
C-Compiler, Analyse-Tools, CVS, yacc, diff

VIII  UNIX-SYSTEMAUFRUFE
UNIX-Befehle in eigenen Programmen nutzen

IX  LITERATUR
Weiterführende Literatur zu UNIX und LINUX

 
Galileo Computing / <openbook> / "Wie werde ich UNIX-Guru ?"
« Übersicht Druckeradministration Linux-PC als Druckserver »

Unterabschnitte
  • Die Datei /etc/printcap
  • Arbeitsablauf des Druckdämons
  • Drucken über das Netz
  • Druckjobs administrieren

BSD-Unix: lpd, lpr, lpq und lprm

Die Datei /etc/printcap

Die Datei /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.

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 Linux-System 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 ein apsfilter-Skript realisiert wird. Der apsfilter sorgt für die Übersetzung der PostScript-Informationen in die druckereigene Steuerungssprache. Hinter dem apsfilter verbirgt sich letztlich GhostScript.

[Parameter der printcap-Datei]L|L Parameter & Bedeutung
mx#0 & maximale Größe des Drucks in Blöcken, 0 heißt unbegrenzt.
sh & Banner abschalten
sf & Form-Feed abschalten

Ein Eintrag für einen Netzwerkdrucker 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 Zielhost (rp) angegeben werden. Ein lokales Spoolverzeichnis ist dennoch notwendig, da der Druckinhalt zwischengespeichert werden muss, solange der Druckdämon 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 Datei /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

Der lpd liest beim Start die Datei /etc/printcap. Darin findet er die definierten Drucker und deren Spoolverzeichnisse. Liegen in einem der Spoolverzeichnisse eine Datendatei (beginnt mit d) und eine Kontrolldatei (beginnt mit c) für einen Druckauftrag, 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 Ausdruck dadurch zu beenden, dass man den entsprechenden Druckdämon terminiert oder in wilder Panik die Maschine herunterfährt. Im Gegenteil: Der Druck wird wieder ganz von vorn begonnen. Um einen Ausdruck auf brutale Weise abzuwürgen, muss nach dem Terminieren des lpd also auch das Spoolverzeichnis geräumt werden. Mit Hilfe des Befehls fuser (siehe S. fuser) kann man sogar ermitteln, welcher lpd den Druckauftrag bearbeitet, und so einen Ausdruck abbrechen, ohne die anderen Druckaufträge zu gefärden.

Wie man 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 im Spoolverzeichnis des gewünschten Druckers in eine Datendatei. Danach erzeugt es die Kontrolldatei. Der lpd prüft regelmäßig den Inhalt der Spoolverzeichnisse. Findet er einen Auftrag, druckt er ihn aus, indem er sich an die eingetragene Schnittstelle (Parameter lp) wendet. Ist dieser Eintrag leer und ist stattdessen ein fremder Host (Parameter rm) eingetragen, sendet er beide Dateien an den lpd des entsprechenden Rechners. Er sendet diesem auch die Druckerkennzeichnung (Parameter rp) des Druckers, über den der Zielrechner ausdrucken soll. Schließlich muss der lpd auf dem Zielrechner ja wissen, auf welchem seiner Drucker er ausdrucken soll.

Drucken ü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 Datei /etc/hosts.equiv stehen, haben Druckrecht. Beim Eintragen des Hostnamens ist darauf zu achten, daß der erste Name des Rechners aus der Datei /etc/hosts verwendet wird, da der Rechner sonst nicht erkannt wird.

Der Druckdämon lpd verwendet zum Senden eines Druckauftrages einen Port (siehe S. 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 die Größe der zu druckenden Datei 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 gibt 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.

Wenn man den Ablauf dieses Prozesses kennt, wird klar, dass die zigarettenschachtelgroßen Druckserver, 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 erfolgreich war. 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

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,5 MByte groß.

Mit dem Befehl lprm 97 kann der oben stehende 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) beginnt und zum anderen die Datendatei, deren Name mit df (data file) beginnt. Beide Dateien befinden sich im Spoolverzeichnis.

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.

[lpc-Kommandos]L|L Befehl & Wirkung
lpc disable lp & Sperre die Warteschlange für lp
lpc enable lp & Gib die Warteschlange für lp frei
lpc stop lp & Stoppe das Drucken aus der Warteschlange für lp
lpc start lp & Lasse das Drucken aus der Warteschlange für lp wieder zu
lpc down lp & Stoppe das Drucken und die Warteschlange für lp
lpc up lp & Starte das Drucken und die Warteschlange für lp wieder
lpc status lp & Informationen über den Zustand der Sperrungen

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

gaston# lpc topq lp 97



« Übersicht | Druckeradministration | Linux-PC als Druckserver »
 
 Zum Katalog
Zum Katalog
Wie werde ich UNIX-Guru?
bestellen
 Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen?
Ihre Meinung

 UNIX/Linux

PHP 4-Workshop

Einstieg in Python

Perl fürs Web

MySQL 4

GNOME 2.0
 Empfehlung

Einstieg in XML
 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
Info

 MyGalileo
Der Service für registrierte Leser:
Zu MyGalileo
Info



Copyright © Galileo Press GmbH 2003
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.
[Galileo Computing]

Galileo Press GmbH, Gartenstraße 24, 53229 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, info@galileo-press.de