David Madore's WebLog: De la facilité d'installer une imprimante sous Linux

Index of all entries / Index de toutes les entréesXML (RSS 1.0) • Recent comments / Commentaires récents

Entry #1418 [older|newer] / Entrée #1418 [précédente|suivante]:

(samedi)

De la facilité d'installer une imprimante sous Linux

Mon copain m'a prêté son imprimante laser, une Brother HL-2030, et j'ai décidé de la faire fonctionner avec mon ordinateur qui tourne (encore) sous Debian GNU/Linux.

Sur à peu près n'importe quel autre système d'exploitation, on choisirait dans un quelconque panneau de configuration un onglet de gestion des imprimantes, on cliquerait sur ajouter imprimante (enfin add printer, parce que je déteste que les ordinateurs me parlent le petit nègre qui leur tient lieu de français), on choisirait la marque (Brother) et le modèle, on imprimerait une page de test, et ce serait fini.

Sous Linux, heureusement, c'est beaucoup plus simple. Ahem.

D'abord on prend le soin d'aller sur LinuxPrinting.org pour savoir si l'imprimante est gérée et ce qu'ils conseillent. On constate qu'elle n'est pas dans la base de données mais qu'il y a un modèle avec un nom très proche et qui est peut-être la même chose, ou peut-être pas. On constate également qu'il y a, sur cette description, pas moins de sept pilotes censés pouvoir faire marcher cette imprimante, sans compter le pilote propriétaire fourni par le fabricant, alors on se dit qu'on a peut-être une chance. (On découvrira plus tard qu'en fait certains de ces pilotes sont le même, et que d'autres ne semblent pas/plus exister, mais on n'y est pas encore.)

