CUPS

Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:


Du möchtest den Artikel für eine weitere Ubuntu-Version testen? Mitarbeit im Wiki ist immer willkommen! Dazu sind die Hinweise zum Testen von Artikeln zu beachten.

Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:

  1. ⚓︎ Installation von Programmen

  2. ⚓︎ Einen Editor öffnen

  3. ⚓︎ Ein Terminal öffnen

  4. ⚓︎ Benutzer und Gruppen verwalten

Inhaltsverzeichnis
  1. Installation
  2. Dienst steuern
  3. Funktionsweise von CUPS
  4. Einrichten
  5. Via Netzwerk/Konsole installieren
  6. Weboberfläche
    1. Drucker hinzufügen
      1. Netzwerkprotokolle
      2. Raw-Drucker
    2. Warteschlange bearbeiten
    3. Status überwachen/verändern
    4. Druckerserver im Netzwerk
  7. Zugangskontrolle über ACLs
  8. SSL-Verschlüsselung
  9. Besonderheiten
    1. Reine Clientinstallation
    2. Accounting
  10. Problembehebung
    1. Parallelport aktivieren
    2. Drucken mit HP-Laserdruckern sehr langsa...
    3. Große Dateien werden nicht gedruckt
    4. Druckerstatus „Filter failed“
    5. Drucker pausiert willkürlich
  11. Links

./cups_logo.png CUPS 🇬🇧, das Common Unix Printing System, ist das am weitesten verbreitete Drucksystem auf Linux-Systemen. Über CUPS lassen sich zahlreiche Drucker nutzen, verwalten und im Netzwerk freigeben, da es als Client/Server-System aufgebaut ist. Ältere Systeme wie LPD (BSD-System) oder lprng wurden weitgehend verdrängt, vereinzelt kommen sie auf Routern mit Netzwerkdruckerfunktion vor.

CUPS wurde von Michael Sweet entwickelt. Die Rechte lagen ursprünglich bei dessen Firma ESP und wurden von Apple aufgekauft. M. Sweet entwickelte als Mitarbeiter von Apple CUPS weiter bis zu seinem Ausscheiden. Im September 2020 wurde CUPS unter der Leitung von M. Sweet von OpenPrinting geforkt; damit ist eine weitere Pflege und Entwicklung dieser Software für unixoide Betriebssysteme möglich.

Ein Rechner mit CUPS kann im Netzwerk als Drucker-Server für Windows-Maschinen dienen. Diese Anbindung wird in Windows Netzwerkdrucker erklärt.

Installation

CUPS wird – als wichtiger Bestandteil des Betriebssystems – bei der Installation aller Ubuntu-Derivate mitinstalliert. Einzige Ausnahme ist die Ubuntu-Server-Edition; bei dieser kann man aber die Pakete über die Paketverwaltung nachinstallieren. Folgende Pakete enthalten die elementaren Teile von CUPS:

Befehl zum Installieren der Pakete:

sudo apt-get install cups cups-client cups-bsd 

Oder mit apturl installieren, Link: apt://cups,cups-client,cups-bsd

Ggf. benötigt man noch spezielle Pakete, in denen spezialisierte Treiber enthalten sind. Wer nicht weiß, welche für ihn nützlich sind, installiert sie einfach alle.

Befehl zum Installieren der Pakete:

sudo apt-get install hplip printer-driver-gutenprint 

Oder mit apturl installieren, Link: apt://hplip,printer-driver-gutenprint

Dienst steuern

(Cups manuell starten/stoppen.) Cups wird normalerweise automatisch gestartet. Wie alle anderen Dienste liefert CUPS Start-/Stop-Skripte zum Kontrollieren des Serverprozesses mit.

# Allgemein
sudo systemctl {start|stop|restart|status} cups
# Beispiel
sudo systemctl restart cups 

Funktionsweise von CUPS

CUPS wandelt die zu druckenden Daten durch sogenannte Filter immer in PDF-Druckdaten (früher in PostScript). Diese können dann an Geräte der lokalen CUPS-Instanz sowie an andere CUPS-Instanzen geschickt werden.

