Impression avec CUPS

Je vais reparler de l'impression sous un aspect assez général même si les exemples données concernent toujours le matériel que je possède. Je me limiterai à CUPS, Common Unix Printing System.

Prérequis

CUPS est disponible depuis fort longtemps dans les distributions à noyau 2.4 mais votre imprimante ne sera que mieux reconnue, en particulier dans le cas d'un branchement en USB, si vous tournez avec un noyau 2.6. Cela permet entre autres d'utiliser Udev.

Ensuite, allez sur linuxprinting.org pour télécharger le fichier .ppd adapté à votre imprimante. S'il n'est pas disponible alors que l'imprimante est référencée, c'est qu'elle est trop récente ou qu'elle utilise un langage inconnu, autre que Postscript, PCL ou GDI. Il y a alors de fortes chances qu'il ne s'agisse pas d'une vraie imprimante mais d'un glorieux membre de la catégorie des winprinters, incapables de fonctionner sans pilotes spécifiques. Donnez-la à quelqu'un que vous n'aimez pas et allez en acheter une vraie.

Quoi qu'il en soit, vous trouverez sûrement sur linuxprinting.org une évaluation du niveau de compatibilité de votre imprimante avec votre système préféré.

Installation

Configuration

Elle peut se faire en ligne de commande ou par modification de fichiers texte mais aussi, beaucoup plus simplement, par l'interface web de CUPS, à l'adresse http://localhost:631, tapée dans n'importe quel navigateur. Attention : le mot de passe root vous sera demandé ; veillez à ne pas le faire mémoriser par votre navigateur .

L'interface en question est un clicodrome du type «Suivant, suivant...». La première précaution à prendre est de spécifier le bon port parallèle ou USB. Dans le cas d'une grosse imprimante par défaut, sûrement sur port parallèle, pas de souci : /dev/lp0 et ça roule. Dans le cas d'une liaison par port USB, vous indiquerez donc simplement : /dev/usb/lp0.

Pensez à vos utilisateurs qui lanceront des impressions en ligne de commande ailleurs que vers l'imprimante par défaut : spécifiez un nom d'imprimante ne comportant ni espaces ni caractères spéciaux et, de préférence... court !

Plusieurs imprimantes simultanément

Dans le cas de plusieurs imprimantes USB, si elles doivent être branchées ou utilisées en même temps, il faut être sûr de leur donner toujours le même nom.

Supposons que l'on veuille donner à une HP-840 le nom de périphérique /dev/hp840. En fait, le but est de créer automatiquement, grâce à Udev, un lien symbolique /dev/hp840 vers /dev/usb/lp... . On vérifie tout d'abord que le matériel est bien reconnu. Si nous sommes en présence d'un noyau 2.6 et que l'imprimante est la seule branchée, elle doit être normalement en /dev/usb/lp0.

Voyons donc quel chemin interroger avec udevinfo : pour cela, après un petit man udevinfo, histoire de voir où on va, utilisons la commande udevinfo -q all -n /dev/usb/lp0. Une partie de la réponse :

P: /class/usb/lp0

Essayons alors : udevinfo -a -p /sys/class/usb/lp0. Ce que l'on peut relever d'intéressant est le nom «humain» de cette imprimante, ses identifiants en hexadécimal, son numéro de série et plein d'autres choses...

Alors que choisir ? Dans un réseau important, il est impératif, et c'est un euphémisme, que les ordres d'impression ne partent pas au mauvais endroit... J'ignore si les imprimantes sans fil autonomes existent ; merci d'éclairer ma lanterne à ce sujet. On indiquera plutôt le numéro de série par SYSFS{serial}.

Si l'on n'a pas de risque de ce type, on peut choisir sans crainte les identifiants en hexa. Pour cela, rajouter dans les règles Udev (fichier avec l'extension .rules) :

# Imprimante HP-840c
BUS="usb", KERNEL="lp[0-9]*", SYSFS{idProduct}="0604", SYSFS{idVendor}="03f0", SYMLINK="hp840"

Le fichier à modifier est dans le dossier /etc/udev/ ou un de ses sous-dossiers. La priorité entre les différents fichiers de règles suit l'ordre alphabétique. Ainsi, 00-mesreglesamoi.rules passera avant udev.rules.

On redémarre ensuite Udev avec /etc/init.d/udev restart (Debian) ou /etc/rc.d/rc.udev restart (Slackware) et à la prochaine configuration de CUPS, on pourra indiquer comme périphérique /dev/hp840.

Définition d'une imprimante par défaut

À ma connaissance, ce n'est pas prévu dans l'interface web de CUPS. Il faut utiliser la commande lpstat -d -p pour savoir quelle est l'imprimante par défaut. Voici le résultat chez moi :

system default destination: hp840
printer hp840 is idle.  enabled since Jan 01 00:00
printer ml1210 is idle.  enabled since Jan 01 00:00
printer ml1250 is idle.  enabled since Jan 01 00:00

Si le réglage actuel ne vous convient pas (par exemple si vous souhaitez la Samsung ML-1250 comme imprimante principale), vous pouvez le changer par :

# lpadmin -d ml1250