Drucken mit dem Ipad / Iphone auf einem Netzwerkdrucker

Das IPhone und das IPad bieten in einigen Apps auch die Funktion des Druckens an. So können Mails oder Fotos „mal eben schnell“ gedruckt werden. Theoretisch…
Denn notwendig dazu ist eigentlich ein „Airprint“-fähiger Drucker. Zwar breitet sich diese Funktion bei den Druckern mehr und mehr aus, auf vielen noch im Einsatz befindlichen Geräten ist dieses Protokoll allerdings noch nicht vorhanden. Die Zusatz-Apps die allenthalben angeboten werden (teilweise von den Herstellern selbst) bieten oft nur begrenzte Möglichkeiten (z.B. nur Druck von Fotos). Auch finde ich es irgendwie schöner, die eingebaute Druckfunktion zuverwenden.
Man kann dennoch drucken!
Allerdings benötigt man dazu einen zusätzlichen Rechner (real oder virtuell). Dieser stellt den/die Drucker dann im Netzwerk zur Verfügung, nimmt die Druckaufträge an, bereitet sie auf und sendet sie zum Drucker. Ich habe das hier bei mir auf dem Raspberry installiert. Der läuft sowieso (Pi-Hole) und ist noch nicht ausgelastet.
Einrichtung am Raspberry Pi:
Die notwendige „Airprint“-Funktionalität wird von „CUPS“ (Common Unix Printing System) bereitgestellt. Man meldet sich als „pi“ am Raspberry an. Obligatorisch sind dann die beiden Befehle zur Aktualisierung des Systems:

        sudo apt-get update
        sudo apt-get uprade

Jetzt kann man CUPS installieren:

sudo apt-get install cups

Das kann ein wenig dauern – aber dann ist der Raspberry eigentlich schon bereit zum Drucken. Allerdings könnte er so nur an lokal am Raspberry angeschlossenen Druckern drucken. Etwas mehr darf es schon sein – also los geht´s. Einige Drucker verwenden gerne Treiber aus dem Projekt „Gutenprint“. Daher ist es eine gute Idee, das gleich hier mit zu installieren:

sudo apt-get printer-driver-gutenprint

Die meisten CUPS-Einstellungen finden in der Datei /etc/cups/cupsd.conf statt. Diese muss man nun ein wenig anpassen:

sudo nano /etc/cups/cupsd.conf

Nur Feiglinge kopieren die Datei vorher um sie ggf. wieder im Originalzustand wiederherzustellen :-).In der Datei sucht man nun zuerst mal nach dem Eintrag

Listen localhost:631

und ändert ihn:

# Listen localhost:631

Durch das „#“ am Anfang der Zeile macht man diese „ungültig“. Nun fügt man eine Zeile ein, in der Folgendes stehen sollte:

Port 631

Cups ist nun über Port 631 erreichbar. In älteren Versionen von CUPS war die Weboberfläche noch nicht aktiviert, aktuell ist sie es – aber besser ist, man prüft es gleich (erleichtert die eventuelle Fehlersuche). Dazu in der Datei nach folgendem Eintrag suchen:

# Web interface setting...        
WebInterface Yes

Falls das Webinterface auf „No“ stehen sollte, kann man das hier gleich korrigieren.Es wäre ja nun auch ganz nützlich, wenn CUPS dann gleich im lokalen Netzwerk nach Druckern suchen würde. Das erreicht man, in dem man im nächsten Block die Zeile „BrowseAddress @LOCAL“ ergänzt. Sollte dann in etwa so aussehen:

        # Show shared printers on the local network.
        Browsing On
        BrowseLocalProtocols dnssd
        BrowseAddress @LOCAL

CUPS kommt ja aus der UNIX-Welt. Und dort lassen sich Berechtigungen meist sehr fein einstellen. So auch hier. Das bedeutet, dass man für fast alle Einstellungen (Drucker suchen, einrichten, ändern, verwalten…) Berechtigungen vergeben kann. „Dürfen neue Drucker nur von bestimmten Benutzern oder Benutzergruppen durchgeführt werden?“, „Dürfen Konfigurationsänderungen nur aus dem lokalen Netzwerk heraus durchgeführt werden?“ – oder da sogar nur von bestimmten IP-Adressen aus? In den meisten Fällen dürfte im Heimnetz eigentlich alles aus dem lokalen Heimnetz heraus erlaubt sein. Es hat ja auch jeder aus dem Heimnetz zugriff auf die Benutzeroberfläche der FritzBox (ob er sich dann dort anmelden kann ist etwas anderes…). Um das so einzustellen, ist nun etwas Fleißarbeit nötig. Man ergänzt nach jeder „Order allow,deny“-Zeile den Eintrag „Allow @local“. Zum Beispiel so:

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

