Raspberry Pi: Print-Server mit CUPS und AirPrint einrichten

Mit Raspbian Stretch geprüft.

CUPS (Common Unix Printing System) ist ein auf mehreren Standards basierendes Open-Source-Drucksystem, welches für Unix-artige Betriebssysteme entwickelt wurde und von Apple für das Betriebssystem macOS verwendet wird.
Mit CUPS kann man einen Drucker-Server (Print-Server) im Netzwerk betreiben, an dem einer oder mehrere USB-Drucker angeschlossen und dann im Netzwerk erreichbar sind. Als Hardware für den Print-Server eignet sich ein stromsparender Raspberry Pi besonders gut.

CUPS ermöglicht ab Version 2.2 den treiberlosen Druck auf Druckern, die IPP Everywhere oder Apple Airprint beherrschen. Man kann auf einem solchen Drucker sofort drucken, ohne sich mit der Treiberinstallation auf dem Client abmühen zu müssen. CUPS berücksichtigt dabei auch die Besonderheiten von Windows- und Apple-Netzwerken. So ist Apple AirPrint in CUPS integriert und funktioniert automatisch. Dadurch können auch iPhones und iPads im Netzwerk drucken. Für Windows-Clients wird ein Samba-Client verwendet.

Richtig interessant wird CUPS dann, wenn ein Drucker NICHT über die Airprint-Unterstützung verfügt. Dann kann man den Drucker lokal oder über das Netzwerk an CUPS anbinden. "Über das Netzwerk" bedeutet, dass die jeweiligen Drucker nicht direkt am Raspberry Pi angeschlossen sein müssen. CUPS kann sich mit den Druckern auch über das Netzwerk verbinden. So kann man die Airprint-Unterstützung ganz einfach nachrüsten, in dem man den entsprechend mit CUPS konfigurierten Raspberry Pi ins Netzwerk hängt.
CUPS unterhält eine Drucker-Warteschlange für die eingerichteten Drucker und bietet die Drucker per Airprint im Netzwerk an. Das hat den Vorteil, das Netzwerk-Drucker ohne Apple Airplay nachträglich per CUPS im Netzwerk erreichbar gemacht werden kann.
Wer etwas Zusatzaufwand betreiben möchte kann die Drucker auch per Google Cloud Printing (GCP) im Internet erreichbar machen und aus Google-Apps heraus drucken.

Fast alle Drucker werden von CUPS unterstützt. Insbesondere Drucker von HP werden optimal unterstützt. Aber auch mit Drucker von Samsung, Epson und Brother gibt es in der Regel keine Probleme. Für Modelle, die nicht unterstützt werden, gibt es generische Treiber, die Grundfunktionen zur Verfügung stellen. Nur spezielle Funktionen benötigen einen Treiber des Herstellers.

Aufgaben

  1. Installieren Sie CUPS und richten es anschließend ein.
  2. Installieren Sie den Drucker-Treiber, falls notwendig.
  3. Richten Sie den Drucker unter CUPS ein.
  4. Drucken Sie eine Datei auf der Kommandozeile aus.

Lösung: Installation und Einrichtung von CUPS

Zuerst führen wir ein Update der Paketlisten und ein Upgrade des Systems durch.

sudo apt-get update
sudo apt-get upgrade

Dann installieren wir CUPS.

sudo apt-get install cups

Je nach System kann der Installationsprozess mehrere Pakete mit über 150 MByte umfassen. So werden neben CUPS auch Teile von Samba, Avahi, Perl und verschiedene Bibliotheken installiert. Bis alles herunterladen und anschließend installiert ist, kann es einige Zeit dauern.

Nach dem alles installiert ist, müssen an der CUPS-Konfigurationsdatei einige Änderungen vorgenommen werden.

sudo nano /etc/cups/cupsd.conf

CUPS lauscht standardmäßig auf Port 631, allerdings nur auf dem Localhost. Wenn man über das Netzwerk darauf zugreifen möchte, muss man das zuerst freigeben.

Die Zeile:

Listen localhost:631

ändern in:

Port 631

