Pour imprimer des documents depuis une machine Apple tournant sous iOS comme par exemple un iPad ou un iPhone sur une imprimante partagée via un serveur d’impression CUPS installé sur un Raspberry Pi, il suffit de quelques opérations simples qui ne prennent que quelques minutes.

« Ce serveur ne manque pas d’air, mais il est loin de faire bonne impression ! » Source : Library of Congress.
Pour le faire, j’ai été aidé, entre autres ressources, par ce billet publié sur le blog Raspberry Pi Home Server.
Qu’est-ce qu’AirPrint ?
AirPrint est une fonction des systèmes d’exploitation conçus par Apple qui permet d’imprimer au travers d’un réseau sans-fil (WiFi) sur des imprimantes compatibles avec AirPrint ou sur des imprimantes non-compatibles via une machine tournant sous Microsoft Windows, Linux ou Apple OS X. AirPrint ne nécessite pas de pilotes propres à l’imprimante utilisée. Comme AirPrint se connecte à l’imprimante uniquement via un réseau WiFi, il requiert un routeur WiFi (ce que sont aujourd’hui la plupart des box ADSL chez les principaux fournisseurs d’accès à l’internet).
AirPrint permet donc d’imprimer sans-fil depuis un iPad, un iPhone récent, un iPod Touch ou encore un Mac tournant sous OS X. Normalement, il faut une imprimante compatible avec AirPrint, mais si l’on en a pas, on peut déguiser à l’intention de ces appareils utilisant AirPrint et connectés au réseau local en WiFi une imprimante ajoutée à un serveur CUPS en imprimante compatible avec AirPrint, en configurant une annonce de service correspondante dans Avahi.
Prérequis pour ajouter le support d’AirPrint à CUPS
L’installation décrite ici a été réalisée dans les conditions suivantes :
- un Raspberry Pi modèle B tournant sous Arch Linux ARM, connecté au réseau local (Ethernet ou WiFi),
- configuré comme serveur d’impression CUPS (l’installation et la configuration de CUPS sous Arch Linux ARM font l’objet d’un billet précédent),
- et une imprimante (HP LaserJet P1006) connectée en USB à la carte Raspberry Pi et partagée sur le réseau local via le serveur d’impression sous CUPS.
L’impression depuis iOS a été testée avec succès avec une tablette iPad tournant sous iOS 7.
Ajout du support d’AirPrint à CUPS
Avant de commencer, il faut s’assurer que deux éléments sont installés sur la carte Raspberry Pi :
- Le démon Avahi (installer les paquets avahi et nss-mdns).
- Le module CUPS de python (sous Arch Linux, il faut installer le paquet pycups).
Si ce n’est pas le cas, on les installe avec les droits d’administrateur (en tant que root ou via la commande sudo) :
# pacman -Sy avahi nss-mdns pycups
On complète la configuration de CUPS en ajoutant deux fichiers dans /usr/share/cups/mime/
:
# echo "image/urf urf string(0,UNIRAST<00>)" > /usr/share/cups/mime/airprint.types
# echo "image/urf application/pdf 100 pdftoraster" > /usr/share/cups/mime/airprint.convs
et on redémarre CUPS :
# systemctl restart cups
On peut ensuite télécharger un script en python qui va se charger de créer le déguisement de CUPS en AirPrint avec la complicité d’Avahi :
# wget -O airprint-generate.py --no-check-certificate https://raw.github.com/tjfontaine/airprint-generate/master/airprint-generate.py
Ce script produit pour chaque imprimante ajoutée à CUPS un fichier AirPrint[…].service. Il faut ensuite placer ces fichiers dans /etc/avahi/services
:
# cp AirPrint*.service /etc/avahi/services/
Pour finir, on redémarre le démon Avahi puis le serveur CUPS :
# systemctl restart avahi-daemon cups
Normalement, les périphériques Apple qui sont compatibles AirPrint doivent désormais prendre les imprimantes ajoutées dans CUPS pour des imprimantes compatibles AirPrint et y envoyer des impressions.
Ping : Transformer un Raspberry Pi en serveur d’impression | Carnet