QNAP als AirPrint Server

(English version)

Nach dem ich vor einiger Zeit meinen Raspbery PI zu einem AirPrint Server umfunktioniert hatte, stellte ich mir die Frage, ob das nicht auch mit meinem QNAP funktioniert. Nach einigen Fehlversuchen ist es mir nun gelungen.

IMG_0026

Eines vorab, ich verwende einen Drucker, der bereits im Netzwerk eingebunden ist, jedoch nicht über AirPrint verfügt. Es sollte aber auch über einen Drucker, der per USB direkt am QNAP angeschlossen ist funktionieren. Da ich meinen Netzwerkdrucker nicht über das Werkseitig installierte CUPS ansprechen kann, habe ich CUPS über Optware neu installiert. Ob es auch mit dem vorhanden CUPS funktioniert kann ich  nicht sagen, denke aber eher nicht.

Vorbereitung für die Installation

Remote Zugang: Telnet oder SSH

Für die Installation ist ein, bereits konfigurierter, SSH oder Telnet Zugang zum QNAP erforderlich. Ist dieser nicht vorhanden, so kann er über das Web-Administration Interface, unter Netzwerkdienste → Telnet / SSH aktiviert werden. Nach erfolgreicher Einrichtung kann man sich über ein beliebiges Terminal  Programm am QNAP anmelden (Spotlight → “Terminal”).

Es ist zu empfehlen nur den Zugriff über SSH zu verwenden, da dieser die Daten verschlüsselt überträgt.

QPKG Paket Optware

Voraussetzung für die Installation ist das QPKG Paket Optware. Es lässt sich einfach aus dem QPKG-Center installieren. Hierzu nur im QNAP Web-Administrator Interface auf Anwendungen und dann auf QPKG Center klicken. Im QPKG Center den Reiter Verfügbare und den Unterpunkt mehr wählen, nach unten scrollen bis zum Eintrag Optware. Anschließend den Link installieren klicken und warten bis die Installation abgeschlossen ist. Danach kann Optware über die Eingabe “https://{QNAP-NAME}:8081/Optware/” in die Adressleiste eines beliebigen Browsers aufgerufen werden. Die Benutzung ist auf den admin Account des QNAPs beschränkt. Alternativ lässt sich Optware auch über die SSH-Konsole mit dem Befehl  ipkg verwenden. Diese Variante werde ich auch im weiteren Verlauf anwenden.

Eigene Skripte nach dem Systemstart ausführen

Nach eine Systemstart, muss dem QNAP mitgeteilt werden, dass es ein anderes CUPS verwenden soll und der AirPrint Dienst registriert werden muss. Dies wird über ein Skript realisiert. Hierfür können die beiden nachfolgenden Möglichkeiten verwendet werden:

QNAP CUPS ersetzen

Wenn noch nicht geschehen, ein Terminal öffnen und eine SSH-Verbindung mit dem QNAP herstellen. Danach die folgenden Packet installieren:

Abhängigkeiten werde automatisch mit installiert. Für neuere HP Drucker noch hplip ergänzen.

Nach der Installation muss die CUPS Konfigurationsdatei noch angepasst werden. Die Datei öffnen:

Und wie folgt anpassen:

Es sind nicht alle möglichen Parameter aufgeführt. Die Dokumentation für die weiteren Parameter ist hier zu finden: http://www.cups.org/documentation.php/doc-1.4/ref-cupsd-conf.html

Die originale CUPS Version von QNAP nun erst einmal stoppen:

Und die neue CUPS Version starten:

Im weiteren Verlauf wird dies ein Skript übernehmen. Jetzt einen Browser öffnen und die Adresse „http://{QNAP-NAME}:631“ eingeben. Erscheint die Seite wie in der Abbildung unten, hat es bis hier alles funktioniert.

qnap-cups-01

Drucker konfigurieren

Bevor wir nun zu AirPrint kommen, muss erst einmal der Drucker konfigurieren werden. In der soeben aufgerufenen Seite auf Administration klicken.

qnap-cups-02

Unter Server die Option „Share printers connected to this system“ aktivieren und Change Settings drücken. Danach auf Add Printer klicken um den neuen Drucker hinzuzufügen. (Die Seite hat bei mir einen Darstellungsfehler, was aber die Funktion nicht beeinträchtigt.)