Dann soll der Print-Server alle angeschlossenen Drucker im Netzwerk bekannt machen. Dazu fügen wir noch folgende Zeile ein:

BrowseAddress @LOCAL

Der Wert "BrowseAddress" gibt an, an welche Hosts Druckerinformationen "gebroadcastet" werden. "@LOCAL" steht in dem Fall für "alle" Hosts im lokal angeschlossenen Netzwerk.

Dann suchen Sie nach folgenden Zeilen und fügen jeweils ein "Allow @Local" ein.

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

"@LOCAL" steht für alle lokal am Druckserver angeschlossenen Netze. Davon ausgenommen sind Dial-Up-Verbindungen.

Nach den Änderungen muss man die Datei speichern und schließen: Strg + O, Return, Strg + X.

Dann müssen wir noch einen Benutzer der Benutzergruppe "lpadmin" hinzufügen. Das kann der Standard-Benutzer "pi" sein. Man kann dafür auch einen neuen Benutzer anlegen, sofern man das möchte. Das ist aber nicht zwingend erforderlich.

sudo usermod -aG lpadmin pi

Danach ist ein Restart des CUPS-Servers notwendig.

sudo service cups restart

Das ist immer dann notwendig, wenn die Konfigurationsdatei von CUPS geändert wurde.

Drucker-Unterstützung für Linux

Je nach Hersteller und Drucker-Modell ist die Installation von Drucker-Treibern mal mehr oder weniger einfach. Für gängige Modelle bringt CUPS bereits Drucker-Treiber mit. Aber eben nicht für alle. Am besten funktioniert es immer noch mit HP-Druckern. Aber auch für Samsung und Epson gibt es Drucker-Unterstützung für Linux-Betriebssysteme. Andere Hersteller sind hier nicht so freigiebig, weshalb man hier mehr Aufwand hat. Hier bedarf es anderer Vorgehensweisen, die sich von Modell zu Modell unterscheiden. Es empfiehlt sich für das entsprechende Drucker-Modell den richtigen Weg zu suchen.

Lösung: Drucker-Treiber installieren

HP stellt für seine Drucker Open-Source-Treiber zur Verfügung, die sich leicht installieren lassen. Das heißt, einen HP-Drucker bekommt man mit CUPS in der Regel immer zum Laufen.

Bei manchen HP-Druckern braucht man ein zusätzliches Paket. Den entsprechenden Hinweis bekommt man in CUPS, wenn man sich die Drucker anzeigen lässt: "requires proprietary plugin".

Die HP Linux Imaging and Printing Software (HPLIP) kann über apt-get installiert werden:

sudo apt-get install hplip

Anschließend kann die entsprechende Erweiterung für den Drucker installiert werden. Es empfiehlt sich, den Drucker vorher in CUPS einzurichten.

sudo hp-setup -i

Für manche Samsung-Modelle gibt es offene Drucker-Treiber, die in einem Paket zusammengefasst sind.

sudo apt-get install printer-driver-splix

Auch für Epson-Drucker gibt es Unterstützung.

sudo apt-get install printer-driver-escpr

Hinweis: Das Herunterladen und die Installation der Pakete kann etwas länger dauern. Also hier etwas Geduld mitbringen. Nachdem man Pakete oder Drucker-Treiber installiert hat, empfiehlt sich ein Restart von CUPS.

sudo service cups restart

Manchmal ist auch ein Reboot des Systems erforderlich.

Lösung: Drucker unter CUPS einrichten und verwalten

Hinweis: Man tut sich beim Einrichten von Druckern unter CUPS leichter, wenn die notwendigen Drucker-Treiber installiert sind.

Jetzt geht es darum, Drucker unter CUPS einzurichten. Dazu muss man den oder die Drucker am USB des Raspberry Pi jetzt anschließen.
Anschließend konfigurieren wir CUPS. Zu diesem Zweck bringt CUPS seinen eigenen Webserver mit und lässt sich bequem über ein Web-Interface konfigurieren. Dazu benötigen wir die IP-Adresse des Raspberry Pi, die zusammen mit der Portnummer "631" in die Browser-Adresszeile eingegeben werden muss.

https://192.168.1.2:631

