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. 

Nackt oder angezogen?

Nachdem ja nun mein Raspberry als „Pi-Hole“ im Einsatz ist, brauche ich nun Ersatz für weitere Experimente. Für die, die nicht wissen, wie so ein „Pi“ aussieht wenn man in nach der Bestellung aus dem Kartönchen holt, hier mal ein Bild vom nackten Pi:

Foto einer Platine (Raspberry Pi)
Der nackte Raspberry Pi

Und wenn man ihn dann in ein Gehäuse eingebaut hat (bei diesem Gehäuse eher: Wenn man das Gehäuse um den Pi herum aufgebaut hat…), kann es so aussehen:

Foto eines im Gehäuse eingebauten Raspberry Pi
Der eingebaute Raspberry Pi

 

„PI-HOLE“ – oder: Wie man es schafft, das Internet zu Hause ein wenig schöner zu machen

Erstaunlich, was sich in meinem Heimnetzwerk nun so alles tummelt. Neben „den üblichen Verdächtigen“, also PC / Notebook / Tablett / Smartphone sind natürlich auch SAT-Receiver (…wegen HBBTV…), Verstärker (…wegen Airplay…) und noch ein paar andere Geräte aktiv. Klar, über die FritzBox sehe ich zumindest, welche Geräte im Netzwerk zu finden sind. Für diese könnte ich dort auch verschiedene Profile hinterlegen und diese pflegen. Aber… so richtig umfangreiche Black- bzw. Whitelists ließen sich da nur unschön pflegen. Schöner wäre es, wenn man da „was“ hätte, was automatisch und zuverlässig funktioniert – und auch etwas auskunftsfreudig ist. Denn es würde mich schon interessieren, wohin die jeweiligen Geräte sich verbinden möchten.

Wie funktioniert das überhaupt?
Um im Internet irgendwo hinzukommen, werden meist „URL“ verwendet (z.B. www.mozer.de). Mit diesen Namen kommt man aber nicht weit – es ist erst „die halbe Miete“. Denn: Die Rechner (oder andere Endgeräte) bauen in Wirklichkeit keine Verbindung zu www.mozer.de auf – sondern z.B. zu einer so genannten IP-Adresse – z.B. zu 81.169.145.160. Aber… woher kennt der Rechner diese Ziel-IP-Adresse? Er fragt dazu den sogenannten „Domain Name Server“ (DNS). Er fragt also nach: „Wie lautet die IP zu dem Namen www.mozer.de?“ und erhält dann z.B. die Antwort „81.169.145.160“. Erst dann versucht der Rechner die Verbindung dorthin herzustellen.
Und genau da setzt „Pi-Hole“ an: Es steht im lokalen Netzwerk als DNS-Server zur Verfügung. Alle Geräte im Heimnetzwerk fragen nun bei „Pi-Hole“ nach den IP-Adressen. Und „Pi-Hole“ lässt es zu, mehrere Black- bzw. Whitelists zu hinterlegen. Das sind Listen, in denen Namen (z.B. www.uebleseite.de) hinterlegt sind, die dann grundsätzlich verboten („Black“) oder eben erlaubt („White“) sind. Es gibt einige vorbereitete Listen die ständig aktualisiert werden und in denen sehr viele Werbungs- oder Trackingadressen hinterlegt sind. Sollte „Pi-Hole“ nun nach einer Adresse gefragt werden, die auf einer Blacklist zu finden ist, wird als IP-Adresse eben NICHT die wirkliche IP-Adresse, sondern die des „Pi-Hole“ zurückgegeben. Und so wird dann keine Werbung zurückgeliefert (oder nicht „getrackt“).

Was hat man davon?
Erstens: Grundsätzlich weniger Werbung. Ja, das ist teilweise
verwerflich, denn gerade die Betreiber kleinerer Seiten sind auf die Einnahmen durch die Werbung angewiesen. Andererseits sind oft genau diese Betreiber technisch nicht unbedingt in der Lage, die eingeblendete Werbung zu überwachen. Und es gibt durchaus Beispiele, in denen Rechner durch „Drive-By“-Infektionen plötzlich mit Malware infiziert wurden.
Zweitens: Weniger „Tracking“. So wird z.B. Google Analytics blockiert. Das
finden zwar die Marketingabteilungen doof – aber ich brauche das für meinen puren Selbstschutz. Ich habe schon Wünsche und Bedürfnisse genug – da brauche ich nicht auch noch zielgerichtete Werbung, die bei mir noch mehr Unzufriedenheit auslöst.
Drittens: Wer will hier „nach Hause“ telefonieren? Gerade wenn ich mir so
ansehe, zu welchen Stellen mein Fernseher sich verbindet werde ich ein wenig stutzig. Klar, für HBBTV und YouTube wird ein wenig Internet benötigt. Aber… zu was der ganze Rest? Das – und ein paar andere Geräte – will ich mir mal näher ansehen.

