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.
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 [email protected]
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.