Shell-Befehle für die Administration von Cups

Aus LinuxUser 09/2016

Shell-Befehle für die Administration von Cups

© Loopall, 123RF

Drucken auf Kommando

Ein Raspberry Pi eignet sich bestens als Druckserver für kleine Netze, zumal sich der Server-Dienst Cups auch abseits von Web- und GUI-Oberflächen via Terminal verwalten lässt.

Der Raspberry Pi bietet sich als kleiner Printserver geradezu an. Als klassische Softwarelösung dafür dient das Common Unix Printing System oder kurz Cups, das weniger komfortable Druckdienste aus dem Linux- und Unix-Umfeld wie Lpd oder Lprng ersetzt. Sie installieren Cups mit den Befehlen aus Listing 1.

Als Grundlage verwendet der Dienst PPD-Dateien (Postscript Printer Description), die die Eigenschaften eines Druckers enthalten. Dazu gehören unter anderem die mögliche Auflösung, die nutzbaren Farben sowie die Arten, Formate, Einzüge und Kassetten für das Papier. Für viele weit verbreitete Modelle bringt Cups solche PPD-Beschreibungen schon mit. Im Zweifelsfall verwenden Sie das PPD, das der Hersteller des Druckers dem jeweiligen Gerät beigelegt hat. Die meisten Anbieter stellen solche PPDs für Geräte bereit, die sich auch zum Einsatz unter Apple OS X eignen.

Das Funktionsprinzip von Cups gestaltet sich recht einfach. Die Anwendungen senden ihren Druckauftrag an den Cups-Scheduler. Der verwaltet die Warteschlangen und sorgt für deren sequenzielles Abarbeiten. Er leitet die Druckdaten an einen Konverter (Filter) weiter, der sie in das Postscript-Format (PS) umsetzt. Die erzeugten PS-Daten landen schließlich bei einem PS-Drucker, einem weiteren Cups-Server oder einem Backend. Letzteres wandelt die PS-Daten im Bedarfsfall in ein Format um, das ein Nicht-Postscript-Drucker verarbeiten kann.

Listing 1

$ sudo apt update
$ sudo apt dist-upgrade
$ sudo apt install cups printer-driver-gutenprint

Drucker und Warteschlangen

Das Verwalten von Cups außerhalb der grafischen Oberfläche unterscheidet sich durch verschiedene Einzelbefehle gegenüber den klassischen Werkzeugen. Dieser Artikel wechselt bei der Beschreibung zwischen Druckern und Warteschlangen – für Shell-Kommandos ist das meistens gleichbedeutend. Es gilt aber, zu beachten, dass Sie für einen Drucker mehrere Warteschlangen einrichten können. Das ist dann sinnvoll, wenn Sie Geräte etwa mit Erweiterungen wie zusätzlichen Papierkassetten ausstatten und diese mit verschiedenem Papier befüllen.

Grundsätzlich besteht die Druckerverwaltung aus einer Sammlung von kleinen Programmen, die jedes für sich einen bestimmten Zweck erfüllen. Die Tabelle “Cups-Verwaltung” listet sie zusammen mit den jeweiligen Aufgaben auf. Einstellungen am Printserver erfordern stets administrative Rechte. Melden Sie sich deshalb entweder als Benutzer root am System an, oder führen Sie die Kommandos mit vorangestelltem sudo aus.

Cups-Verwaltung

Kommando Aufgabe
lpadmin Druckerwarteschlangen konfigurieren
lpinfo unterstützte Geräte auflisten
lpoptions Druckeroptionen auflisten und setzen
lpstat Druckerstatus abfragen
lpc  Druckerstatus abfragen (Cups-Version)
cupsctl Optionen von Cupsd konfigurieren
cupsaccept Druckaufträge annehmen
cupsreject Druckaufträge ablehnen
cupsenable Druckerwarteschlange starten
cupsdisable Druckerwarteschlange beenden
cupsaddsmb Drucker über Samba für Windows-Clients anbieten

Vorarbeiten