Wie bereits erwähnt verwende ich einen Netzwerkdrucker und zwar einen HP Photosmart C5180. Ich wähle daher „LPD/LPR Host or Printer“ und spreche ihn über „socket://{PRINTER-NAME}“ an, mit den folgenden Einstellungen:

  • Name: HP-PhotosmartC5180
  • Description: HP-PhotosmartC5180
  • Location: Beliebig
  • Connection: socket://{PRINTER-NAME}
  • Sharing: „Share This Printer“ aktivieren

Anschließend den Druckerhersteller und das Modell auswählen, und mit Add Printer hinzufügen. Die Standard Einstellungen habe ich einfach so übernommen. Ich führe hier die Installation nicht expliziert auf, da die Einstellungen für jeden Hersteller und jedes Modell unterschiedlich ist.

Um sicher zugehen, dass alles Funktioniert, das Menü Maintenance auswählen und Print Test Page drücken. Der Drucker sollte nun eine Testseite ausspucken.

qnap-cups-03

Drucker als AirPint Gerät registrieren

Die Registrierung des Druckers lässt sich eigentlich recht einfach, über ein Python Skript realisieren. Aber nicht auf dem QNAP, denn es fehlt noch das Python CUPS Modul, das nicht in den Qptware-Quellen verfügbar ist. Dieses müssen wir zuerst einmal installieren. Dafür benötigen wir aber gcc und make, zusätzlich wird noch das Developer Paket cups-dev  benötigt (die Pakete können nach der Installation auch wieder entfernt werden).  Die Pakete werden wie folgt installiert:

Danach den Source von Python CUPS laden:

Enpacken und in das entpackte Verzeichnis wechseln:

Python Cups kompilieren und installieren:

Als nächstes benötigen wir ein Verzeichnis, in dem alles rund um AirPrint gespeichert wird. Ich habe es im QNAP Datenverzeichnis erstellt:

Das Python Skript, das den AirPrint Dienst registriert, aus dem Internet in dieses Verzeichnis laden:

Das Script nun aufrufen:

Es wird eine Fehlermeldung ausgegeben, dass ein Mine Type nicht verfügbar ist. Um diesen Fehler zu beheben, müssen zwei Dateien erzeugt werden:

  • Datei eins erstellen:

    Und den folgenden Inhalt einfügen:
  • Datei zwei erstellen:

    Und den folgenden Inhalt einfügen:

Damit die beiden Dateien geladen werden CUPS beenden:

Und wieder neu starten:

Danach des Python Skript erneut ausführen, es sollte keine Ausgabe mehr erscheinen:

Bei einer regulären Linux Distribution hätte man die Pfadangabe des Avahi Dienst Verzeichnisses verwendet. Beim QNAP ist dies allerdings nicht möglich, da das Verzeichnis „/etc/avahi/services/“ und dessen Inhalt bei einem Neustart, aus dem Flash-Speicher erzeugt wird. Die Dateien müssen nach einem Neustart in das Verzeichnis kopiert werden. Auch dies über nimmt das Init-Script.

AirPrint nach dem Systemstart laden

Nach einem Systemstart muss der QNAP eigenen CUPS Server gestoppt und durch den den Optware CUPS Server ersetzt werden. Dieser enthält einen fehlerhaften Pfad zu Ghostscript, was sich jedoch über einen symbolischen Link beheben lässt. Des weiteren muss des Avahi AirPrint Service registriert und der Avahi Server neu geladen werden. Um nicht bei jedem Neustart dies von Hand zu beheben, erstellen wir ein Init-Skript.

Den nachfolgenden Inhalt in die zuvor erstellte Datei kopieren.

Beim meinem QNAP lautet der Pfad zum Datenverzeichnis „/share/HDA_DATA“. Da dies bei den verschiedenen QNAP Modellen unterschiedlich ist, muss die Variable AIRPRINT_DIR in Zeile 3, entsprechend angepasst werden.

Das Skript noch ausführbar machen:

Wenn nicht die empfohlene Startmethode, wie in „Optware Init-Skripte nach Booten starten“ beschrieben, verwendet wird, kann das Script auch über   /opt/etc/init.d/X30airprint.sh start aus autorun.sh gestartet werden.

AirPrint testen

Entweder das QNAP neu booten und warten bis alles gestartet ist oder AirPrint über die Konsole starten:

Das iPhone oder iPad nehmen, eine druckbaren Inhalt aufrufen und auf Senden-Icon und Drucken drücken:

IMG_0249

Den Drucker wählen und auf Drucken drücken:

IMG_0247

 

Der Druckvorgang sollte nun beginnen:

IMG_0248

Das QNAP ist nun ein AirPrint Server!