Die Instanz, welche am Ende den Drucker steuert, muss die PDF-Druckdaten entweder durch Treiber in gerätespezifische Druckdaten umwandeln oder, wenn das Gerät selbst PDF unterstützt, die Daten direkt an dieses senden. Bei Geräten mit PDF-Unterstützung stellt sich die Frage nach proprietären Treibern und ihrer Verfügbarkeit für Linux somit erst gar nicht.

In beiden Fällen benötigt CUPS noch eine sogenannte .ppd-Datei. Diese ist eine Beschreibung der Features des Druckers. CUPS bringt auch eine generische (allgemein gehaltene) .ppd mit, die man versuchen kann, falls der Hersteller oder die Open-Source-Projekte noch keine gerätespezifische .ppd für genau das gewünschte Modell erstellt haben. Moderne Drucker, die AirPrint können, benötigen diese Datei nicht mehr, da sie diese selber bereitstellen können. Solche Drucker lassen sich dann unter CUPS mit dem Treiber "IPP Everywhere" installieren.

Einrichten

Hier wird die CUPS-Netzwerkkonfiguration und Einrichtung von Druckern über die CUPS-eigene Weboberfläche bzw. die Konsole beschrieben, dies ist vor allem für Serversysteme ohne grafische Benutzeroberfläche interessant. Grafische Desktop-Umgebungen haben Konfigurationswerkzeuge zum Einrichten von Druckern, siehe die Artikel GNOME Druckerkonfiguration und KDE Druckerkonfiguration. Trotzdem bietet sich auch von den verschiedenen grafischen Oberflächen ein Zugriff über die einheitliche CUPS-Weboberfläche an. Man kann CUPS neben der Weboberfläche allerdings auch über die Kommandozeile bedienen. Dies beschreibt der Artikel Drucken per Kommandozeile.

⚓︎

Via Netzwerk/Konsole installieren

Nach der Installation nimmt CUPS nur Druckaufträge vom lokalen Rechner an. Auch die Administration kann nur lokal erfolgen. Folgend wird gezeigt, wie man ohne grafische Oberfläche (GUI) den Netzwerkdruck konfiguriert, z.B. bei einem Server. Hierzu kann das Programm cupsctl verwendet werden:

# Ein cupsctl ohne Parameter gibt die aktuellen Einstellungen aus:
cupsctl
# Gibt die lokalen Drucker im Netzwerk frei:
sudo cupsctl --share-printers
# Aktiviert die Möglichkeit, CUPS über das Netzwerk zu administrieren:
sudo cupsctl --remote-admin
# Beides auf einmal
sudo cupsctl --share-printers  --remote-admin
# Cups neustarten
systemctl restart cups 

Wie bei einem lokalen CUPS-Server kann die weitere Einrichtung jetzt über die Weboberfläche des CUPS-Servers auf dem entfernten Rechner erfolgen. Steht auf auf dem lokalen Rechner keine grafische Oberfläche zur Verfügung, kann man den CUPS-Server auch mit einem Text-Browser einrichten. Ganz einfach geht es z.B. mit Lynx

lynx http://localhost:631 

Weitere mögliche Shell-Browser: Shell/Anwendungen (Abschnitt „Internet“)

Weboberfläche

./cups_webadmin.png

CUPS besitzt einen integrierten Webserver, der über den Port 631 zu erreichen ist. Diesen kann man für das Einrichten und Verwalten der Drucker nutzen. Vom selben Rechner aus kann man also sehr einfach mit einem Browser durch Eingabe der Adresse (URL):

oder

auf die Konfigurationsseite zugreifen. Nicht jeder Benutzer darf hier alle Aktionen durchführen. Möchte man z.B. einen Drucker hinzufügen, so erscheint eine Passwortabfrage. Hier muss man sich mit seinen Benutzernamen und Passwort anmelden, allerdings werden nur Mitglieder der Gruppe lpadmin akzeptiert. Bei den Desktop Versionen von Ubuntu wird normalerweise der erste bei der Installation automatisch angelegte Benutzer bereits in dieser Gruppe aufgenommen sein. Weiteren Benutzern oder bei Ubuntu- Server muss dieses Recht erst gegeben werden [4].

