Macberry Pi : utiliser un Raspberry Pi comme serveur AirPrint

Antoine Collin |

La semaine dernière, nous vous expliquions comment transformer un Raspberry Pi en « Macberry Pi » et comment installer un serveur Time Machine. Cette fois, nous allons mettre en place un serveur pour une autre technologie Apple, AirPrint.



Macberry Pi



AirPrint



AirPrint est une technologie apparue avec iOS 4.2 et intégrée ensuite dans OS X Lion. En simplifiant, AirPrint est un pilote universel pour les imprimantes et ce sont les constructeurs de matériel qui doivent rendre les imprimantes compatibles avec le pilote en question. S’il a fallu un peu de temps avant que la mayonnaise ne prenne, la majorité des imprimantes est désormais compatible AirPrint). Mais si jamais votre modèle n’est pas compatible avec la technologie d’Apple, il est possible d’utiliser le Raspberry Pi comme pont AirPrint.



Le matériel



Nous allons supposer que vous avez suivi les explications de notre premier article et qu’Avahi, l’implémentation open source de Bonjour (une technologie Apple) est déjà installée. La façon la plus simple de prendre en charge AirPrint est d’utiliser CUPS, une technologie open source qui provient de chez Apple et qui fonctionne parfaitement sous différents UNIX, dont la distribution GNU/Linux du Raspberry Pi. Nous avons testé le bon fonctionnement de la technologie avec une imprimante HP et une imprimante Brother, mais n'importe quel modèle pris en charge par CUPS devrait fonctionner.



La connexion entre l’imprimante et le Raspberry Pi n’a que peu d’importance : nous avons testé avec une imprimante reliée directement en USB au Raspberry Pi, une imprimante réseau classique et une imprimante reliée à une borne AirPort Express et la technologie a fonctionné dans les trois cas. Il est aussi a priori possible d’utiliser une imprimante partagée depuis une box internet, même si nous n’avons pas pu tester.



l’installation



Comme précédemment, il faut brancher le Raspberry Pi au réseau et s’y connecter via SSH.



ssh pi@MacberryPi.local


Première chose, installer les paquets nécessaires, dont CUPS.



sudo apt-get install cups-pdf python-cups cups-driver-gutenprint foomatic-db


Maintenant, nous allons modifier un fichier de configuration avec Nano. Pour rappel, il faut utiliser ^O pour sauver et ^X pour quitter.



sudo nano /etc/cups/cupsd.conf


Il faut commenter la ligne Listen localhost:631 en ajoutant un # devant et ajouter la ligne suivante : Port 631. Il faut ajouter la ligne ServerAlias * avant la première occurrence de <Location />. Il faut ajouter la ligne Allow @Local avant </Location> trois fois dans le fichier : une fois dans la zone qui commence par <Location />, une fois dans celle qui commence par <Location /admin> et une fois dans celle qui commence par <Location /admin/conf>.



Une fois les modifications effectuées, vous pouvez redémarrer le serveur CUPS avec la commande suivante.



sudo /etc/init.d/cups restart


CUPS a aussi besoin d’une petite modification de notre compte utilisateur, pi, pour imprimer.



sudo usermod -aG lpadmin pi


l’accès via Bonjour



Comme lors de la mise en place du serveur Time Machine, nous allons nous simplifier la vie en évitant de chercher l’IP du serveur AirPrint. Le plus simple est de créer un service avec Avahi qui va permettre au serveur de s’annoncer directement sur le réseau.



sudo nano /etc/avahi/services/cups.service


Il faut ensuite coller le code suivant dans le fichier et sauver. Il va permettre au serveur AirPrint et à sa page d’administration d’apparaître dans Safari.



<?xml version="1.0" standalone='no'?>
<!DOCTYPE service-group SYSTEM "avahi-service.dtd">
<service-group>
<name>CUPS Admin</name>
<service>
<type>_http._tcp</type>
<port>631</port>
<txt-record>path=/admin/</txt-record>
</service>
</service-group>


Il indique simplement que l’interface est accessible sur le port 631. Ensuite, il faut redémarrer Avahi.



sudo service avahi-daemon restart


La configuration de l’imprimante



Maintenant, nous allons abandonner la ligne de commande pendant quelques minutes et lancer Safari. Il faut se rendre sur l’interface d’administration de CUPS, normalement accessible via Bonjour.

Pour accéder aux signets Bonjour, il faut activer la technologie dans Safari (Préférences > Signets > Menu Signets > Inclure Bonjour) et ensuite aller dans Signets > Bonjour > Pages web.