Es erwartet einen das Web-Interface. Für die Einrichtung eines Druckers geht man wie folgt vor:

Unter dem Menüpunkt "Verwaltung" klickt man auf den Button "Drucker hinzufügen". In der Regel wird man nach Benutzername und Passwort gefragt. Und zwar von dem Benutzer, den man der Gruppe "lpadmin" hinzugefügt hat.

Drucker hinzufügen (Schritt 1/5)

Danach werden die angeschlossenen und erkannten Drucker aufgelistet (Lokale Drucker), aus der man den Drucker auswählt, den man einrichten möchte.
Achtung, hier werden alle erkannten Drucker aufgelistet, auch die, die man schon eingerichtet hat.

Drucker hinzufügen (Schritt 3/5)

Hier kann man den Drucker-Namen und die Beschreibung den eigenen Wünschen anpassen. Das muss man aber nicht. Im Prinzip kann man die Vorgabe so lassen, weil diese Bezeichnung meist korrekt ist und später auch auf den Client-Systemen verwendet wird.
Wichtig ist hier nur, einen Haken unter "Freigabe" zu setzen. Denn nur so wird dieser Drucker im Netzwerk verfügbar gemacht. Ist der Haken nicht gesetzt, dann ist der Drucker nur lokal nutzbar.

Drucker hinzufügen (Schritt 5/5)

Hier muss man den Hersteller bzw. die Marke auswählen und anschließend möglichst genau die Modellbezeichnung.
An dieser Stelle ist es hilfreich, wenn der Druckertreiber vorher installiert wurde. Wenn nicht, dann kann man das jetzt tun, CUPS neu starten und den Hersteller erneut auswählen. Dann wird die Liste mit den Modell-Bezeichnungen aktualisiert.

Nach dem wir das richtige Modell ausgewählt haben, müssen noch die Standard-Einstellungen festgelegt werden. Wobei man da in der Regel nichts ändern muss. Die Vorgaben sind zum Drucker-Modell schon passend vorausgewählt.

Nach dem der Drucker eingerichtet ist, kann man noch eine Testseite drucken. Dazu wählt man im Feld "Wartung" einfach "Testseite drucken" aus. Der Testdruck startet dann automatisch.

Lösung: Netzwerkdrucker auf einem Client einrichten

Grundsätzlich stehen die eingerichteten Drucker per AirPrint zum Beispiel für macOS, auf dem iPhone und iPad zur Verfügung. Unter Linux und Windows muss man die Drucker jeweils noch als Netzwerk-Drucker einrichten. Die Einrichtungsdialoge sind hier meist selbsterklärend.

Lösung: Drucken von der Konsole

Grundsätzlich kann man auch direkt von der Konsole aus einen Druckauftrag abschicken. Dafür braucht man den Druckernamen. Wenn man das nicht auswendig weiß, dann kann man in der Druckerliste nachsehen.

lpstat -a

Dort wählen wir für das folgende Kommando den Druckernamen aus und geben noch den Pfad einer Text-Datei an, die ausgedruckt werden soll.

lp –d <Druckernamen> </Pfad/zur/Textdatei>

Den Status für den aktuellen Druckauftrag, sofern das Dokument noch nicht fertig gedruckt ist, bekommt man so:

lpstat -p

Troubleshooting

Das Einrichten eines Druckers gelingt in der Regel ohne Probleme. Doch manchmal, je nach Hersteller und Druckermodell, hakt es dann doch. Um das Problem zu lösen empfiehlt sich eine Schritt-für-Schritt-Vorgehensweise, auch wenn das Problem vielleicht irgendwo dazwischen liegt.

Manchmal gibt auch die CUPS-Weboberfläche einen Hinweis. So braucht mancher HP-Drucker einen propritären Treiber, der sich über das hplix-Paket nachinstallieren lässt.

Zuerst klären wir, ob der oder die Drucker überhaupt am USB erkannt werden. Dazu benötigen wir die "usbutils", die eventuell nachinstalliert werden müssen.

sudo apt-get install usbutils

Ist das Paket "usbutils" installiert, dann prüfen wir, ob der oder die Drucker am USB erkannt wurden.

