Artisan Numérique

/système/périphériques/matos/matériel/ Mise en oeuvre du système d'impression CUPS

CUPS est un système modulaire d'impression pour les systèmes UNIX. Il comprend un spooler (file d'attente), une gestion de l'impression à travers le réseau et un système de drivers très ouvert permettant à des fabriquant de fournir leur propre mouture.

Mon cas d'école est l'installation sur un le serveur domestique d'une imprimante (Epson Stylus Photo RX640) partagé sur le réseau local.

Installation de CUPS

Pour commencer, un petit lot de paquets à installer

apt-get install cups cups-driver-gutenprint ghostscript-cups lsb

A ce stade, le démon cupsd a du être lançé par les scripts d'installation.

Quel pilote choisir ?

Pour que votre imprimante soit reconnue, il faut que CUPS dispose d'un pilote (appelé filtre) qui lui soit dédié et il y a à ma connaissance cinq sources différentes de pilotes d'impression pour Linux :

Les pilotes foomatic Un base de pilote très vaste allant jusqu'au modèle les plus anciens. Ils sont installés par l'urpmi que nous avons fait plus haut. Les pilotes Gutenprint qui sont une évolution des pilotes d'impression de GIMP. Eux aussi sont installés par l'urpmi que nous avons fait plus haut. Le pilote OMNI Un projet OpenSource d'IBM qui semble ne plus être maintenu et qui gère une vaste gamme d'imprimantes plus anciennes. les pilotes TurboPrint qui sont des pilotes payants et commerciaux mais permettant notamment l'impression rapide et de qualité sur certaines canon. Les pilotes du fabriquant lorsqu'il existent...

exception fait des pilots commerciauxturbolinux (qui restent la solution de dernier recours), la meilleur solution pour savoir quel pilote est le plus apte à contrôler votre imprimante est d'interroger la base OpenPrinting.

Si le pilote conseillé est un Gutenprint ou foomatic, il y a de forte chance que vous l'ayez déjà installé, passez donc à l'étape configuration. Dans mon cas, le pilote conseillé est celui d'Epson qu'il va donc me falloir installer.

Installation du driver Epson

Epson fait parti des rares fabriquant qui non seulement produisent des drivers Linux, mais en plus les fournissent sous licence GPL. Avec les sources donc. Donc que ce soit imprimantes ou scanners, mon choix se portent donc maintenant systématiquement sur Epson. Ces pilotes sont disponibles sur le site de la société Avasys.

Pour installer le driver d'Avasys, quelques étapes sont nécessaires. Une fois le driver téléchargé, il faut allumer l'imprimante, vérifier les connections, et installer le paquet.

urpmi pipslite-cups-1.0.2-2.i386.rpm

Ensuite il faut générer le driver CUPS, le fichier PPD :

/usr/share/pipslite/setup

Ceci fait, il faut l'installer par la commande suivante :

/usr/bin/pipslite-install

Voilà, le plus dur est fait, le driver est en place, vous pouvez passer à l'étape suivante.

Configuration de l'imprimante dans CUPS

A ce stade, le pilote, quel que soit votre choix, est installé. Le paramétrage de CUPS est lui très simple et vous n'aurez besoin que d'un navigateur Web positionné à l'addresse https://localhost:631 si l'installation est locale, ou https://machine_cups:631 pour une machine distante.

  # Only listen for connections from the local machine.
Listen 192.168.154.102:631
Listen /var/run/cups/cups.sock


  # Restrict access to the server...
<Location />
  Order allow,deny
  Allow 192.168.154.*
</Location>

# Restrict access to the admin pages...
<Location /admin>
  Order allow,deny
  Allow 192.168.154.*
</Location>

# Restrict access to configuration files...
<Location /admin/conf>
  AuthType Default
  Require user @SYSTEM
  Order allow,deny
  Allow 192.168.154.*
</Location>

Si l'interface met du temps à s'afficher, aller vite à la section Dépannage.Sinon, une fois dans l'interface visible, nous sommes pret à installer l'imprimante. Pour cela, cliquez sur l'onglet administration. Là devrait apparaître la liste des imprimantes reconnues par Cups, sélectionnez la votre. Ensuite vous est demandé le driver à utiliser. Là, tout dépend de ce que vous avez installé comme pilote et des conseils donnés par OpenPrinting.org. CUPS étant un système sécurisé, vous serez amené à un moment ou à un autre à saisir le mot de passe root. Lorsque vous avez choisi, validez, l'imprimante est installée.

Si vous cliquez sur l'onglet Imprimantes, vous devriez voir une ligne lui correspondant. Pour tester, il suffit de cliquer sur Imprimer la page de test CUPS. Et là si tout va bien, la page de test devrait sortir...

Ajout d'une imprimante PDF

Une telle imprimante va générer un fichier PDF dans un dossier donné, par exemple en /tmp/pdf. Il faut donc d'abord créer ce dossier et lui donner les bons droits :

mkdir /tmp/pdf
chown :lp /tmp/pdf
chmod g+rwX /tmp/pdf

Ensuite, il suffit dans l'interface de CUPS d'aller sur l'onglet Administration puis de cliquer sur Ajouter une imprimante. Donnez-lui comme nom PDF puis passez à la suite.

Dans la liste, sélectionnez PDF Writing, puis passez à la suite. CUPS vous demande alors l'URI de l'imprimante et toute l'astuce est là, nous allons donner notre chemin : pdf:/tmp/pdf.