La première chose à faire est de cocher la case Partager les imprimantes connectées à ce système.





Ensuite, il faut Ajouter une imprimante et sélectionner votre modèle s’il est détecté, ce qui était notre cas.







Il faut donner un nom à l’imprimante (sans espace) et bien cocher la case Partager cette imprimante. Dans la page suivante, il faut sélectionner le pilote de l’imprimante. Dans la majorité des cas, il n’y en aura qu’un seul, dans notre cas particulier, il y en avait deux.







Dernière étape, comme AirPrint ne permet pas beaucoup de réglages depuis les appareils iOS, il faut définir les options par défaut de l’imprimante.





l’activation d’AirPrint



Maintenant, retournons sur le Raspberry Pi en ligne de commande. Depuis iOS 6, Apple a effectué quelques modifications et nous allons donc préparer CUPS pour activer AirPrint.



sudo nano /usr/share/cups/mime/airprint.types


Il faut ajouter la ligne suivante dans le fichier et sauver (^O).



image/urf urf string(0,UNIRAST)


Même chose avec la commande suivante.



sudo nano /usr/share/cups/mime/airprint.convs


Il faut ajouter cette ligne et sauver.



image/urf application/pdf 100 pdftoraster


Maintenant, nous allons utiliser un petit script Python qui va activer AirPrint. Les commandes suivantes permettent de télécharger le script au bon endroit et de l’exécuter.



sudo mkdir /opt/airprint
cd /opt/airprint
sudo wget -O airprint-generate.py --no-check-certificate https://raw.github.com/tjfontaine/airprint-generate/master/airprint-generate.py
sudo chmod 755 airprint-generate.py
sudo ./airprint-generate.py -d /etc/avahi/services


Maintenant, il suffit de redémarrer le Raspberry Pi et AirPrint devrait fonctionner avec l’imprimante partagée.



sudo reboot


Ajout(s) et gestion d’imprimantes



Pour gérer l’imprimante, c’est assez simple : il suffit de se connecter sur l’interface d’administration de CUPS et de cliquer sur Gérer les Imprimantes. Une page va s’ouvrir, avec la possibilité de gérer les impressions en cours (annulation, etc.).





Si vous ajoutez une imprimante pour une raison ou pour une autre, il est nécessaire d’exécuter le script Python qui active AirPrint et de relancer le serveur CUPS, avec les commandes suivantes.



cd /opt/airprint
sudo ./airprint-generate.py -d /etc/avahi/services
sudo service avahi-daemon restart


Pour les possesseurs de Freebox, il est possible d’utiliser une imprimante partagée en utilisant le protocole ipp (Internet Printing Protocol) lors de l’ajout, avec l’adresse suivante socket://mafreebox.freebox.fr:9100.



Si ça ne fonctionne pas



Si jamais les essais d’impression échouent, il y a une solution dans certains cas : optimiser la gestion de la mémoire. Sur les Raspberry Pi modèle B de première génération, dotés de seulement 256 Mo de mémoire vive, le partage entre le système et la carte graphique peut parfois poser des soucis à CUPS. Le plus simple est d’allouer le maximum de mémoire au système (224 Mo) et le minimum au GPU (16 Mo). Pour modifier la gestion du partage, il faut taper la commande suivante.



sudo raspi-config


Il faut ensuite se rendre dans le menu memory_split et effectuer le changement le cas échéant, avant de redémarrer le Raspberry Pi. Sur les modèles B récents, dotés de 512 Mo de mémoire vive, le problème ne devrait pas se poser.



Imprimer depuis (Mac) OS X ou iOS



Normalement, une fois que toutes ces (longues) étapes sont passées, l’impression devrait fonctionner avec les appareils iOS compatibles et depuis OS X Lion ou OS X Mountain Lion. Les deux systèmes permettent en effet d’utiliser une imprimante AirPrint directement, sans pilotes, même si les pilotes proposés par Apple ou par le constructeur intègrent parfois plus d’options.



Nous nous rendons bien compte que tout ceci semble ardu pour les néophytes et pour ceux qui ne sont pas habitués aux systèmes GNU/Linux, mais ne prenez pas peur : il faut essentiellement être capable de faire un peu de copier/coller. La mise en place est en fait assez simple et — si Apple ne modifie pas la gestion d’AirPrint dans ses prochains systèmes — ne nécessite pas de maintenance particulière.

