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.
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.

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 Kommandolpinfo -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.
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.
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”.
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.