Comments

  • qnap ts 219  aktuelle firmware (jänner 2015)

    beim Ausführen der befehle in deiner Anleitung wird bei mir die Ramdisk zu klein.

    habe 1x Raid 1 drinnen. Kann ich dir Ramdisk irgendwie beim starten vergrössen.

     

    gruss bert

    PS: habe ein sehr grosses Bedürfins den drucker von Ipad zu nutzen !

     

    Bert14. Januar 2015
  • Hallo Bert,
    ich habe das mit den Modifikationen am QNAP aufgegeben. Nach jedem Update der Firmware musste ich Änderungen vornehmen damit alles wieder läuft.
    Ich habe jetzt einen kleinen Raspberry Pi neben dem QNAP stehen, die relevanten Verzeichnisse sind per NFS eingebunden und alles wird auf dem QNAP gespeichert.
    AirPrint, Subversion Server und iTunes Server laufen auf dem Pi und wenn QNAP ein Update rausbringt habe ich keine Probleme mehr.
    Ich wollte eigentlich schon lange einen Anleitung dazu Posten, kam aber bislang noch nicht dazu.
    Gruß

    admin17. Januar 2015
  • Ich habe die gleichen Probleme wie Marcus S…

    Sobald ich CUPS starte ist die Hauptseite „HOME“ und alle anderen Seiten online.
    Allerdings bleibt das nur für ein paar Sekunden so…

    Kurz danach kann ich keine Seite mehr aufrufen!

    An was kann das liegen? Ich habe mir schon mehrere Nächte um die Ohren geschlagen – bekomme das Teil einfach nicht eingerichtet…

    Vielen Dank.

    Gruß
    Daniel

     

     

    Daniel16. März 2015
  • Hallo zusammen,

     

    ich habe AirPrint dank dieses Postes auf meinem QNAP-NAS TS-212 eingerichtet (ich habe zusätzlich die neueste Version von gutenprint installieren müssen), vielen dank für die Anleitung! Es funktioniert leider nicht wie es soll: Ich kann zwar von de CUPS-Oberfläche aus eine Testseite drucken, jedoch nicht von meinem iPad (eine iPhone habe ich nicht). Ich habe das Log-Level auf debug gesetzt und habe im Log folgendes gefunden:

     

    D [23/Apr/2015:11:43:12 +0200] cupsdAcceptClient: 10 from 192.168.1.37:631 (IPv4)
    D [23/Apr/2015:11:43:12 +0200] cupsdReadClient: 10 POST /printers/Canon_MX850_series HTTP/1.1
    D [23/Apr/2015:11:43:12 +0200] cupsdSetBusyState: Active clients
    D [23/Apr/2015:11:43:12 +0200] cupsdAuthorize: No authentication data provided.
    D [23/Apr/2015:11:43:12 +0200] cupsdReadClient: 10 2.0 Get-Printer-Attributes 5
    D [23/Apr/2015:11:43:12 +0200] Get-Printer-Attributes ipp://ts212.local.:631/printers/Canon_MX850_series
    D [23/Apr/2015:11:43:12 +0200] Returning IPP successful-ok for Get-Printer-Attributes (ipp://ts212.local.:631/printers/Canon_MX850_series) from 192.168.1.37
    D [23/Apr/2015:11:43:12 +0200] cupsdSetBusyState: Not busy
    D [23/Apr/2015:11:43:12 +0200] cupsdReadClient: 10 WAITING Closing on EOF
    D [23/Apr/2015:11:43:12 +0200] cupsdCloseClient: 10
    D [23/Apr/2015:11:43:17 +0200] cupsdAcceptClient: 10 from 192.168.1.37:631 (IPv4)
    D [23/Apr/2015:11:43:17 +0200] cupsdReadClient: 10 POST /printers/Canon_MX850_series HTTP/1.1
    D [23/Apr/2015:11:43:17 +0200] cupsdSetBusyState: Active clients
    D [23/Apr/2015:11:43:17 +0200] cupsdAuthorize: No authentication data provided.
    D [23/Apr/2015:11:43:17 +0200] cupsdReadClient: 10 2.0 Get-Printer-Attributes 6
    D [23/Apr/2015:11:43:17 +0200] Get-Printer-Attributes ipp://ts212.local.:631/printers/Canon_MX850_series
    D [23/Apr/2015:11:43:18 +0200] Returning IPP successful-ok for Get-Printer-Attributes (ipp://ts212.local.:631/printers/Canon_MX850_series) from 192.168.1.37
    D [23/Apr/2015:11:43:19 +0200] cupsdSetBusyState: Not busy
    D [23/Apr/2015:11:43:20 +0200] cupsdReadClient: 10 WAITING Closing on EOF
    D [23/Apr/2015:11:43:20 +0200] cupsdCloseClient: 10
    D [23/Apr/2015:11:43:20 +0200] cupsdAcceptClient: 10 from 192.168.1.37:631 (IPv4)
    D [23/Apr/2015:11:43:20 +0200] cupsdReadClient: 10 POST /printers/Canon_MX850_series HTTP/1.1
    D [23/Apr/2015:11:43:20 +0200] cupsdSetBusyState: Active clients
    D [23/Apr/2015:11:43:20 +0200] cupsdAuthorize: No authentication data provided.
    D [23/Apr/2015:11:43:20 +0200] cupsdReadClient: 10 2.0 Get-Printer-Attributes 7
    D [23/Apr/2015:11:43:20 +0200] Get-Printer-Attributes ipp://ts212.local.:631/printers/Canon_MX850_series
    D [23/Apr/2015:11:43:20 +0200] Returning IPP successful-ok for Get-Printer-Attributes (ipp://ts212.local.:631/printers/Canon_MX850_series) from 192.168.1.37
    D [23/Apr/2015:11:43:20 +0200] cupsdSetBusyState: Not busy
    D [23/Apr/2015:11:43:20 +0200] cupsdReadClient: 10 WAITING Closing on EOF
    D [23/Apr/2015:11:43:20 +0200] cupsdCloseClient: 10
    D [23/Apr/2015:11:43:25 +0200] cupsdAcceptClient: 10 from 192.168.1.37:631 (IPv4)
    D [23/Apr/2015:11:43:25 +0200] cupsdReadClient: 10 POST /printers/Canon_MX850_series HTTP/1.1
    D [23/Apr/2015:11:43:25 +0200] cupsdSetBusyState: Active clients
    D [23/Apr/2015:11:43:25 +0200] cupsdAuthorize: No authentication data provided.
    D [23/Apr/2015:11:43:25 +0200] cupsdReadClient: 10 2.0 Get-Printer-Attributes 8
    D [23/Apr/2015:11:43:25 +0200] Get-Printer-Attributes ipp://ts212.local.:631/printers/Canon_MX850_series
    D [23/Apr/2015:11:43:25 +0200] Returning IPP successful-ok for Get-Printer-Attributes (ipp://ts212.local.:631/printers/Canon_MX850_series) from 192.168.1.37
    D [23/Apr/2015:11:43:27 +0200] cupsdSetBusyState: Not busy
    D [23/Apr/2015:11:43:27 +0200] cupsdReadClient: 10 WAITING Closing on EOF
    D [23/Apr/2015:11:43:27 +0200] cupsdCloseClient: 10

     

    Kann mir bitte jemand sagen warum ich nicht per AirPrint drucken kann, oder zumindest weitere Tipps zum Debuggen geben?

     

    Vielen Dank und viele Grüße

    unit

    unit23. April 2015
  • Hallo noch mal,

     

    leider habe ich bezüglich des Nicht-Drucken-Wollens noch keine Besserung. Ideen, Tipps, usw. sind also weiterhin willkommen! Ich hatte das Problem, dass mein QNAP nicht in den HDD-Standby (HDD spin off) gehen wollte. Schuld war das Log-Level: Ich habe es von ‚debug‘ auf ‚warn‘ gesetzt und siehe da, die HDDs gehen wieder in den Standby nach 30 Minuten.

     

    Zum Problem, dass die CUPS-Adminoberfläche nicht erreichbar ist: Versucht in der Anleitung bei „Die originale CUPS Version von QNAP nun erst einmal stoppen:“ nicht den dort angegebenen Befehl, sondern ‚killall cupsd‘ einzugeben (um die QNAP-Version von CUPS zu stoppen). Danach wie in der Anleitung mit ‚/opt/sbin/cupsd -c /opt/etc/cups/cupsd.conf‘ die neu installierte CUPS-Version starten und die Adminoberfläche sollte funktionieren. Bitte berichten, ob es bei euch auch hilft!

     

    Gruß

    unit

    unit27. April 2015
  • PS: Ich meinte natürlich das Log-Level von CUPS, zu finden in der CUPS-Konfigurationsdatei als Variable ‚LogLevel‘ oder auf der Adminoberfläche unter ‚Server Settings:‘, dort das Häkchen vor ‚Save debugging information for troubleshooting‘ sollte nicht gesetzt sein.

    unit27. April 2015
Kommentare sind geschlossen