avatar joneskind | 
Magique ! Merci Macgé pour cette mine d'information !
avatar Tom.P | 
Super article encore ! Donc je peux en conclure qu'un RPi peut avoir plusieurs utilisation a la fois ? :p
avatar josselinco | 
Sinon, y'a Printopia pour 20$... :)
avatar golgoth | 
Merci pour toutes ces infos. Il y a eu pas mal de retours sur le côté média serveur. Allez-vous nous concocter un super article à ce sujet?
avatar Anonyme (non vérifié) | 
Manque plus que AirPlay et la je cracks!!!! En tous cas merci à l'association Raspery qui nous offres à travers son petit "PIE" de multiples fonctionnalités, et encore je pense qu'on est qu'au début.
avatar havox79 | 
@macinpod : Airplay est possible avec xbmc, il me semble que plex le fait aussi. C'est vraiment genial se petit pc pas chere.
avatar bortek | 
http://korben.info/idees-raspberry-pi.html http://engineer.john-whittington.co.uk/2012/08/airpi-diy-airplay-speakers/
avatar electarus | 
@josselinco : Sinon pour 10$ de plus t'as un ordi integré.
avatar misterbrown | 
Très utile pour bcp de monde je pense. A quand celui "utiliser un Rapsberry PI" en iPhone? ;)
avatar PiRMeZuR | 
Je lirai ça quand j'aurai le temps, mais ça m'a l'air long pour une fonctionnalité aussi basique. Mais si vous repartez d'un Pi neuf, c'est normal.
avatar lanceplaine | 
Finalement je vais peut être me mettre à m'acheter un petit PI. Ça pourrait servir à l'occasion :)
avatar Terence993 | 
Donc, si comprends bien, comme mon imprimante HP Photosmart C3180 n'est pas reprise dans la liste de CUPS, ça ne pourrait pas marcher ?
avatar Anonyme (non vérifié) | 
Ça remplace donc une borne AirPort ?
avatar jipe | 
Pour être sûr de bien comprendre ... si je met en oeuvre cette techno, le driver de mon imprimante n'est pas utilisé ? (j'ai une imprimante photo avec un driver forcément assez complexe ... choix de type de papier, choix de l'encre, profil, etc ...) Quelqu'un peut répondre à cette question ? merci par avance !
avatar guyotlo | 
Sinoń pour timemachine et le serveur imprimante, il y a la freebox 6
avatar bugman | 
Une tit' question pour ceux qui savent en passant : Pour une mame cabe c'est le bon plan c'te tiot machin ?
avatar Anonyme (non vérifié) | 
@jipe tu risques d'avoir des soucis pour utiliser toutes les options de ton driver. Je n'ai pas compris dans le détail les options de config et des scripts d'install, mais ce qu'il faut savoir c'est que : 1/ le Pi fait serveur AirPrint en déclarant le minimum d'option (ie PDF, de ce que j'ai lu de l'article) donc iOS génère un PDF envoyé au Pi 2/ le Pi fait serveur d'impression CUPS, qui imprime ton PDF et l'envoi vers l'imprimante au final (même si ton driver est supporté par CUPS, pas sûr que les options d'impressions que tu utilises d'habitude arrivent jusqu'à lui !!!) Évidemment Apple a prévu le coup pour toutes les options de drivers pour les imprimantes certifiées AirPrint mais c'est connu uniquement des constructeurs d'imprimantes et c'est sous NDA :-) Ceci dit c'est déjà sympa d'avoir un serveur AirPrint avec des options bureautiques de base, sans avoir un PC allumé et de se servir du Pi pour ça.
avatar Anonyme (non vérifié) | 
@Terence993 : Tu peux faire des essais de drivers similaires sous CUPS, surtout si ton imprimante est PCL ou PS (certes pour une imprimante photo ce n'est pas gagné :-). Si tu trouves dans un driver PhotoSmart Series xxxx ça vaut le coup d'essayer. Le but c'est de trouver un driver qui va transformer le PDF reçu d'iOS en qqch d'imprimable par ta Photo Smart. Bonne recherche !!
avatar Anonyme (non vérifié) | 
@ShowMeHowToLive : Ça marche avec les multifonctions sans problème (du moment qu'il est attaquable par CUPS en RAW, LPR, IPP). Ça ne bloque pas les ports scan réseau, le Pi récupère le fichier à imprimer de ton iOS, et se comporte comme n'importe quelle machine de ton réseau local qui imprime vers l'imprimante.
avatar mhidi | 
Merci macgé!! Est ce que vous pourriez faire un article pour AirPlay si c'est possible de le faire un raspberry pi ?
avatar rabbit | 
Il y a beaucoup plus simple ...et gratuit ( donationWare) : Handyprint (anciennement AirPrint Activator) http://www.netputing.com/handyprint/ Fonctionne parafaitement et configuré en 3 minutes ;-)
avatar N1kod | 
Merci pour ces 2 tutos. J'utilise depuis plus de 6 mois un raspberryPi avec Raspbmc(XBMC) sur ma tele et j'en suis extrêmement content.(modèle 256mo) le fait de lire ces 2 tutoriaux m'a donné envie de me relancer la dedans. j'ai donc commandé un model 512. objectifs : mini serveur web pour du test en local serveur Timecapsule/TimeMachine serveur de fichier samba server dlna/upnp (minidlna) serveur impression cups+airprint serveur mpd (music player daemond) + dac si ca marche mieux qu'il y a 8 mois avec mon dac (lègé problème de craquements avec mon dac...)... A voir ce que tout ca donne niveau charge ram/cpu sur le petit rasp en version 512 :) A savoir si ca remplace une borne airport express par exemple. non je ne pense pas. si vous avez déjà une borne et que vous voulez pas bidouiller. ce n'est pas la peine d 'essayer. Néanmoins, on peut implémenter airplay sur le raspbery pi sans problème mais il faut bien choisir la sortie son. le jack est tout pourrit. la meilleure solution est de sortir sur un dac ou en hdmi De même, il est hors de question de penser vouloir utiliser le raspberry pi comme un "PC". il a plus vocation à la réalisation de petit serveur sans interface graphique. Cas spécifique pour XBMC. Le circuit graphique qui décode le H264 en hardware sauve la vie de notre petit rasp.
avatar N1kod | 
@rabbit Ca à l'air bien mais si j ai bien compri, il faut un mac tout le temps allumé qui consomme beaucoup de watts et fait du bruit. Un rasp ça consomme 5w et c est fansless.
avatar Antoine Collin | 
D'abord, merci à tous pour vos retours. @tom.p : oui, on peut utiliser plusieurs services, même si on est parfois limité par le CPU. @ShowMeHowToLive : ça marche assez bien, oui, j'ai pas plus de problèmes qu'avec l'imprimante en AirPrint directement. @PiRMeZuR : Y a des trucs optionnels, comme Bonjour/Avahi, mais ça simplifie la vie. @Terence993 : A tester, y a des pilotes génériques, donc ça passe pour certaines fonctions. @TheOh! : pas du tout. Ca ne partage pas le réseau, ni rien. Et les bornes AirPort ne partagent pas en AirPrint, ça ne partage une imprimante que vers un Mac.
avatar Antoine Collin | 
@jipe : le pilote de base, non, mais si elle a un pilote compatible CUPS/Linux, ça peut passer. Après, AirPrint est assez limité questions fonctions. @guyotlo : en Time Machine, c'est pas fiable en cas de coupure de courant, et en partage d'imprimante, c'est pas AirPrint. @mhidi : c'est prévu @rabbit : avec un Mac, ici, pas besoin d'un gros ordinateur allumé.
avatar poco | 
Merci MacG pour ce second article assosciant le RBP avec le Mac. A quand un tuto pour faire du Pi un PABX avec Asterisk? Pour ouvrir le portail avec une carte RFID assosciée à une base Filemaker sur un Mac server etc... Ce RBP est vraiment une porte ouverte sur la création...
avatar Link1993 | 
Bonjour a tous ! dites, vous aussi vous avez 2 fois la même imprimante (alors que seul 1 imprimante a été configuré...) ? parce que en plus, je ne peux même pas la supprimer, la page de l'imprimante n'existe pas dans la page de configuration CUPS
avatar Anonyme (non vérifié) | 
Bonjour, J'ai suivi le tuto, mais je n arrive pas a faire fonctionner mon imprimante: Lexmark s400 Elle n'apparaît pas dans la liste des imprimantes, j ai donc pris le .ppd et ensuite lorsque je tente une page de test, j'ai cette erreur : "/usr/local/lexmark/v3/bin/printfilter failed" Que dois-je faire ?
avatar Anonyme (non vérifié) | 
Bonjour et merci pour ces tutos mais malheureusement je bloque. J'ai déjà eu un echec avec le tuto Time Machine et la reconnaissance afp. Maintenant quand je vais dans Signet --> Bonjour, je n'ai pas page web. Je sais bien que les problèmes se trouvent souvent entre le siege et le clavier mais là...
avatar ricobomb | 

Merci beaucoup pour ce Tuto ;-) j'ai pu ainsi réutiliser une ancienne imprimante HP laserJet P3015 qui n'avait plus d'interface RJ45 pour la brancher en usb sur un Raspberry Pi 4 and.. it works perfectly !

CONNEXION UTILISATEUR