adduser meinbenutzer lpadmin 

Beim Zugriff über das Netzwerk ist der Hostname oder die IP des entfernten Rechners anzugeben. Der Benutzername und das Passwort müssen auf dem entfernten Rechner gelten.

Drucker hinzufügen

Unter "Verwaltung" kann man Drucker zu CUPS hinzufügen. Lokale, direkt angeschlossene Drucker und nur über das Netzwerk erreichbare Drucker sowie Drucker an entfernten Druckservern werden mit den gleichen Schritten eingerichtet. Beide Druckertypen sollten zunächst direkt oder über das Netzwerk verbunden und angeschaltet werden. Nach Klicken auf "Verfügbare Drucker auflisten" werden viele Geräte bereits automatisch gefunden.

Die Erreichbarkeit von Netzwerkdruckern kann mittels ping in der Konsole geprüft werden. Auch bieten viele Netzwerkdrucker eigene Weboberflächen an.

Ist der lokale CUPS-Server so konfiguriert, dass er freigegebene Drucker im Netzwerk automatisch erkennt, so muss man Netzwerkdrucker üblicherweise nicht von Hand hinzufügen. Das manuelle Hinzufügen eines Netzwerkdruckers ist also nur nötig, wenn der Druckserver seine Drucker nicht automatisch verbreitet.

Das Einrichten eines Druckers erfolgt in fünf Schritten:

Einen Testdruck kann man auf der Seite "Drucker" beim jeweiligen Drucker über das Ausklappfeld "Wartung" mit der Option "Testseite drucken" auslösen.

Anzumerken ist, dass die erste (meist einzige) parallele Schnittstelle unter Linux als "LPT #1" bezeichnet wird (/dev/lpX; die Nummerierung beginnt bei 0).

Netzwerkprotokolle

Es stehen die folgenden Verbindungen zur Auswahl:

  • "AppSocket/HP JetDirect (socket)" - Notlösung für den Zugriff im lokalen Netzwerk. Angegeben werden muss eine URL im Format socket://<druckerhostname.oder.ip>:<port>. Als Wert für den Port ist 9100 sehr verbreitet, dies hängt aber vom Drucker ab.

  • "Internet Printing Protocol (ipp)" - Andere CUPS-Server und modernere Netzwerkdrucker bieten dieses Protokoll an. Angegeben werden muss eine URL im Format ipp://<hostname.oder.ip>/printers/<druckername>. Diese Protokoll erlaubt das Druckern übers Internet.

  • "LPD/LPR Host or Printer" - Manche Netzwerkdrucker oder Router mit Druckerport verwenden noch dieses alte Unix-Druckprotokoll. Die URL lautet hier lpd://<servername>/<warteschlange>.

  • "Backend Error Handler" - Spezialfall zur Fehlerrückmeldung, hier nicht weiter betrachtet

  • "Windows Printer via SAMBA" - Drucker-Freigaben von Windows-Druckservern. Auch hier muss wieder nur eine URL im Format smb://<arbeitsgruppe bzw. domäne>/<servername>/<druckername> angegeben werden. (Voraussetzung ist, dass das Paket smbclient installiert ist.)

Netzwerkdrucker bieten meist mehrere Zugangsprotokolle an. Unter CUPS wird zunächst das Socket-Protokoll empfohlen. Das IPP-Protokoll ist geringfügig langsamer aber universeller. LPD sollte nur verwendet werden, wenn die anderen Wege fehlschlagen. Weitere Fragen zur Verwendung der Netzwerkprotokolle beantwortet der Artikel Printserver.

Raw-Drucker

Ein Raw-Drucker im Sinne von CUPS ist ein Drucker, dessen Daten von CUPS nicht bearbeitet werden. Das heißt, die Daten vom Client werden 1:1 an den Drucker weitergeleitet. Einsetzen kann man einen Raw-Drucker z.B., wenn man die Treiber auf einem Windows-Client benutzen möchte/muss. Es bedeutet aber auch, dass der Treiber auf jedem Client installiert sein muss. Apple plant irgendwann in der Zukunft den Raw-Druck aus CUPS zu entfernen.

