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 une machine faisant office de serveur d'impression, d'une imprimante Epson Stylus Photo RX640, ainsi que d'une imprimante virtuelle pour les sorties en PDF.
Pour commencer, un petit lot de paquets à installer
Ceci fait, un petit (re)démarrage de CUPS s'impose
Maintenant un démon cupsd devrait être chargé.
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 :
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.
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.
Ensuite il faut générer le driver CUPS, le fichier PPD :
Ceci fait, il faut l'installer par la commande suivante :
Voilà, le plus dur est fait, le driver est en place, vous pouvez passer à l'étape suivante.
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.
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...
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 :
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à.
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.
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...
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 :
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 :
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 :
La même opération est à effectuer sur un dossier devant recevoir des fichiers PDF générés par CUPS.
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 :
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.
Là, comme d'hab, ça se corse. Il y a deux méthodes d'impression sur une imprimante réseau CUPS via windows. La première, classique, consiste à utiliser samba pour publier l'imprimante cups sur le réseau microsoft. Ensuite, de windows, il suffit de se connecter sur l'imprimante réseau, de fournir le driver propriétaire et le tour est joué. Dans ce cas de figure CUPS n'est utilisé que comme un spooler d'impression, un tuyau qui ne traite pas les données. Windows connaît l'imprimante, formate le document en conséquence et l'envoi directement sur celle-ci.
La deuxième option consiste à envoyer un fichier postscript à CUPS et d'utiliser ainsi son driver. Il suffit donc d'installer sous windows un pilote d'impression capable de générer du postscript. Or par chance, Adobe fourni un tel driver. Il suffira donc de l'installer et de saisir en tant qu'URL de l'imprimante réseau l'adresse du serveur cups, à savoir par exemple http://serveur_impression:631/printers/Stylus_Photo_RX640. Ensuite, dites oui. L'installation propose alors d'utilise un driver généric, c'est jouable mais le mieux reste d'aller sur la machine linux, dans le dossier /usr/share/cups/models/gutenprint/5.1/fr pour récupérer le fichier stp-escp2-rx640.5.1.ppd.gz, de le décompresser et de fournir ce fichier à l'installeur. Vous pouvez fournir un autre fichier PPD en fonction du type de driver que vous avez utilisé.
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.
- répondre
Non2 , le 4 July, 2008 - 13:14Merci.
Grâce à vos explications claires (c'est rare), j'ai pu transposer tout ça à ma Brother (driver Linux du fabricant) et je peux enfin imprimer depuis le Gimp.
- répondre
Listef , le 6 September, 2008 - 06:16Bonjour,
Je commence à utiliser CUPS.
Mais Firefox (Xubuntu) ne veut plus imprimer
(Sur Konqueror, Il y a une option 'Choisir le système d'impression').
Une idée de solutions ?
Merci d'avance
- répondre
Ulhume, le 6 September, 2008 - 22:36@Listef là comme cela, c'est un peu sec. Une bonne manière de voir d'où vient le souci est cependant d'utiliser le mode "debug" comme je l'explique dans le chapitre "Monter le niveau de verbosité de CUPS".
Généralement, lance une impression et le problème est dans les traces.
Poster un nouveau commentaire