Zurück

1.107.2

Verwaltung von Druckern und Druckerwarteschlangen


Beschreibung: Prüfungskandidaten sollten in der Lage sein, Druckerwarteschlangen und Druckjobs von Benutzern zu verwalten. Dieses Lernziel beinhaltet die Kontrolle von Druckservern und Druckerwarteschlangen und das Lösen allgemeiner Druckprobleme.

Die wichtigsten Dateien, Bezeichnungen und Anwendungen:


Drucken unter Linux läuft immer nach einem ganz bestimmten Schema ab. Zunächst einmal geht es in diesem Abschnitt um die Verwaltung von Druckerwarteschlangen. Die Einrichtung verschiedener Drucker wird in den folgenden Kapiteln erläutert.

Druckerwarteschlangen - Das Prinzip

Druckerwarteschlangen arbeiten unter Unix nach einem feststehenden Prinzip, nach dem auch alle anderen Systeme mit Warteschlangen arbeiten. Es gibt viele völlig unterschiedliche Subsysteme, die dieses Prinzip benutzen, so etwa das at-System oder das Fax-System. Das zugrundeliegende Prinzip ist einfach zu durchschauen, aber sehr funktional.

Eine Warteschlange (engl. spool) ist immer ein Verzeichnis irgendwo unter /var/spool. In dieses Verzeichnis werden die Druckaufträge in zwei verschiedenen Dateien abgelegt. Die erste Datei trägt einen Namen, der mit cf beginnt, diese Datei enthält die Kontrollinformationen des Jobs. (cf - control file). Kontrollinformationen sind z.B. der Name der zu druckenden Datei, der Name des Users, der den Druckauftrag aufgegeben hat und der Hostname des Rechners, von dem aus der Auftrag abgegeben wurde. Die zweite Datei trägt einen Namen, der mit den Buchstaben df beginnt und enthält die zu druckende Datei selbst (df - data file).

Wird also ein Druckauftrag abgegeben, so werden eigentlich nur diese zwei Dateien erstellt. Das eigentliche Drucken wird dann von einem Daemon-Prozeß erledigt, der diese Warteschlange abarbeitet. So können auch Aufträge abgeschickt werden, wenn der Drucker gerade nicht zur Verfügung steht. Denn sie werden ja nur in das Spool-Verzeichnis geschrieben. Selbst wenn der Rechner danach ausgeschaltet wird, sind die Aufträge nicht verschwunden. Sobald der Druckerdaemon das nächste Mal läuft und der Drucker zur Verfügung steht, wird die zu druckende Datei dann ausgedruckt.

Definition von Druckerwarteschlangen in /etc/printcap

Jeder Drucker, der dem System bekannt ist, also auch Netzwerkdrucker auf anderen Rechnern, erhält einen Eintrag in der Datei /etc/printcap. Dieser Eintrag wird im Abschnitt 1.107.4 genauer erklärt. Hier interessieren uns jetzt nur zwei Kleinigkeiten dieses Eintrags.

Ein Eintrag in /etc/printcap enthält - neben anderen Informationen - den Namen des zu verwendenden Druckers und die Angabe, welches Verzeichnis das zu verwendende Spoolverzeichnis ist. Zum Beispiel zeigt der folgender Eintrag einen Drucker:

  lp|hplaser|PS;r=600x600;q=medium;c=gray;p=a4;m=auto:\
    :sd=/var/spool/lpd/lp:\
    :lf=/var/spool/lpd/lp/log:\
    :af=/var/spool/lpd/lp/acct:\
    :if=/etc/apsfilter/basedir/bin/apsfilter:\
    :lp=/dev/lp0:\
    :sh:\
    :mx#0:
Die für uns interessanten Einträge sind hier:

Mit Hilfe dieser Information weiß das Drucksystem von Linux also, daß der Drucker lp oder hplaser das Spoolverzeichnis /var/spool/lpd/lp benutzt. Wenn also ein Druckauftrag an diesen Drucker abgeschickt wird, dann werden sowohl die Kontrolldatei, als auch die zu druckende Datei in diesem Verzeichnis abgelegt.

Befehle für den Umgang mit Druckerwarteschlangen

Zum Umgang mit den Druckerwarteschlangen stehen uns verschiedene Befehle zur Verfügung, die in dieser Form auch wieder sehr typisch für alle Unix/Linux Warteschlangensysteme sind. Diese Befehle werden im Folgenden kurz beschrieben:

Druckaufträge losschicken

Um einen Druckauftrag loszuschicken, wird der Befehl lpr benutzt. lpr wird entweder ein Dateinamen mitgegeben, um eine bestimmte Datei zu drucken, oder - falls kein Dateinamen angegeben wurde - druckt lpr seine Standard-Eingabe.

Der Name des zu verwendenden Druckers kann mit der Option -P angegeben werden. Wird kein Name angegeben, so wird standardmäßig der Drucker mit dem Namen lp benutzt.

Die Anzahl der zu druckenden Kopien kann mit der Option -# angegeben werden. Vorsicht bei der Anwendung dieses Parameters auf der Shell. Die Shell mißinterpretiert das #-Zeichen als Kommentarzeichen, es muß also vor Interpretation geschützt werden (-\#).

Um also die Datei /etc/passwd auf dem Drucker lp2 vier mal auszudrucken, wird der Befehl

  lpr -Plp2 -\#4 /etc/passwd
angegeben. Soll die Datei nur einmal auf dem Standarddrucker ausgegeben werden, so genügt ein
  lpr /etc/passwd
Der Befehl lpr druckt nicht wirklich, sondern legt die Aufträge nur in die entsprechenden Spool-Verzeichnisse ab. Erst der Druckerdaemon lpd erledigt das Drucken selbst.

Inhalt der Warteschlange anzeigen

Um den Inhalt einer Druckerwarteschlange anzuzeigen, existiert der Befehl lpq. Er zeigt die aufgegebenen Druckaufträge für einen mit -P angegebenen Drucker oder - falls der Druckername weggelassen wurde - für den Standarddrucker.

Die Druckaufträge werden zusammen mit einer Jobnummer ausgegeben, die wir später brauchen werden, um einzelne Aufträge wieder zu löschen. Die Ausgabe des Befehl könnte etwa so aussehen:

  lp is ready and printing
  Rank   Owner      Job  Files                             Total Size
  active root       447  /etc/passwd                       1204 bytes
Wir entnehmen also daraus, daß nur ein Druckauftrag vorliegt, der dem User root gehört, also von ihm aufgegeben wurde. Der Auftrag hat die JobID 447 und druckt die Datei /etc/passwd, die insgesamt 1204 Byte groß ist.

Die erste Zeile ist für die Diagnose von Fehlern sehr wichtig. Sie zeigt den Status des Druckerdaemons an. Es könnten hier auch Fehlermeldungen wie

  Warning: lp is down: 
  Warning: lp queue is turned off
ausgegeben werden, wenn der Drucker deaktiviert wurde oder einfach eine Leerzeile, wenn kein Druckerdaemon vorhanden ist.

Druckaufträge aus der Warteschlange löschen

Um einzelne Druckaufträge wieder aus einer Warteschlange zu löschen, gibt es den Befehl lprm. Auch er kennt den Parameter -P, mit dem der gewünschte Druckername angegeben werden kann und auch er bezieht sich auf den Standarddrucker, wenn dieser Parameter weggelassen wurde.

lprm erwartet die Angabe einer oder mehrerer JobIDs als Parameter, die die zu löschenden Jobs beschreiben. Diese JobIDs können vor dem Aufruf von lprm durch lpq festgestellt werden.

Drucker kontrollieren

Um verschiedene Drucker zu kontrollieren, existiert das Printer-Control-Program lpc. Dieses Programm kann verschiedene Befehle verstehen, die entweder auf der Kommandozeile eingegeben werden, oder an einen Interpreter weitergegeben werden, wenn lpc ohne Parameter aufgerufen wurde.

Für jeden Drucker, der in /etc/printcap angegeben wurde, kann lpc benutzt werden um

Wird lpc ohne Parameter aufgerufen, so wartet er auf Kommandos von der Standard-Eingabe. Sind Parameter angegeben, so interpretiert lpc den ersten Parameter als Kommando und die folgenden Parameter als Argumente dieses Kommandos. lpc kennt folgende Kommandos:

All diese Befehle können entweder als Kommandozeilenparameter eingegeben werden, wie etwa

  lpc up all
oder - wenn lpc ohne Parameter aufgerufen wurde - als Befehl von der Standard-Eingabe:
  lpc
  lpc> up lp
  lp:
        printing enabled
        daemon started
  lpc> exit

Wurde lpq ohne Parameter aufgerufen, so kann der Interpreter über die Befehle exit oder quit wieder verlassen werden.