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.)