Voraussetzung für die Einrichtung eines Raw-Druckers ist, dass in den beiden Dateien:

  • /etc/cups/raw.types

  • /etc/cups/raw.convs

die Zeilen am Ende der Dateien mit octet-stream nicht auskommentiert sind[2].

# /etc/cups/mime.types
application/octet-stream 

und

# /etc/cups/mime.convs
application/octet-stream        application/vnd.cups-raw        0       - 

Das Einrichten geschieht wie oben beschrieben. Bei

  • "Marke" - ist "Raw" und bei

  • "Modell" - ist "Raw Queue (en)"

auszuwählen. Damit ist die Installation abgeschlossen.

Unter Windows erfolgt die Installation des Druckers so, als ob es ein lokaler Drucker wäre (einschließlich der Treiberinstallation). Danach muss unter "EigenschaftenAnschlüsse" des Druckers ein "Local Port" hinzugefügt werden. Wird Samba eingesetzt, ist beim Anschlussnamen \\<servername oder IP>\<Name des Druckers> anzugeben. Mit Übernehmen wird dem Drucker der neue Anschluss zugewiesen.

Warteschlange bearbeiten

Unter "Aufträge" kann man den Status der Druckaufträge des CUPS-Servers einsehen: Aufträge verwalten, neu starten, löschen, usw.

Status überwachen/verändern

Auf der Seite "Drucker" findet man eine Übersicht aller im System installierten Drucker. Hier kann man sehen, was die Drucker gerade machen, ob sie Aufträge abarbeiten oder ob Fehler vorliegen. Des Weiteren kann man alle wichtigen Aktionen bezüglich eines Druckers von hier aus starten: Testseiten ausdrucken, Drucker temporär deaktivieren, etc.

⚓︎

Druckerserver im Netzwerk

CUPS ist, wie in der Einleitung schon geschildert, als Client-/Server-System aufgebaut. Dadurch können Drucker im Netzwerk freigegeben werden und andere Rechner können diese Drucker nutzen.

In der Weboberfläche von CUPS findet sich auf der Seite "Verwaltung" unter "Server" Optionen, um diese Funktionen zu aktivieren:

⚓︎

Zugangskontrolle über ACLs

CUPS besitzt ein ausgeklügeltes System, mit dem man unter Einsatz von Access Control Lists (ACLs) festlegen kann, wer welche Rechte auf dem Server besitzt. Theoretisch kann man jedem einzelnen virtuellen Verzeichnis des CUPS-Servers unterschiedliche Rechte zuweisen, wobei der Zugriff für das eigentliche Drucken durch das Verzeichnis /printers/ repräsentiert wird. Existiert für ein Verzeichnis keine ACL, erbt es die ACL des übergeordneten Verzeichnisses.

In der Standardkonfiguration unter Ubuntu sind unterschiedliche Zugangsbeschränkungen für /admin/ (die Verwaltungsseiten), /admin/conf/ (der Speicherort der eigentlichen Konfigurationsdaten) und den ganzen Rest (/) vorgegeben. Im Allgemeinen kann man sich an diese sinnvolle Aufteilung halten.

Die ACLs werden in der ebenfalls in der Konfigurationsdatei des CUPS-Dienstes /etc/cups/cupsd.conf gesetzt und sehen auf einer frischen CUPS-Installation so aus:

# Restrict access to the server...
<Location />
  Order allow,deny
  Allow localhost
  Allow @LOCAL
</Location>
# Restrict access to the admin pages...
<Location /admin>
  Order allow,deny
  Allow localhost
</Location>
# Restrict access to configuration files...
<Location /admin/conf>
  AuthType Basic
  Require user @SYSTEM
  Order allow,deny
  Allow localhost
</Location>

Wie man sieht, steht jeder ACL-Satz in einem speziellen <Location ''dirname''> ... </Location>-Block. Ohne weitere Veränderungen bedeutet das, dass man aus dem gesamten lokalen Netz drucken, die Warteschlangen bearbeiten oder andere Dinge erledigen kann, die mit der bloßen Benutzung der Drucker zu tun haben. Der Zugriff auf die Verwaltungsseiten ist dagegen nur vom lokalen Rechner aus möglich, und um an der Konfiguration des Servers etwas zu verändern, muss man sich sogar authentifizieren und Mitglied der SystemGroup (lpadmin) sein, die durch @SYSTEM repräsentiert wird.

