Die meisten Nutzer drucken Dokumente aus einer Anwendung mit grafischer Oberfläche heraus. In einigen Situationen erweist es sich aber als sinnvoller, den Printserver Cups per Kommandozeile zu bedienen.
Sie arbeiten via SSH an einem Datenbankserver und möchten remote auf dem Drucker neben der Datenbankmaschine drucken? Sie wollen erreichen, dass Ihre Shell-Skripte ihre Ergebnisse ohne manuellen Benutzereingriff auf das Papier bringen? Sie müssen öfter Druckaufträge auf andere Drucker verschieben oder abbrechen? Das alles erledigen Sie am schnellsten mit den zu Cups gehörenden Kommandozeilenbefehlen.
Dieser Artikel wechselt in der Beschreibung zwischen Drucker und Warteschlangen. Aus der Perspektive eines Kommandozeilenbefehls allerdings ist das in der Regel dasselbe. Für einen physikalischen Drucker lassen sich jedoch mehrere Warteschlangen einrichten. Das erweist sich insbesondere dann als sinnvoll, wenn Sie Geräte mit entsprechenden Erweiterungen ausstatten – etwa mit zusätzlichen Papierkassetten, die Sie mit verschiedenem Papier befüllen.
Wie Sie Drucker respektive Warteschlangen anlegen und verwalten, erklärt der erste Teil dieses Workshops, “Drucken auf Kommando”, der in LU 09/2016 erschien [1]. Sie finden ihn als PDF auf der Heft-DVD dieser Ausgabe.
Cups liefert die beiden Druckbefehle lp (System V) und lpr (BSD) mit, die die Cups-Entwickler um diverse eigene Optionen erweiterten. Die Tabelle “Lp und Lpr: Druckkommandos” zeigt die für die tägliche Arbeit wichtigsten Kommandos.
Lp und Lpr: Druckkommandos
| Aktion | Eingabe Lp | Eingabe Lpr |
|---|---|---|
| Druckbefehl auf Standarddrucker | lp Datei |
lpr Datei |
| Druckbefehl mit Druckerangabe | lp -d DruckerDatei |
lpr -P DruckerDatei |
| Anzahl Kopien (max. 100) | lp -n Anzahl |
lpr -# Anzahl |
| Datei ohne Filter drucken | lp -o raw |
lpr -o raw |
| Angabe der zu druckenden Seiten | lp -P Seiten |
– |
Über den Schalter -o eröffnen beide Kommandos die Möglichkeit für weitere Verfeinerungen des Druckbefehls. Auf diesem Weg wählen Sie beispielsweise das Papierformat, schalten zwischen einseitigem und Duplexdruck um, fassen Seiten auf einem Blatt zusammen und vieles andere mehr. Eine Übersicht dazu bietet die Tabelle “Lp und Lpr: Option -o im Detail”.
Lp und Lpr: Option <c>-o<c> im Detail
| Aktion | Eingabe | Hinweis |
|---|---|---|
| Papiergröße | -o media=Papierformat |
zum Beispiel a3, a4, a5 |
| Querformat | -o landscape |
– |
| Einseitiger Druck | -o sides=one-sided |
– |
| Duplex (lange Seite) | -o sides=two-sided-long-edge |
– |
| Duplex (kurze Seite) | -o sides-two-sided-short-edge |
– |
| Druckdaten an Seitengröße anpassen | -o fit-to-page |
– |
| Seiten auf einem Blatt zusammenfassen | -o number-up=Zahl |
mögliche Werte: 2/4/6/9/16 |
| Druck reiner Textdaten (Datei / aus Pipe) | ||
| Seitenrand links | -o page-left=Punkte |
72 Punkte je Zoll (2,54 cm) |
| Seitenrand rechts | -o page-right=Punkte |
– |
| Seitenrand oben | -o page-top=Punkte |
– |
| Seitenrand unten | -o page-bottom=Punkte |
– |
| Zeichen je Zoll | -o cpi=Punkte |
gebräuchlich?*10 oder 12 |
| Zeilen je Zoll | -o lpi=Punkte |
gebräuchlich?*6 |
Viele der Druckoptionen lassen sich miteinander kombinieren. In den entsprechenden Beispielen aus Listing 1 kommt gelegentlich der im ersten Teil der Reihe bereits beschriebene Drucker fs2000 explizit als Ziel zum Einsatz. Bei der verwendeten Druckdatei kann es sich um eine Text-, Postscript- oder PDF-Datei handeln. Manche Optionen verarbeiten ausschließlich reine Textdaten, die Sie über eine Textdatei einfüttern oder die per Pipe an den Druckbefehl gelangen. In Listing 1 sehen Sie im Einzelnen:
- die Ausgabe von zwei Seiten je Druckseite unter Angabe des Druckers (Zeile 1),
- den Druck im Querformat bei Ausgabe auf Standarddrucker (Zeile 2),
- einen an die Seitengröße angepassten Ausdruck auf ein spezifisches Zielgerät (Zeile 3),
- eine Ausgabe mit acht Zeichen je Zoll bei Ausgabe auf Standarddrucker (Zeile 4),
- eine Ausgabe mit drei Zeilen je Zoll auf den Standarddrucker (Zeile 5), sowie
- den Ausdruck auf einen spezifischen Drucker unter Angabe von einzuhaltenden Seitenrändern (Zeile 6).
Listing 1
$ lpr -o number-up=2 -Pfs2000 Druckdatei $ lp -o landscape Druckdatei $ lpr -o fit-to-page -Pfs2000 Druckdatei $ lpr -o cpi=8 Textdatei $ lpr -o lpi=3 Textdatei $ lpr -o page-left=72 -o page-top=144 -Pfs2000 Textdatei
Um die Druckgeschwindigkeit eines Geräts voll auszureizen, senden Sie diesem eine vorformatierte Druck- oder Textdatei ohne Filterbehandlung. Dazu dient folgendes Kommando:
$ lpr -o raw -Pfs2000 Druckdatei<c>
In diesem Modus erreicht der im Test verwendete Kyocera FS-2000 nahezu die im Prospekt angegebene Seitenzahl je Minute. Sie müssen dazu allerdings die zeichenspezifischen Einstellungen des Druckers kennen und gegebenenfalls den Zeichensatz der Textdatei vorher entsprechend umstellen – in unserem konkreten Fall beispielsweise mittels recode auf MSDOS.
Die Angabe der Druckdatei entfällt, wenn die Daten aus der Pipe an den Druckbefehl gelangen. Im folgenden Beispiel lassen wir den Drucker fs2000 eine Shell-Ausgabe drucken, wobei vier Seiten auf einer Druckseite Platz finden sollen:
$ cat Textdatei | lp -o number-up=4 -d fs2000
Die beiden Beispiele in der Abbildung 1 zeigen das unterschiedliche Rückmeldungsverhalten von Lp und Lpr. Beim Verwenden von Lp erhalten Sie die Jobnummer der jeweiligen Warteschlange. Diese können Sie im Bedarfsfall zur weiteren Behandlung des Druckauftrags verwenden.
Druckaufträge verwalten
Über Kommandozeilenbefehle können Sie Druckaufträge auch auflisten, verschieben, anhalten und löschen. Dazu stehen für gleichartige Aktionen oft mehrere Befehle zur Auswahl. Auch hier übernahm das Cups-Projekt manches schlicht aus Kompatibilitätsgründen.
Mithilfe der Kommandos lpstat und lpq erfahren Sie, welche Aufträge derzeit zum Ausdruck anstehen. Erweitert um den Schalter -o, listet Lpstat Druckaufträge auf; ohne die Angabe eines bestimmten Druckers listet dieser Aufruf die Jobs aus allen Warteschlangen auf.
Beim Befehl Lpq hingegen müssen Sie dafür die Option -a verwenden. Möchten Sie die Ausgabe auf einen Drucker einschränken, vervollständigen Sie den Befehl mit -PDrucker. In Abbildung 2 sehen Sie einige entsprechende Abfragen. Die ersten beiden zeigen Aufträge bei allen Druckern an. Bei der dritten Abfrage teilt Lpq mit, der Drucker sei momentan nicht ausgabebereit – allerdings ohne Begründung. Die letzte Abfrage zeigt eine Warteschlange ohne Inhalt, der Drucker steht für Aufträge bereit.
In jedem Fall erfahren Sie die Jobnummern der Druckaufträge, die Sie gegebenenfalls zum Verschieben oder Löschen benötigen. Fällt ein Drucker aus und Sie verfügen über mehrere Geräte, lässt sich ein anstehender Auftrag mittels Lpmove an ein anderes Gerät leiten (Abbildung 3):
$ lpmove Jobnr Drucker