Choisissez ensuite la marque : Generic, puis le modèle : Generic PostScript Printer Foomatic/Postscript.

Il ne reste plus qu'à valider, et comme précédemment aller dans l'onglet imprimante pour lancer une page de test et vérifier que le fichier est bien là.

Dépannage

Monter le niveau de verbosité de CUPS

Si rien ne marche comme prévu, passez CUPS en mode debug en passant de info à debug l'entrée levelinfo dans /etc/cups/cupsd.conf. Ensuite relancez cups et faite tail sur les logs.

Prenez soin de remettre info lorsque le système fonctionne pour ne pas vous retrouver avec des logs énormes.

Temps d'attente très long pour l'affichage de la page d'administration

Attention ceci qui suit est une astuce classifiée galactique.

Si le temps de connexion à la page d'administration vous parait trop long, genre infini, allez sur la machine d'impression, montez la verbosité et fait une tail -f /var/log/cups/error_log. Regardez alors si vous voyez apparaître la ligne Generating SSL server key.... Si tel est le cas, j'ai peut-être la solution...

En gros, le système essaye de générer une clef pour assurer le cryptage entre votre navigateur web et le serveur d'impression. Hors, pour une raison qui m'est totalement obscure, le système n'a pas assez d'entropie pour pouvoir générer suffisamment de nombres aléatoires (l'entropie d'un système linux est vérifiable par la commande sysctl kernel.random.entropy_avail).

Pour augmenter l'entropie, deux solutions. La première est de générer suffisamment de "bruit" sur la machine par exemple en faisant un find /. La seconde, est d'installer le paquet urpmi rng-utils et de taper, sur le serveur d'impression, la commande rngd -r /dev/urandom -o /dev/random. Et là, pouf, la connexion se débloque et le navigateur affiche la page d'administration.

Merci milles fois à Ross sans qui j'aurais sûrement passé ma soirée à tenter de comprendre...

Type de fichier non reconnu "mime/postscript

Si vous obtenez l'erreur Type de fichier non reconnu "mime/postscript, c'est qu'il vous manque ghostscript sur votre machine. Faites un urpmi ghostscript et retentez l'impression de la page de test.

Autre possibilité, le fichier /etc/cups/pstoraster.convs n'est pas créé correctement. En ce cas, créez le et y mettre le contenu suivante :

application/vnd.cups-postscript application/vnd.cups-raster 100 pstoraster

gs introuvable

Certains pilotes ne sont pas au courrant que GhostScript ne s'apelle plus gs mais... ghostscript. La solution est donc de créer un lien symbolique :

ln -s /usr/bin/ghostscript /usr/bin/gs

Manque d'autorisations

Pour que CUPS puisse fonctionner il faut que le périphériques (ex. /dev/lp0) soit donné au groupe lp avec les droits de lecture ET écriture. Pour changer cela il faut identifier le device de votre imprimante :

chown :lp /dev/lp0
chmod g+rw /dev/lp0

La même opération est à effectuer sur un dossier devant recevoir des fichiers PDF générés par CUPS.

Paramétrage des postes Gnome ou KDE

A ce stade l'imprimante est fonctionnelle sur le serveur, reste à paramétrer le poste client. Il faut évidement y installer cups par un urpmi cups-common. Attention, il n'est nullement besoin d'installer plus que cela. En effet, si vous installiez cups en complet, vous seriez vous même un serveur et cela n'a aucun intérêt. Vous seriez obligé d'installer à nouveau les pilotes pour chaque imprimante utilisée.

La bonne solution est donc de n'installer que le strict minimum, à savoir cups-common et de configurer votre machine en client du serveur d'impression. Cela se fait très simplement en modifiant (ou en créant) le fichier /etc/cups/client.conf. Si le nom de la machine à laquelle est connecté l'imprimante est serveur_impression, vous devez mettre dans ce fichier :

ServerName serveur_impression

C'est à ce stade que l'on comprend l'intérêt réel de cups. Vous n'avez en effet nul besoin de drivers sur les postes clients comme c'est le cas sous Windows. La raison en est que tout est transformé en postscript. Lorsque votre poste client demande l'impression d'un texte, le driver de kde par exemple, va transformer le document en postscript et l'envoyer au serveur d'impression qui va, via le driver que nous avons installé, transformer ce postscript en un langage compréhensible par l'imprimante.

Pour s'en convaincre, il suffit d'installer sous Gnome le paquet gnome-cups-manager et de le lancer. Nos deux imprimantes devraient directement apparaître sans avoir touché à rien. Un click-droit sur une imprimante pour en afficher les propriétés, et lancer une page d'impression.

Sous KDE c'est dans panneau de configuration/périphériques/imprimantes que cela se passe. Dans la liste Système d'impression utilisé, sélectionnez CUPS (Common Unix Print System). Cliquez sur Appliquer et vois imprimantes devraient apparaître. Faites un click droit dessus et choisissez Tester l'imprimante.., puis Imprimer la page de test.

Paramétrage d'un poste Windows

Se reporter à ce tutoriel.

Conclusion

CUPS est capricieux, pointilleux surtout, mais extrêmement puissant. Il permet de transformer n'importe quelle machine en serveur d'impression fiable et efficace, même sous une forte demande avec de nombreuses imprimantes connectées. Et finalement, une fois de plus, la mauvaise réputation de l'impression sous Linux tient plus à une déficience des fabricants en terme de pilote que dans la machinerie interne.