Möchte man nun den Zugriff auf das System auch vom Netzwerk aus freigeben, so kann man dies beispielsweise durch hinzufügen der ACL Allow @LOCAL erreichen. Dadurch können alle Rechner im lokalen Netzwerk auf den entsprechenden CUPS-Dienst zugreifen. @LOCAL ist dabei eine bequeme Abkürzung für den IP-Adressbereich, in dem der CUPS-Server steht. Bei Bedarf kann man stattdessen auch reale IP-Bereiche nennen.

Für jedes Verzeichnis können bei Bedarf unterschiedliche ACLs definiert werden. Um z.B. die Verwaltungsseiten von CUPS auch von anderen Rechnern des eigenen Netzwerks oder aus dem entfernten Netz 192.168.10.0/24 aus zu erreichen, fügt man im passenden Abschnitt folgende ACLs ein. Auf dieselbe Art kann man auch im <Location />-Bereich zusätzliche Netze eintragen, die den (oder die) Drucker benutzen dürfen.

# Restrict access to the admin pages...
<Location /admin>
  Order allow,deny
  Allow localhost
  Allow @LOCAL
  Allow 192.168.10.0/24
</Location>

Wer die Admin-Seiten des Servers nur bestimmten Benutzern zugänglich machen will, kann einfach die AuthType- und Require-Direktiven aus der /admin/conf-Location in den /admin-Bereich kopieren. Zu beachten ist allerdings, dass alle Bestandteile der ACLs zur Anwendung kommen. Die Einschränkungen durch Allow-Direktiven auf bestimmte Netzwerke kann man also auch durch Authentifizierung nicht umgehen. Es ist also nicht möglich, bspw. die Administration vom lokalen Host ohne und aus dem Netzwerk nur mit Authentifizierung zu erlauben.

Weitere Informationen zu den CUPS-ACLs findet man in der sehr ausführlichen Online-Hilfe 🇩🇪 der CUPS-Weboberfläche und in der Manpage man cupsd.conf.

Wenn man lediglich möchte, dass eine Administration über das Netzwerk möglich ist, kann man dies einfacher über cupsctl erreichen. Der Aufruf von

sudo cupsctl --remote-admin 

reicht dazu aus.

SSL-Verschlüsselung

Da teilweise sensible Daten übertragen werden, z.B. Adminpasswörter, unterstützt der CUPS-Server Datenverschlüsselung nach dem SSL-Standard. Diese lässt sich in den einzelnen Location-Sektionen über die Encryption-Direktive steuern:

<Location /path>
  ...
  Encryption Never
  Encryption IfRequested
  Encryption Required
</Location>

Man hat die Wahl zwischen

Bei einer Übertragung von Passwörtern wird aber standardmäßig immer auf Verschlüsselung umgeschaltet. Das ist zwar sinnvoll, kann aber zu Überraschungen führen, wenn man das erste Mal auf so eine Seite zugreift. Das SSL-Zertifikat wird nämlich erst dann erstellt, wenn es das erste Mal gebraucht wird, was zumindest auf älterer Hardware einige Zeit in Anspruch nehmen kann (in der es scheint, als hätte der Server sich aufgehängt).

Besonderheiten

Reine Clientinstallation

Voraussetzung ist ein Rechner, der netzwerkweit einen Drucker und Warteschlangen (Spool) zur Verfügung stellt. Dann reicht es, dass die Clienten direkt auf den vom Server bereitgestellten Drucker zugreifen können. Dazu sind auf den Clients nur diese Pakete nötig:

Befehl zum Installieren der Pakete:

sudo apt-get install cups-client cups-bsd 

Oder mit apturl installieren, Link: apt://cups-client,cups-bsd

Im Homeverzeichnis legt man dazu die Datei ~/.cups/client.conf an. Wenn der Ordner ~/.cups/ nicht existiert, muss er von Hand erstellt werden. In der Datei ist der Hostname oder die IP-Adresse des Druckerservers einzutragen. Alle freigegebenen Drucker stehen dann auf dem Client zur Verfügung. Beispiel:

ServerName Drucker-Server
ServerName 192.168.1.1

Accounting

CUPS kann unter gewissen Voraussetzungen protokollieren, welcher Benutzer wie viele Seiten gedruckt hat.

Die Logdatei wird in der Datei /etc/cups/cups-files.conf festgelegt und sieht ungefähr so aus:

HP4P otto 457 [26/Oct/2007:15:42:10 +0200] 1 1 - 192.168.0.70 Lieferschein
HP4P otto 457 [26/Oct/2007:15:42:10 +0200] 2 1 - 192.168.0.70 Packliste
HP4P anna 462 [26/Oct/2007:16:05:27 +0200] 1 1 - 192.168.0.70 Lieferschein
HP4P anna 463 [26/Oct/2007:16:06:10 +0200] 1 1 - 192.168.0.70 Packliste

Die Auswertung kann beispielsweise mit PrintAnalyze 🇬🇧 oder phpPrintAnalyzer 🇬🇧 geschehen. Dabei sollte man beachten, dass Logdateien üblicherweise rotiert, also automatisch aufgeräumt werden. Daher sollte man vermeiden, dass die page_log von logrotate rotiert wird.

Problembehebung

Parallelport aktivieren

Falls dieser nicht automatisch geladen bzw. aktiviert wird, erledigt man das von Hand:

sudo modprobe -v parport_pc 

Um den Vorgang nicht nach jedem Neustart wiederholen zu müssen, fügt man der Datei /etc/modules mit Root-Rechten die Zeile

parport_pc

hinzu.

Drucken mit HP-Laserdruckern sehr langsam

Falls der Ausdruck bei Einsatz eines Laserdruckers von HP an der parallelen Schnittstelle "LPT #1" (dev/lp0) sehr lange dauert, kann es sinnvoll sein, eine Änderung an /etc/cups/printers.conf vorzunehmen [2], um hplip zu umgehen. Dazu ist die Zeile

DeviceURI hp:/par/HP_Druckername?device=/dev/parport0

gegen

DeviceURI parallel:/dev/lp0

austauschen und Cups neu zu starten.

Große Dateien werden nicht gedruckt

Wenn sporadisch bestimmte, vor allem große Dateien nicht gedruckt werden können, kann es helfen im Druckmenü in den Eigenschaften des Druckers unter dem Reiter "Gerät" die Druckersprache auf 'Postscript (Level des Treibers)' zu ändern.

Druckerstatus „Filter failed“

Falls der Drucker als Fehlermeldung „Filter failed“ ausgibt, kann ein Löschen und neu Hinzufügen des Druckers mit anderem Namen helfen. Genaue Beschreibung und weitere Problemlösungen unter https://thenumberzero.blogspot.de/2014/02/how-to-fix-hp-printer-filter-failed.html.

Drucker pausiert willkürlich

Sollte ein USB-Drucker willkürlich beim Drucken pausieren, kann es an tlp liegen. Um den Drucker wieder normal benutzen zu können, muss die Drucker ID in die Blacklist von tlp eingetragen werden oder USB-Autosuspend deaktiviert werden. Hier geht es zur FAQ von TLP: https://linrunner.de/en/tlp/docs/tlp-configuration.html#usb

Drucker ID zur Blacklist hinzufügen:

  1. Drucker mit Computer verbinden

  2. ein Terminal öffnen

  3. Drucker-ID mit 'lsusb' herausfinden (sollte ca. so aussehen: Bus 003 Gerät 052: ID 04e8:3292 Samsung Electronics Co., Ltd Laserdrucker der Serie ML-1640)

  4. Konfigurationsdatei mit einem Texteditor öffnen (pluma, gedit, nano etc.) 'sudo -H pluma /etc/default/tlp'

  5. zu Zeile 178 gehen oder nach '#USB_BLACKLIST=' suchen

  6. entferne das # und die Zahlen zwischen den " und füge die Drucker-ID dort ein (sollte ca. so aussehen: USB_BLACKLIST="04e8:3292")

  7. die Datei speichern und neu starten