lpmove das Verschieben eines Druckauftrags zu einem anderen.” width=”300″ height=”95″ />
Abbildung 3: Besitzen Sie mehrere Drucker, erlaubt das Kommandolpmove das Verschieben eines Druckauftrags zu einem anderen. Die Befehle cancel und lprm erlauben es Ihnen, einzelne Druckaufträge über deren Jobnummer zu löschen. Auf Wunsch entfernt cancel -a Drucker auch alle Aufträge, die derzeit an einem Drucker anstehen (Abbildung 4).

fs2000 entfernt. Die noch verbleibenden löscht cancel in einem Rutsch.” width=”300″ height=”225″ />
fs2000 entfernt. Die noch verbleibenden löscht cancel in einem Rutsch.Fazit
Die Druckbefehle von Cups erlauben es Ihnen auf relativ unkomplizierte Weise, sich beim Drucken von grafischen Tools zu emanzipieren. Mit den Kommandos erzeugen und verwalten Sie Druckjobs komplett über Shell-Befehle. Durch die Möglichkeit, die entsprechenden Kommandosequenzen auch in Skripte einzubauen, lassen sich darüber hinaus viele tägliche Arbeitsvorgänge komfortabel automatisieren.
Der Autor
Harald Zisler beschäftigt sich seit rund 25 Jahren mit FreeBSD und Linux. Zu Technik- und EDV-Themen verfasst er Zeitschriftenbeiträge und Bücher. Rund um den Themenbereich Linux und Datenbanken führt er auch Kleingruppenkurse durch.
Infos
[1] Cups auf der Shell verwalten: Harald Zisler, “Drucken auf Kommando”, LU 09/2016, S. 69, https://www.linux-community.de/37207