Als Erstes kopieren Sie alle verfügbaren PPD-Dateien der anzusteuernden Drucker in das Verzeichnis /etc/cups/ppd. Ermitteln Sie alle notwendigen Daten der Drucker: Schnittstelle (USB/Seriell/Paralell) oder IP-Adresse, Hostname (falls verwendet), genaue Modellbezeichnung, installierte Erweiterungen (zweite Papierkassette, zusätzliche Ablagen, Speichererweiterungen, Schriften-ROMs, etc.). Bei Netzwerkdruckern müssen Sie zudem ermitteln, welche Protokolle und Ports der Drucker nutzt. Im Zweifelsfall hilft bei einem eingeschalteten Netzwerkdrucker ein Portscan via Nmap (Abbildung 1).

Abbildung 1: Um zu ermitteln, welche Ports und Protokolle ein Netzwerkdrucker verwendet, leistet der Portscanner Nmap wertvolle Dienste.

Abbildung 1: Um zu ermitteln, welche Ports und Protokolle ein Netzwerkdrucker verwendet, leistet der Portscanner Nmap wertvolle Dienste.

In unserem Beispiel handelt es sich um einen Kyocera FS-2000 älteren Baujahrs. Die Ausgabe zeigt, dass dieser das Internet Printing Protocol (IPP) auf Port 631 verwendet. Daneben kennt er das von HP entwickelte JetDirect-Protokoll, ersichtlich an den offenen Ports 9100 bis 9103. Daneben unterstützt er auch das von Lpd und Lprng genutzte Line Printer Daemon Protocol (Port 515).

Um einen Drucker über den USB-Port einzubinden, schließen Sie diesen an und führen nach dem Einschalten das Kommando lpinfo -v aus. Sie erhalten damit die für das spätere Vorgehen wichtige Geräte-URL (Abbildung 2). Damit Sie den Drucker beim Anlegen richtig ansprechen können, müssen Sie dessen URL entsprechend formulieren. Entsprechende Muster zeigt Ihnen die Tabelle “Drucker-URLs”. Bei einem Raspberry Pi als Printserver geben Sie dessen Hostnamen oder IP-Adresse an.

Abbildung 2: Das Kommando <code srcset=

lpinfo -v startet eine Abfrage aller physikalisch am Rechner angeschlossener Drucker – im Beispiel ein Kyocera FS-1370DN am USB-Port.” width=”300″ height=”163″ /> Abbildung 2: Das Kommando lpinfo -v startet eine Abfrage aller physikalisch am Rechner angeschlossener Drucker – im Beispiel ein Kyocera FS-1370DN am USB-Port.

Drucker-URLs

Schnittstelle Angabe Beispiel
USB-Anschluss usb://Hersteller/Modell?Seriennummer usb://Kyocera/FS-1370DN?serial=Q660918195
  usb:/dev/usb/lpNummer usb:/dev/usb/lp0
Netzwerk LPD lpd://Hostname/Warteschlange lpd://fs2000/lp1
  lpd://IP-Adresse/Warteschlange lpd://192.168.0.53/lp1
Netzwerk Socket socket://Hostname/Port socket://fs2000:9100
  socket://IP-Adresse/Port socket://192.168.0.53:9100
Netzwerk IPP ipp://Hostname:631 ipp://fs2000:631
  ipp://IP-Adresse:631 ipp://192.168.0.53:631

Drucker anlegen

Um den im Beispiel verwendeten Netzwerkdrucker Kyocera FS-2000 über seinen Hostnamen ansprechen zu können, ergänzen wir die Datei /etc/hosts um den Eintrag 192.168.0.53 fs2000. Alternativ könnte man den Adresseintrag auch einem lokalen Nameserver übergeben. Zum Einrichten des Druckers nutzen Sie das Kommando lpadmin. Dessen für die Praxis wichtigsten Optionen finden Sie in der gleichnamigen Tabelle.

Lpadmin

Schalter Aktion
-p Name Druckername angeben
-D "Beschreibung" Beschreibung des Druckers angeben
-E Drucker oder Klasse aktivieren
-v URL Geräte-URL angeben
-P /Pfad/Drucker.ppd PPD-Datei angeben
-c Klasse Drucker einer Klasse hinzufügen
-x Drucker Drucker löschen
-o Option weitere Optionen
-u allow:Nutzer,Nutzer,@Gruppe Benutzerzugriff erlauben
-u deny:Nutzer,Nutzer,@Gruppe Benutzerzugriff verbieten
-u allow:all Benutzerzugriffsteuerung abschalten