Wie geht´s?
Man nehme einen Raspberry Pi. Die Dinger sind nicht teuer und brauchen wenig Strom. Letztlich ist so ein „Pi“ ein vollwertiger Linux-Rechner – nur eben schön klein. Man benötigt eine Mikro-SD-Karte, um das Betriebssystem darauf zu installieren (mache ich hier unter Windows). Das Betriebssystem für den „Pi“ heißt aktuell „Raspbian Stretch“. Da ich den „Pi“ vielleicht auch noch anders nutzen möchte, habe ich mich für die volle Version (Raspbian Stretch with desktop) entschieden (https://www.raspberrypi.org/downloads/raspbian/). Nachdem der Download ewig zu dauern schien – und auch als „Torrent“ angeboten wurde, habe ich noch den „Deluge Torrent Client“ installiert (https://deluge-torrent.org/). Er scheint frei von nerviger Werbung zu sein. Mit ihm war es sehr flott möglich, die 1,7 GB herunterzuladen. Dieses „Image“ kann man dann „Etcher“ (https://etcher.io/) auf eine SD-Karte schreiben. Sobald „Etcher“ dann fertig ist (man sollte sich hier nicht über lustige Windows-Fehlermeldungen des Explorers wundern – auf der SD-Karte werden Partitionen angelegt, mit denen Windows eben nichts anfangen kann) legt man die SD-Karte in den „Pi“ und schaltet ihn an. Die Grundeinstellungen des „Pi“ mache ich gerne direkt am Gerät selbst (also mit am „Pi“ angeschlossenem Bildschirm und Tastatur). Hier kann man dann auch schön einstellen, über welche Methoden der „Pi“ dann zu erreichen ist (SSH, VNC…). Die weitere Einrichtung mache ich dann bequem vom großen Rechner aus, von dem ich über SSH auf den „Pi“ zugreife. Früher benötigte man dazu einen zusätzlichen SSH-Client (z.B. Putty). Seit irgendeiner WIN10-Version geht es auch direkt unter Windows. Beim gerade aktuellen Release 1803 von Windows 10 ist der SSH-Client sogar dem Beta-Stadium entwachsen. Nur… wo findet man den? Nein… nicht etwa in der Systemsteuerung unter „Programme und Features“ – sondern in den PC-Einstellungen (…das Zahnrad…), dort unter „Apps“. Hier dann „Optionale Features Verwalten“ auswählen und schon wird der OpenSSH-Client zur Installation angeboten. Mit diesem Client verbindet man sich dann mit dem „Pi“. Dort dann erst mal die Standard-Befehle zum Update / Upgrade:

sudo apt-get update
sudo apt-get upgrade

Nun kann man „Pi-Hole“ installieren:

curl -sSL https://install.pi-hole.net | bash

Während der Installation werden einige Fragen gestellt. In den meisten Fällen ist der Default-Wert richtig, so dass man einfach mit Enter bestätigen kann. An einer Stelle jedoch wird man nach der IP-Adresse des Übergeordneten DNS-Servers gefragt (denn… „Pi-Hole“ muss die Anfrage nach der Prüfung ja weiterreichen). Hier kann man die IP der FritzBox eingeben – oder gleich einen anderen DNS-Server verwenden (ChaosComputerClub, Quad9 oder andere). Am Ende der Installation erscheint ein Hinweisfenster. Dort ist das generierte Admin-Kennwort für die Pflege der Benutzeroberfläche zu lesen. Erstens hat es bei mir sowieso nicht funktioniert – und zweitens… warum nicht gleich ein persönliches Kennwort setzen? Das macht man mit:

sudo pihole -a -p

„Pi-Hole” ist nun im lokalen Netz zu erreichen. Wenn man „Pi-Hole“ die IP 192.168.178.99 zugewiesen hat, gibt man im Internetbrowser also „192.168.178.99/admin“ ein. Und sollte so was sehen:

Über den Button „Login“ kann man sich dann anmelden und einige Dinge einstellen. Die wichtigsten Block-Lists sind bereits hinterlegt und aktiv. Nun muss man sich noch darum kümmern, dass die DNS-Anfragen auch wirklich bei „Pi-Hole“ landen (und nicht mehr direkt z.B. von der FritzBox verarbeitet werden). Klar, man kann in den Netzwerkeinstellungen der jeweiligen Endgeräte die IP des „Pi-Hole“-Rechners eintragen. Aber das wäre – finde ich – zu viel Arbeit. Wieder einmal finde ich die FritzBox toll! Denn hier kann man in den Netzwerkeinstellungen der FritzBox DIREKT eine lokale IP für den DNS-Server für Anfragen aus dem eigenen Netz eintragen. Das bedeutet, dass jedes Gerät, dass seine IP-Einstellungen über DHCP erhält, automatisch „Pi-Hole“ verwenden wird! Und: JA! Es funktioniert. Und nun füllt sich das Query-Log und es macht Spaß, einfach mal zuzusehen, was sich da so alles tut.

Fazit
Aktuell habe ich noch keine Einschränkungen feststellen können. SEHR positiv fällt mir auf, dass einige Webseiten nun ganz frei von Werbung sind. Im Gegensatz zu „Ad-Blockern“ scheint diese Lösung besser zu sein. Denn einige Seiten, die sich normalerweise mit einem im Browser aktiven AdBlocker nicht aufrufen lassen, laufen mit dem „Pi-Hole“ einwandfrei (…nur eben ohne Werbung…). Also… aktuell möchte ich nicht mehr darauf verzichten!