On passe rapidement sur le pilote propriétaire fourni par le fabricant : soit parce qu'on préfère ce qui est libre, soit parce qu'on trouve que des instructions qui demandent de faire dpkg -i --force-all trucmuche.i386.deb ne doivent pas être très propre surtout quand on est sur x86-64 et pas x86-32 (comme le .i386 l'indique), soit parce qu'on n'aime pas tel ou tel autre aspect du machin. Bref, on est brave et on se dit qu'on va utiliser des drivers libres.

Mais avant de commencer, il faut choisir un spooler d'impression. Parce que, comme je disais, sous n'importe quel autre OS, mettre en place une imprimante revient juste à choisir un pilote : sous Linux, on n'a pas seulement le choix du pilote, on a aussi le choix du spooler (= le démon qui s'occupe d'envoyer vos travaux d'impression au pilote, de les ordonnancer, etc.). Choix entre au moins CUPS, lpd, LPRng, PPR et pdq. Voire, pas de spooler du tout si on préfère. (Évidemment, tout ça est surtout drôle si on n'a pas encore compris que tous ces choix existent et sont mutuellement incompatibles et qu'on commence à suivre des instructions afférentes à deux choix contradictoires ; c'est encore plus drôle quand on sait que les différents spoolers ont tendance à inclure des programmes de compatibilité les uns avec les autres, qui ont donc les mêmes noms les uns que les autres.) Bon, mettons qu'on choisisse CUPS parce qu'on en a vaguement l'habitude ailleurs et qu'on se croit beaucoup plus fort qu'ESR.

Je passe sur la première difficulté qui est de trouver sous quel nom de package Debian se cache CUPS (le problème n'est pas tant de trouver un package, c'est de savoir exactement quoi installer, tant les descriptions des rapports entre les différents packages sont obscures) : en l'occurrence j'en savais déjà quelque chose, donc je n'ai pas trop hésité. CUPS propose ensuite une jolie interface Web (enfin, jolie, ça dépend des goûts, mais au moins une interface) pour ajouter une imprimante. Première surprise, il ne semble pas connaître quoi que ce soit aux imprimantes USB. On cherche un peu à tâtons : il y a des packages appelés foomatic-db ou foomatic-filters dont le rôle est parfaitement obscur (et plus encore le rapport à CUPS, Ghostscript et tout le bazar) ; il y en a un qui s'appelle printconf et qui semble prometteur, malheureusement il ne fait rien du tout. Après réflexion on se rend compte que c'est parce qu'on n'a pas chargé le module noyau qui gère les imprimantes USB : mais, même une fois ce module chargé, il prétend ne pas connaître l'imprimante en question. Dommage. Retour à l'interface de CUPS qui, maintenant que le module noyau est chargé et divers packages foomatic et gutenprint installés, est un peu plus loquace. Cependant, le modèle précis n'est décidément pas connu : le plus proche semble être le HL-2060, mais si on l'utilise comme pilote l'imprimante reçoit des données et s'active pendant un moment mais au final n'imprime rien.

Je reviens aux questions de pilote : il faut savoir (de nouveau, si on ne le sait pas, on va être totalement perdu dans une forêt d'explications contradictoires) qu'il y a aux moins deux séries principales de pilotes d'impression (libres) sous les Unixoïdes à la Linux : il y a la série Ghostscript (Ghostscript lui-même existe en au moins trois branches différentes, sinon ne ce serait pas drôle : il y a la branche GNU qui est en gros une version retardée de la branche Aladdin, et la branche ESP essentiellement par les gens de CUPS), et il y a la série Gutenprint qui se fut appelée Gimp-Print (changer de nom est une des grandes spécialités des logiciels libres : voyez le programme Phoenix, développé par un groupe appelé soit Netscape soit Mozilla, qui est devenu Firebird puis Firefox ; en l'occurrence, ils ont changé de nom parce que ça n'avait plus grand-chose à voir avec Gimp : bon). L'idée est que Ghostscript est un interpréteur PostScript qui possède différents formats de sortie, dont les langages de toutes sortes d'imprimantes, alors que Gutenprint doit plutôt fonctionner de façon bitmap. Pour rajouter un peu à la confusion, les pilotes Gutenprint peuvent aussi servir dans Ghostscript. Ou quelque chose comme ça. Bref, on commence à être sacrément perdu.

Le pilote que LinuxPrinting.org recommandait était le pilote hl1250 qui fait partie de la série Ghostscript (remarquons d'ailleurs que la page est très vieille puisqu'elle parle de patchs pour Ghostscript 5 alors que ma Debian pas spécialement bleeding edge fournit un Ghostscript 8.51 rien que dans la vieille version GNU). En admettant qu'on commence à avoir une certaine habitude d'Unix, on est capable de prononcer l'incantation mystique (gs -dNOPAUSE -dQUIET -sDEVICE=hl1250 -sOutputFile=/dev/usb/lp0 machinchose.ps) pour faire pondre un sortie de fichier brut (ce qu'il enverrait directement à l'imprimante) à ce pilote Ghostscript à partir d'un fichier PostScript et le balancer directement dans le périphérique d'impression. Ça marche plus ou moins, sauf que l'imprimante imprime deux exemplaires de la page chacune réduite à une demi-page en largeur : on devine confusément que c'est parce qu'elle essaie de faire du 1200dpi alors qu'elle n'en est pas capable, Au pif, on essaie le pilote hl1240 et là, apparemment, l'imprimante est contente.

Reste que dans CUPS ça ne fonctionne toujours pas. En regardant de plus près, il s'avère que c'est surout parce que CUPS ne semble vouloir utiliser que les pilotes Gutenprint et que ceux-ci (comme on peut le voir en leur faisant eux aussi sortir la sortie brute qu'ils envoient à l'imprimante) ne mettent pas des petites formules propitiatoires que l'imprimante semble vouloir entendre pour daigner cracher une feuille : ^[%-12345X@PJL JOB NAME="Truc"^M^J@PJL ENTER LANGUAGE=PCL^M^J et autres enjolivures ; si on les rajoute, ça marche, mais on ne sait vraiment pas comment forcer le pilote à rajouter ces borborygmes.

Du coup, on se dit qu'on va utiliser le pilote Ghostscript hl1240, puisqu'il semble donner ce qu'il faut. Malheureusement, quelqu'un a l'air d'avoir décidé que Gutenprint c'était mieux et que tout le monde devait utiliser ça dorénavant, et du coup il n'y a apparemment plus de façon simple de demander à CUPS de gérer une imprimante avec des pilotes Ghostscript. On est obligé de se farcir l'écriture d'un script shell contenant essentiellement l'incantation mystique déjà indiquée ci-dessus pour appeler Ghostscript avec les bons arguments, puis un fichier encore plus barbare, un fichier PPD, pour que CUPS consente à l'utiliser.

Avec tout ça, ça semble marcher à peu près. Le centrage n'est pas parfait et on n'ose même pas chercher à faire du recto-verso, mais bon…

Vous voyez que c'est vraiment plus simple que sous Mac OS, hein ? Non ? (Le plus ironique, d'ailleurs, c'est que Mac OS utilise CUPS en interne lui aussi.)

↑Entry #1418 [older|newer] / ↑Entrée #1418 [précédente|suivante]

Recent entries / Entrées récentesIndex of all entries / Index de toutes les entrées