Im Beispiel aus Listing 2 geben Sie mit der Option -p den Namen des Druckers an. Dafür sollten Sie eine kurze und einprägsame Bezeichnung wählen. Mit dem Schalter -D legen Sie die Beschreibung fest, am besten in Form einer vollständige Angabe des Druckermodells. Für die Angabe des Druckerstandorts verwenden Sie -L, die Geräte-URL übergeben Sie mit der Option -v. Die Angabe der PPD-Datei muss mit der kompletten Pfadangabe nach -P erfolgen – PPD-Dateien lagern üblicherweise unter /etc/cups/ppd/. Ordnen Sie den Drucker mithilfe von -c in eine noch nicht existierende Klasse ein, legt Cups diese automatisch an.

Listing 2

# lpadmin -p Druckername/Warteschlange \
          -D "Beschreibung" \
          -L "Aufstellungsort" \
          -v Gerate-URL \
          -P /Pfad/zur/PPD-Datei/PPD-Datei \
          -E

Der Schalter -E entspricht den Kommandos cupsenable und cupsaccept (mehr dazu später im Abschnitt “Cups administrieren”), er aktiviert das neue Gerät. Anschließend nehmen Sie mit dem Befehl lpstat -a zur Kontrolle eine Statusabfrage aller vorhandenen Drucker durch.

Einstellungen

Mithilfe von lpoptions nehmen Sie gerätebezogene Einstellungen vor. Den Standarddrucker bestimmen Sie beispielsweise über das Kommando lpoptions -d Drucker. Ohne -d gibt Lpoptions diverse Geräteeinstellungen des Standarddruckers aus.

Systemweit speichert die Druckerverwaltung vorgenommene Einstellungen unter /etc/cups/lpoptions/, für den einzelnen Anwender unter ~/.cups/lpoptions/. In den entsprechenden Dateien finden Sie unter anderem Informationen über den Standarddrucker und gegebenenfalls eine abweichende Auflösung.

Mit dem Schalter -o Option=Wert legen Sie bestimmte Eigenschaften fest, wie beispielsweise die Trennseite, das Papierformat oder den Simplex/Duplex-Druck. Alle Schalter und Optionen zeigen die Aufrufe man lpadmin und man lpoptions.

Statusinformationen ermitteln

Lpstat erlaubt es, den Status von Druckern, Aufträgen und des Cups-Diensts abzufragen. So ermittelt lpstat -r, ob der Daemon läuft; der Schalter -d gibt den Standarddrucker aus. Eine Zusammenfassung über den Standarddrucker, die Geräte-URLs und den jeweiligen Status zeigt lpstat -t (Abbildung 3). Alle verfügbaren Kommandos fasst die Manpage (man lpstat) zusammen.

Abbildung 3: Das Kommando Lpstat gibt alle relevanten Geräteeinstellungen zum angesprochenen Drucker aus.

Abbildung 3: Das Kommando Lpstat gibt alle relevanten Geräteeinstellungen zum angesprochenen Drucker aus.

Daneben gibt es noch den auf Statusabfragen reduzierten Befehl Lpc. So listet das Kommando lpc status alle verfügbaren Drucker auf. Ergänzen Sie den Befehl um | grep : | tr -d \:, reduziert sich die Ausgabe auf den Druckernamen. Um die Ausgabe auf ein Gerät zu beschränken, tippen Sie lpc status Drucker. Rufen Sie lpc ohne Parameter auf, gelangen Sie in den Befehlsinterpreter, der allerdings im Gegensatz zum Original aus der BSD-Welt nicht viel bietet.

Cups administrieren

Mit den beiden Kommandozeilenwerkzeugen cupsdisable und cupsenable kontrollieren Sie eine Druckerwarteschlange. Die Tabelle “Warteschlangen steuern” listet die wichtigsten Kommandos für Cupsenable und Cupsdisable auf (Abbildung 4).