Diese ganzen Änderungen Speicher man nun mit STRG-x (CTRL-x) und bestätigt die Änderungen mit „j“ oder „y“ (je nach Spracheinstellung).Es ist ja nun eingestellt, dass CUPS im lokalen Netwerk zur Verfügung steht und dort nach Druckern sucht. Auch dürfen die Einstellungen aus dem lokalen Netzwerk heraus über die Weboberfläche durchgeführt werden. Allerdings dürfen die Einstellungen nur von Benutzern durchgeführt werden, die der Gruppe „lpadmin“ angehören. Ich verzichte auf das Anlegen eines weiteren Benutzers; stattdessen füge ich den User „pi“ der Gruppe „lpadmin“ hinzu:

sudo usermod -aG lpadmin pi

Damit das nun alles funktioniert und man Drucker einrichten kann, sollte CUPS nun neu gestartet werden:

 sudo service cups restart

Nun darf man auch wieder mit der Maus arbeiten (falls alles geklappt hat). Im Webbrowser eingeben: https://192.168.178.254:631 Wichtig: Die IP (hier: 192.168.178.254) ist durch die IP des Pi vor Ort zu ersetzen. Und man sollte das „s“ nach „http“ nicht vergessen…
Falls alles geklappt hat (und man die „unsichere Webseite“ bestätigt oder zu den Ausnahmen hinzugefügt hat), sieht man ein schönes Menü:
Dort wählt man dann den Punkt „Drucker und Klassen hinzufügen“ aus – um folgendes zu sehen:

Hier wählt man dann „Drucker hinzufügen“ aus. Es kann einen Moment dauern – dann erscheinen die im lokalen Netzwerk gefundenen Drucker:

Manche Drucker tauchen mehrfach auf. Dies rührt daher, dass sie verschiedene Sprachen sprechen (Postscript, PCL5, PCL6..). Falls ein Drucker hier nicht gelistet wird, sollte man dies prüfen:

Klassiker: Ist der Drucker eingeschaltet?
Ist das LPR-Protokoll am Drucker aktiv? (z.B. bei einigen Canon-Druckern muss LPR erst über die Weboberfläche des Druckers aktiviert werden)

Darüber hinaus ist es eine gute Idee, auf den Webseiten der Hersteller nach Treibern für Linux zu suchen. Manche Drucker werden erst durch so einen Treiber für CUPS gefunden, andere können erst mit diesem Treiber vollumfänglich genutzt werden. Dazu gleich mehr, ich gehe erst mal davon aus, dass der Drucker erscheint und ausgewählt werden kann. Denn dann kann der Name des Druckers (unter dem er dann z.B. am Iphone auswählbar ist), der zu verwendende Treiber usw. ausgewählt werden. Gerade die Treiberinstallation ist interessant. CUPS stellt einige Treiber zur Verfügung. Diese Treiber sind auch nicht schlecht – aber mitunter fehlen spezielle, vom Drucker zur Verfügung gestellte Funktionen. Beispielsweise wollte mein Laserdrucker mit dem CUPS-Treiber nur in Graustufen aber nicht in Farbe drucken. Auf der Herstellerseite des Druckers habe ich aber einen Linux-Treiber gefunden, der auch eine „PPD-Datei“ beinhaltet hat. Diese PPD-Datei ist der eigentliche Treiber. Im Rahmen der Druckerinstallation kann man dann auch diese Datei zur Installation auswählen:

Nachdem ich diese Datei dann hier ausgewählt habe, druckt es nun auch in bunt. So weit, so gut. Es macht bestimmt Spaß, in den CUPS-Einstellungen zu experimentieren. Und auf dem Raspberry ist das System ja schlimmstenfalls auch schnell wieder neu installiert, so dass man hier erst mal gefahrlos experimentieren kann – sobald die eigentlich Druckfunktion eingerichtet und getestet ist.