lsusb

Dieses Kommando ist mal mehr, mal weniger auskunftsfreudig. Typischerweise werden die Drucker mit dem Hersteller-Namen, vielleicht sogar mit der Modell-Bezeichnung ausgewiesen.
Es ist ein gutes Zeichen, wenn der oder die Drucker am USB erkannt werden. Wenn nicht, dann gibt es andere systembedingte Probleme. Eventuell hilft ein Blick in "dmesg".

dmesg

Die dort verzeichneten Fehlermeldung deuten auf Probleme hin, die Einzelfälle sind. Die können wir hier leider nicht auflösen. Eventuell hilft die Suche mit der Fehlermeldung bei der bevorzugten Suchmaschine.

Troubleshooting: Nach einer längeren Zeit druckt der Drucker über CUPS nicht mehr

CUPS hält den Drucker irgendwann an, wenn es zu diesem keinen Kontakt halten kann. Zum Beispiel, weil der Drucker längere Zeit ausgeschaltet ist, weil das USB-Kabel ausgesteckt wurde oder irgendetwas anderes mit dem USB ist.
Um das Problem zu lösen, geht man auf die CUPS-Weboberfläche. Hier klickt man im Bereich "Drucker" auf das betreffende Druckermodell und wählt im Auswahlfeld "Wartung" den Eintrag "Drucker starten". Damit das gelingt muss der Drucker eingeschaltet und mit dem Raspberry Pi verbunden sein.

Auf der Kommandozeile kann man sich zusätzlich noch den Drucker-Status anzeigen lassen.

lpstat -p -d

Status aller Drucker anzeigen:

lpstat -p

Druckaufträge anzeigen:

lpstat -o

Troubleshooting: Mehrere Drucker drucken nicht mehr

Nach dem Anschließen und der Einrichtung der Drucker kommt es zu Ausfällen. Das heißt, die eingerichteten Drucker drucken nicht mehr. Wenn die einzelnen Drucker über CUPS schon mal gedruckt haben und auch lokal angeschlossen funktionieren, hat das vermutlich mit dem Raspberry Pi zu tun. Dessen USB ist elektrisch gesehen leider mit der heisen Nadel gestrickt. Wenn mehrere USB-Geräte über jeweils eine lange Leitung mit dem Raspberry Pi verbunden sind, dann kommt es zu sporadischen Ausfällen, wobei der USB grundsätzlich zu funktionieren scheint. Nur die Geräte, die über ein längeres USB-Kabel verbunden sind, scheinen Probleme zu haben. Testweise kann man versuchen die einzelnen Drucker alleine zu betreiben.

In der Praxis ist keine Problemlösung bekannt. Kürzerere und besser geschirmte Kabel können das Problem lösen. Es muss aber nicht so sein.

Erweiterung: Google Cloud Print installieren

Das Drucker aus Google Apps und den Cloud-Anwendungen ist mit den üblichen Mitteln nicht möglich. Prinzipiell ist es hilfreich, wenn man über einen Netzwerk-fähigen Drucker verfügt, der die notwendige Google Cloud Print (GCP) Unterstützung mitbringt. Aber, was macht man mit älteren Druckern? Auf einem Raspberry Pi mit installiertem CUPS kann man zusätzlich noch den Cloud Print Connector von Google installieren, um die eingerichteten Drucker auch aus den Browser- und Smartphone-Apps von Google erreichbar zu machen.

Weitere verwandte Themen:

Teilen:

Produktempfehlungen

Alles was Sie über Netzwerke wissen müssen.

Netzwerktechnik-Fibel

Die Netzwerktechnik-Fibel ist ein Buch über die Grundlagen der Netzwerktechnik, Übertragungstechnik, TCP/IP, Dienste, Anwendungen und Netzwerk-Sicherheit.

Das will ich haben!

Alles was Sie über Netzwerke wissen müssen.

Netzwerktechnik-Fibel

Die Netzwerktechnik-Fibel ist ein Buch über die Grundlagen der Netzwerktechnik, Übertragungstechnik, TCP/IP, Dienste, Anwendungen und Netzwerk-Sicherheit.

Das will ich haben!