Warteschlangen steuern

Anweisung Aktion
cupsenable Drucker Warteschlange starten
cupsdisable Drucker Warteschlange stoppen
cupsdisable -r "Begründung" Drucker oder cupsreject -r "Begründung" Drucker Warteschlange stoppen mit Begründung
cupsaccept Drucker Aufträge annehmen
cupsreject Drucker Aufträge ablehnen

Mit Cupsdisable stoppen Sie eine Druckerwarteschlange und deaktivieren damit das Gerät, etwa wenn Sie den Druckerstandort verändern oder eine Reparatur ansteht. Sie sollten allerdings die von Ihnen betreuten Anwender auf den anstehenden Ausfall hinweisen. Alle Druckjobs bleiben beim Deaktivieren der Warteschlange erhalten und lassen sich anschließend via Cupsenable wieder fortsetzen. Möchten Sie stattdessen alle Druckjobs abbrechen, stoppen Sie die Warteschlange mit cupsdisable -c.

Damit Spezialdrucker (Satzbelichter, Farblaser, Etikettendrucker) keine unnötigen Kosten verursachen, können Sie die Annahme von Druckjobs verweigern (cupsreject) oder vorübergehend zulassen (cupsaccept). Einmal angenommene Druckjobs gibt Cups auch dann vollständig aus, wenn Sie nach deren Zugang die Annahme neuer Jobs wieder verweigern – beim Starten und Anhalten von Druckerwarteschlangen mit Cupsenable und Cupsdisable ist das nicht so.

Abbildung 4: Das Verwalten einer Cups-Warteschlange auf der Kommandozeile.

Abbildung 4: Das Verwalten einer Cups-Warteschlange auf der Kommandozeile.

Dienst verwalten

Cupsctl dient dazu, zur Laufzeit einige Optionen zu ändern. Rufen Sie das Kommando ohne Anweisungen auf, listet es lediglich die aktuellen Einstellungen auf (Abbildung 5). Die wichtigsten Schalter zeigt die Tabelle “Cupsctl”.

Abbildung 5: Cupsctl ohne zusätzliche Parameter listet die Einstellungen des Cups-Daemons auf.

Abbildung 5: Cupsctl ohne zusätzliche Parameter listet die Einstellungen des Cups-Daemons auf.

Cupsctl

Einstellung aktivieren deaktivieren
Löschen fremder Druckjobs cupsctl --user-cancel-any cupsctl --no-user-cancel-any
Protokollieren von Fehlermeldungen cupsctl --debug-logging cupsctl --no-debug-logging
Druckerbenutzung über beliebige IP-Adresse cupsctl --remote-any cupsctl --no-remote-any
Drucker für andere Rechner freigeben cupsctl --share-printers cupsctl --no-share-printers
Fernadminstration cupsctl --remote-admin cupsctl --no-remote-admin

Beim Kommando cupsctl 'BrowseLocalProtocols="Protokoll(e)"', mit dem Sie die Protokolle für die Druckerfreigabe festlegen, geben Sie mindestens eines der Protokolle cups, dnssd, lpd oder smb an. Mehrere Einträge trennen Sie jeweils mit einem Leerzeichen. Welche der Protokolle Sie benötigen, hängt von den im lokalen Netz verwendeten Betriebssystemen und Diensten ab. Als Standard dient cups, sodass jeder damit ausgestattete Rechner im Netz den freigegebenen Drucker zu sehen bekommt. Windows-Rechner können damit allerdings nichts anfangen, für diese setzen Sie zusätzlich smb.

Fazit

Die Shell-Befehle rund um Cups erlauben es Ihnen, dieselben Arbeiten zu erledigen wie in einem grafischen Frontend. Durch die Möglichkeit, die entsprechenden Kommandos in Shell-Skripte zu integrieren, können Sie viele Arbeiten auch komfortabel automatisieren. Zudem entfällt die Notwendigkeit von ressourcenfressenden Zusatzanwendungen wie einem Webserver auf dem RasPi-Printserver, der sich dennoch auch headless betreiben lässt. 

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.

LinuxUser 09/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
Inline Feedbacks
Alle Kommentare anzeigen
Nach oben