Le Blog de Thomas

Logiciels libres, Linux embarqué, et autres ...

Formation Linux embarqué à Toulouse

La magie ou l'horreur de CUPS


CUPS, le machin d'impression sous GNU/Linux, c'est vraiment le truc qui me donne mal au cerveau rien que de penser qu'il faille y toucher.

Bref, je voulais remettre en route mon imprimante HP, sachant que j'avais déjà une imprimante Canon installée et configurée. Mes deux imprimantes sont connectées via USB à mon serveur, et je voulais que les autres ordinateurs y aient accès via le serveur. Ceci se fait "relativement" simplement, mais un point me choquait: pourquoi sur toutes les bécanes clientes il fallait sélectionner la marque et le modèle de l'imprimante (ce qui permet de choisir le fichier PPD), alors que le serveur sait très bien tout ça. J'ai donc creusé un peu cette mystérieuse affaire.

Dans le fil de l'histoire, je suis tombé sur doc de KDE qui explique plutôt bien ce qu'est le Postscript, le RIP, où interviennent CUPS, les PPDs et autres filtres. Une bonne introduction, en français qui plus est. Une fois ces idées bien remises en places, me voilà en quête de la documentation de CUPS. Sur le site Web, il y a plein de bordel, mais je n'ai pas trouvé de doc complète sur l'aspect "Utilisateur". Ah bah, oui, forcément, ils vendent $45.00 un bouquin qui explique tout...

Un peu plus tard, au fil de mes recherches, je tombe sur un texte d'Eric Raymond qui résume plutôt bien l'impression que ça peut faire de toucher à un truc comme CUPS.

Bref, au détour de tout ça, j'arrive quand même à découvrir que CUPS supporte le protocole IPP, un protocole normalisé par l'IETF avec des RFCs et tout ce qui va bien. Et d'après la doc de KDE, ce protocole permet justement de récupérer le fichier PPD décrivant une imprimante, évitant d'avoir à installer un pilote sur tous les postes clients. Voilà qui semble intéressant. Malheureusement, lorsque j'essaie d'ajouter une imprimante réseau via l'interface Web de CUPS ou via gnome-cups-manager avec une adresse du genre ipp://gate:631/printers/hp, il me demande invariablement la marque et le modèle de l'imprimante. Saleté.

Un peu plus tard, je découvre la commande lpinfo, qui permet d'interroger un serveur d'impression:
thomas@skim# lpinfo -h gate:631 -v
network socket
network beh
direct usb://Canon/S300
direct hp:/usb/DeskJet_930C?serial=CN0CN1S1J2JJ
network http
network ipp
network lpd
direct parallel:/dev/lp0
direct canon:/dev/lp0
direct epson:/dev/lp0
network smb


Magique: depuis ma machine cliente, j'arrive à interroger le serveur pour lister les imprimantes qui sont disponibles... Mais ça ne m'avance pas beaucoup.

Puis, au détour d'un Wiki, je découvre que normalement, le PPD peut-être récupéré très simplement par HTTP en récupérant le fichier à l'adresse http://hote:port/printers/nom_imprimante.ppd, chez moi http://gate:631/printers/hp.ppd. Et effectivement, ça marche ! Alors, si c'est aussi simple, pourquoi l'interface Web ou Gnome de CUPS ne le récupèrent pas ?

Si c'est l'interface qui est merdique, alors passons en ligne de commande. J'édites donc le fichier /etc/cups/printers.conf sur la machine cliente et j'ajoute une section Printer en donnant l'adresse IPP qui va bien. Et là, effectivement, comme par magie, ça fonctionne sans donner le PPD ni le modèle de l'imprimante. C'est pas beau la vie ?

Bon, dans tout ça, il faudrait maintenant comprendre pourquoi 1) l'outil ne permet pas de "voir" les imprimantes du réseau et surtout 2) pourquoi il ne sait pas récupérer le PPD tout seul, comme un grand. Enfin en attendant, les deux imprimantes marchent et sont faciles à configurer sur tous les postes clients une fois que c'est fait sur le serveur.

Reste quand même des questions: quand le PPD est récupéré sur la machine cliente, est-ce que c'est la machine cliente qui fait la transformation Postscript vers le langage tout propriétaire bizarre de l'imprimante ? Si oui, comment fait la machine cliente pour exécuter tous les filtres (programmes exécutables) qui sont nécessaires pour le PPD ? Et si c'est le serveur qui fait la transformation, comment fait le client pour envoyer les paramètres listés dans le PPD (contraste, luminosité, qualité, etc..) ? Mystère et boule de gomme.
Il y a 3 commentaires sur cette page. [Afficher commentaires/formulaire]