Airprint mit einem Canon MX700

Mit der hier gezeigten Vorgehensweise ist es möglich einen beliebigen Drucker Airprintfähig zu machen.
Meine Voraussetzungen:

  1. NAS/Server 24/7 mit Debian Squeeze
  2. Canon MX700 über Lan angeschlossen
  3. iPhone/iPad

Ziel soll es sein, das wir von jedem Gerät im Netzwerk auf den Drucker zugreifen können. Zusätzlich wird ein PDF-Drucker bereitgestellt, um aus Dokumenten PDF’s zu erstellen.
Dazu werden die folgenden Schritte nötig sein.

  1. per apt-get oder aptitude die nötigen Pakete installieren
  2. Gutenprint Treiber aus den Quellen compilieren
  3. bjnp-cups aus dem svn compilieren
  4. Airprint funktionalität herstellen

1. Die benötigten Pakete installieren
Jetzt wird cups(1.4.4) mit den nötigen Abhänigkeiten installiert und auch gleich die Dev-Pakete, um später den Gutenprint Treiber(5.2.9) zu bauen.

aptitude install cups cups-pdf libcups2 libcups2-dev libcupsdriver1 libcupsdriver1-dev libcupsimage2 libcupsimage2-dev python python-cups subversion

2. Gutenprint Treiber compilieren
Bei Debian Squeeze ist der Gutenprint Treiber bis jetzt via Paketmanager nur in Version 5.2.6 erhältlich. Deshalb müssen wir ihn von Hand bauen.
Zuerst wird die aktuelle Version heruntergeladen und in ~/Downloads gespeichert. Link zur aktuellen Version
Jetzt wird das File nach /usr/local/src entpackt und in den neuen Ordner gewechselt.

tar xvf ~/Downloads/gutenprint* /usr/local/src
cd /usr/local/src/gutenprint-*

Jetzt wird mit dem Dreisatz das Paket gebaut. Zwischen den einzelnen Befehlen hat es bei meinem NAS schon mal 30min gedauert. Wenn ihr allerdings mehr Power habt, gehts schneller.

./configure
make clean && make
make install

3. bjnp-cups compilieren
Bei mir war es notwendig die Sourcen aus dem svn zu holen, weil der Entwickler kurzfristig einige wichtige Änderungen für den Canon MX700 eingeflegt hatte. Ohne diese, funktionierte der Drucker nicht. Dieses Tool findet den über Lan angeschlossenen Drucker und stellt ein entsprechendes Protokoll zur Verfügung. Sollte euer Drucker über USB angeschlossen sein, kann dieser Schritt übersprungen werden.

cd /usr/local/src
svn co svn://svn.code.sf.net/p/cups-bjnp/code/trunk bjnp-cups
cd bjnp-cups
autoreconf -if
./configure
make

Jetzt testen wir mit ./bjnp, ob der Netzwerkdrucker gefunden wird.

./bjnp

Ausgabe:

network bjnp://Drucker.fritz.box:8611 „Canon MX700 series“ „Canon MX700 series Drucker.fritz.box“ „MFG:Canon;CMD:BJL,BJRaster3,BSCCe,NCCe,PLI;SOJ:TXT01,BJNP2;MDL:MX700 series;CLS:PRINTER;DES:Canon MX700 series;VER:1.110;STA:10;HRI:OTH;MSI:DAT,E3;“

Jetzt kann der Drucker über das Webinterface konfiguriert und eingestellt werden. Nicht vergessen den PDF-Drucker gleich mit einzurichten. Wenn alles läuft, sollte auch eine Testseite gedruckt werden können. Bei der Konfiguration ist zu beachten, das der Drucker freigegeben werden sollte.

4. Airprint funktionalität herstellen
Die erforderlichen Dienste/Pakete installieren. (Python, Avahi und python-cups)

aptitude install python-cups python avahi-daemon avahi-discover

Ein Script, das von tjfontaine erstellt wurde herunterladen, was aus dem Cups-Drucker automatisch das Servicefile für Avahi erstellt. Jetzt sollte das Script gestartet werden und danach im Ordner die Avahi-Service-Datei(en) auftauchen.

mkdir /tmp/avahi-script
cd /tmp/avahi-script
wget --no-check-certificate https://github.com/tjfontaine/airprint-generate/raw/master/airprint-generate.py

Anschließend muß das Script an die richtige stelle kopiert werden.

cp ./*.service /etc/avahi/services/

Dienste noch neustarten

/etc/init.d/avahi-daemon restart
/etc/init.d/cups restart

So, im iDevice sollten jetzt ein oder mehrere Drucker gefunden werden.

Update iOS6.xx
Ab iOS 6.0 ist von Apple wieder etwas an den Aiprintprotokollen geändert worden. Hier muß einiges angepasst werden.

In den *.service Datei(en) nach pdl= suchen und einen Eintrag ,image/urf einfügen. Die Zeile sollte dann so wie die untere aussehen.

pdl=application/octet-stream,application/pdf,application/postscript,image/gif,image/jpeg,image/png,image/tiff,text/html,text/plain,application/vnd.cups-banner,application/vnd.cups-command,application/vnd.cups-pdf,application/vnd.cups-postscript,image/urf

Eine Datei /usr/share/cups/mime/apple.types mit folgendem Inhalt erstellen.

image/urf urf (0,UNIRAST)

Zum Schluss noch die Datei /usr/share/cups/mime/local.convs anlegen und diesen Inhalt einfügen.

image/urf application/vnd.cups-postscript 66 pdftops

Viel Spaß beim ausprobieren.