Mit Shell-Befehlen drucken via Cups

Aus LinuxUser 10/2016

Mit Shell-Befehlen drucken via Cups

© Anke van Wyk, 123RF

Handarbeit

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.

Drucken

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.

Abbildung 1: Beim Absetzen von Druckbefehlen reagieren Lp und Lpr unterschiedlich.

Abbildung 1: Beim Absetzen von Druckbefehlen reagieren Lp und Lpr unterschiedlich.

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.

Abbildung 2: Cups bietet verschiedene Möglichkeiten, die Druckerwarteschlangen abzufragen.

Abbildung 2: Cups bietet verschiedene Möglichkeiten, die Druckerwarteschlangen abzufragen.

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
Abbildung 3: Besitzen Sie mehrere Drucker, erlaubt das Kommando <code srcset=

lpmove das Verschieben eines Druckauftrags zu einem anderen.” width=”300″ height=”95″ /> Abbildung 3: Besitzen Sie mehrere Drucker, erlaubt das Kommando lpmove 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).

Abbildung 4: Zunächst werden mit beiden Programmen einzelne Aufträge aus der Warteschlange des Druckers <code srcset=

fs2000 entfernt. Die noch verbleibenden löscht cancel in einem Rutsch.” width=”300″ height=”225″ /> Abbildung 4: Zunächst werden mit beiden Programmen einzelne Aufträge aus der Warteschlange des Druckers 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

DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDF
LinuxUser 10/2016 KAUFEN
EINZELNE AUSGABE
ABONNEMENTS
TABLET & SMARTPHONE APPS
E-Mail Benachrichtigung
Benachrichtige mich zu:

Hinweis: Dieser Artikel ist älter als ein Jahr, enthaltene Informationen sind möglicherweise veraltet.

0 Kommentare
Älteste
Neuste Beste Bewertung
Nach oben