<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>Artisan Numérique</title>
  <link rel="alternate" type="text/html" href="http://artisan.karma-lab.net/node/1336"/>
  <link rel="self" type="application/atom+xml" href="http://artisan.karma-lab.net/node/1336/atom/feed"/>
  <id>http://artisan.karma-lab.net/node/1336/atom/feed</id>
  <updated>2008-10-21T01:53:17+02:00</updated>
  <entry>
    <title>Mise en oeuvre du système d&#039;impression CUPS</title>
    <link rel="alternate" type="text/html" href="http://artisan.karma-lab.net/node/1336" />
    <id>http://artisan.karma-lab.net/node/1336</id>
    <published>2008-02-19T13:20:30+01:00</published>
    <updated>2008-10-21T01:53:17+02:00</updated>
    <author>
      <name>Ulhume</name>
    </author>
    <category term="Matériel" />
    <category term="OK" />
    <category term="Planet Libre" />
    <category term="Tutoriel" />
    <summary type="html"><![CDATA[<p>
  
  <a target='_blank' href='http://fr.wikipedia.org/wiki/CUPS'>
  CUPS
  </a> 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.
</p>
<p>
  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. 
</p>
    ]]></summary>
    <content type="html"><![CDATA[<p>
  
  <a target='_blank' href='http://fr.wikipedia.org/wiki/CUPS'>
  CUPS
  </a> 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.
</p>
<p>
  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. 
</p>
<!--break-->


	<a name='chapter_11'></a>
  <h2>Installation de CUPS</h2>
	
<p>Pour commencer, un petit lot de paquets à installer 

  <div class='code-block code-block-fragment'>
  <div class='container'>
  urpmi cups cups-common cups-drivers ghostscript gutenprint-foomatic
  </div>
  
  </div>
</p>
<p>
  Ceci fait, un petit (re)démarrage de CUPS s'impose

  <div class='code-block code-block-fragment'>
  <div class='container'>
  service cups restart
  </div>
  
  </div>
</p>
<p>
  Maintenant un démon <kbd>cupsd</kbd> devrait être chargé.
</p>


	<a name='chapter_12'></a>
  <h2>Quel pilote choisir ?</h2>
	
<p> 
  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 :
    <dl>
      <dt>Les pilotes foomatic</dt><dd>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.</dd>
      <dt>Les pilotes <a class='external' target='_blank' href='http://gimp-print.sourceforge.net/' >Gutenprint</a></dt><dd>qui sont une évolution des pilotes d'impression de GIMP. Eux aussi sont installés par l'urpmi que nous avons fait plus haut.</dd>
      <dt>Le pilote <kbd>OMNI</kbd></dt><DD>Un projet OpenSource d'IBM qui semble ne plus être maintenu et qui gère une vaste gamme d'imprimantes plus anciennes.</DD>
     <dt>les pilotes <a class='external' target='_blank' href='http://www.turboprint.de/english.html' >TurboPrint</a></dt><dd>qui sont des pilotes payants et commerciaux mais permettant notamment l'impression rapide et de qualité sur certaines canon.</dd>
      <dt>Les pilotes du fabriquant</dt><dd>lorsqu'il existent...</dd>
    </dl>
</p>

<p>
  exception fait des pilots commerciaux<kbd>turbolinux</kbd> (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 <a class='external' target='_blank' href='http://www.openprinting.org/printer_list.cgi' >OpenPrinting</a>.
</p>
<p>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 <q>configuration</q>. Dans mon cas, le pilote conseillé est celui d'Epson qu'il va donc me falloir installer.  
</p>


	<a name='chapter_13'></a>
  <h2>Installation du driver Epson</h2>
	
<p>
  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é <a class='external' target='_blank' href='http://www.avasys.jp/english' >Avasys</a>.
</p> 
<p>
  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.
  
  <div class='code-block code-block-fragment'>
  <div class='container'>
  urpmi pipslite-cups<span class="nu0">-1.0</span><span class="nu0">.2</span><span class="nu0">-2</span>.i386.rpm
  </div>
  
  </div>
</p>

<p>
  Ensuite il faut générer le driver CUPS, le fichier PPD :
  
  <div class='code-block code-block-fragment'>
  <div class='container'>
  <span class="sy0">/</span>usr<span class="sy0">/</span>share<span class="sy0">/</span>pipslite<span class="sy0">/</span>setup
  </div>
  
  </div>
</p>

<p>
  Ceci fait, il faut l'installer par la commande suivante :
  
  <div class='code-block code-block-fragment'>
  <div class='container'>
  <span class="sy0">/</span>usr<span class="sy0">/</span>bin<span class="sy0">/</span>pipslite-install
  </div>
  
  </div>
</p>

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


	<a name='chapter_14'></a>
  <h2>Configuration de l'imprimante dans CUPS</h2>
	
<p>
  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 <kbd>https://localhost:631</kbd> si l'installation est locale, ou <kbd>https://machine_cups:631</kbd> pour une machine distante.  
</p>

<p>
  Si l'interface met du temps à s'afficher, aller vite à la section <kbd>Dépannage</kbd>.Sinon, une fois dans l'interface visible, nous sommes pret à installer l'imprimante. Pour cela, cliquez sur l'onglet <kbd>administration</kbd>. 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.
</p>
<p>
  Si vous cliquez sur l'onglet <kbd>Imprimantes</kbd>, vous devriez voir une ligne lui correspondant. Pour tester, il suffit de cliquer sur <kbd>Imprimer la page de test CUPS</kbd>. Et là si tout va bien, la page de test devrait sortir...
</p>


	<a name='chapter_15'></a>
  <h2>Ajout d'une imprimante PDF</h2>
	
<p>
  Une telle imprimante va générer un fichier PDF dans un dossier donné, par exemple en <kbd>/tmp/pdf</kbd>. Il faut donc d'abord créer ce dossier et lui donner les bons droits :
  
  <div class='code-block code-block-fragment'>
  <div class='container'>
  <a target="blank" href="http://pwet.fr/man/linux/commandes/mkdir"><span class="kw2">mkdir</span></a> <span class="sy0">/</span>tmp<span class="sy0">/</span>pdf<br />
<a target="blank" href="http://pwet.fr/man/linux/commandes/chown"><span class="kw2">chown</span></a> :<a target="blank" href="http://pwet.fr/man/linux/commandes/lp"><span class="kw2">lp</span></a> <span class="sy0">/</span>tmp<span class="sy0">/</span>pdf<br />
<a target="blank" href="http://pwet.fr/man/linux/commandes/chmod"><span class="kw2">chmod</span></a> g+rwX <span class="sy0">/</span>tmp<span class="sy0">/</span>pdf
  </div>
  
  </div> 
</p>
<p>
  Ensuite, il suffit dans l'interface de CUPS d'aller sur l'onglet <kbd>Administration</kbd> puis de cliquer sur <kbd>Ajouter une imprimante</kbd>. Donnez-lui comme nom <kbd>PDF</kbd> puis passez à la suite.
</p>
<p>
	Dans la liste, sélectionnez <kbd>PDF Writing</kbd>, puis passez à la suite. CUPS vous demande alors l'URI de l'imprimante et toute l'astuce est là, nous allons donner notre chemin : <kbd>pdf:/tmp/pdf</kbd>.
</p>
<p>
	Choisissez ensuite la marque : <kbd>Generic</kbd>, puis le modèle : <kbd>Generic PostScript Printer Foomatic/Postscript</kbd>. 
</p>
<p>
  Il ne reste plus qu'à valider, et comme précédemment aller dans l'onglet <kbd>imprimante</kbd> pour lancer une page de test et vérifier que le fichier est bien là. 
</p>


	<a name='chapter_16'></a>
  <h2>Dépannage</h2>
	
<h3>Monter le niveau de verbosité de CUPS</h3>
<p>
  Si rien ne marche comme prévu, passez CUPS en mode debug en passant de <kbd>info</kbd> à <kbd>debug</kbd> l'entrée <kbd>levelinfo</kbd> dans <kbd>/etc/cups/cupsd.conf</kbd>. Ensuite relancez cups et faite <kbd>tail</kbd> sur les logs. 
</p>
<p>
  Prenez soin de remettre <kbd>info</kbd> lorsque le système fonctionne pour ne pas vous retrouver avec des logs énormes. 
</p>

<h3>Temps d'attente très long pour l'affichage de la page d'administration</h3>
<p>
Attention ceci qui suit est une astuce classifiée <q>galactique</q>.
</p>
<p>
	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 <kbd>tail -f /var/log/cups/error_log</kbd>. Regardez alors si vous voyez apparaître la ligne <kbd>Generating SSL server key...</kbd>. Si tel est le cas, j'ai peut-être la solution...  
</p>
<p>
	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 <kbd>sysctl  kernel.random.entropy_avail</kbd>).
</p>
<p>
	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 <kbd>find /</kbd>. La seconde, est d'installer le paquet <kbd>urpmi rng-utils</kbd> et de taper, sur le serveur d'impression, la commande <kbd>rngd -r /dev/urandom -o /dev/random</kbd>. Et là, pouf, la connexion se débloque et le navigateur affiche la page d'administration.
</p>
<p>
	Merci milles fois à <a class='external' target='_blank' href='/%20http%3A/%252Fwww.burtonini.com/blog/computers/cups-2006-08-14-18-00' >Ross</a> sans qui j'aurais sûrement passé ma soirée à tenter de comprendre...
</p>

<h3>Type de fichier non reconnu "mime/postscript</h3>
<p>
  Si vous obtenez l'erreur <kbd>Type de fichier non reconnu "mime/postscript</kbd>, c'est qu'il vous manque ghostscript sur votre machine. Faites un <kbd>urpmi ghostscript</kbd> et retentez l'impression de la page de test.
</p>
<p>
  Autre possibilité, le fichier <kbd>/etc/cups/pstoraster.convs</kbd> n'est pas créé correctement. En ce cas, créez le et y mettre le contenu suivante :

  <div class='code-block code-block-fragment'>
  <div class='container'>
  application/vnd.cups-postscript application/vnd.cups-raster 100 pstoraster
  </div>
  
  </div>
</p>

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

  <div class='code-block code-block-fragment'>
  <div class='container'>
  <a target="blank" href="http://pwet.fr/man/linux/commandes/ln"><span class="kw2">ln</span></a> -s <span class="sy0">/</span>usr<span class="sy0">/</span>bin<span class="sy0">/</span>ghostscript <span class="sy0">/</span>usr<span class="sy0">/</span>bin<span class="sy0">/</span><a target="blank" href="http://pwet.fr/man/linux/commandes/gs"><span class="kw2">gs</span></a>
  </div>
  
  </div>
</p>

<h3>Manque d'autorisations</h3>
<p>
  Pour que CUPS puisse fonctionner il faut que le périphériques (ex. /dev/lp0) soit donné au groupe <kbd>lp</kbd> avec les droits de lecture ET écriture. Pour changer cela il faut identifier le device de votre imprimante :
  
  <div class='code-block code-block-fragment'>
  <div class='container'>
  <a target="blank" href="http://pwet.fr/man/linux/commandes/chown"><span class="kw2">chown</span></a> :<a target="blank" href="http://pwet.fr/man/linux/commandes/lp"><span class="kw2">lp</span></a> <span class="sy0">/</span>dev<span class="sy0">/</span>lp0<br />
<a target="blank" href="http://pwet.fr/man/linux/commandes/chmod"><span class="kw2">chmod</span></a> g+rw <span class="sy0">/</span>dev<span class="sy0">/</span>lp0
  </div>
  
  </div>
</p>
<p>
  La même opération est à effectuer sur un dossier devant recevoir des fichiers PDF générés par CUPS. 
</p>



	<a name='chapter_17'></a>
  <h2>Paramétrage des postes Gnome ou KDE</h2>
	
<p>
  A ce stade l'imprimante est fonctionnelle sur le serveur, reste à paramétrer le poste client. Il faut évidement y installer <kbd>cups</kbd> par un <kbd>urpmi cups-common</kbd>. 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. 
</p>
<p>
	La bonne solution est donc de n'installer que le strict minimum, à savoir <kbd>cups-common</kbd> 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 <kbd>/etc/cups/client.conf</kbd>. Si le nom de la machine à laquelle est connecté l'imprimante est <kbd>serveur_impression</kbd>, vous devez mettre dans ce fichier :

  <div class='code-block code-block-fragment'>
  <div class='container'>
  ServerName serveur_impression
  </div>
  
  </div>
</p>
<p>
  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. 
</p>
<p>
  Pour s'en convaincre, il suffit d'installer sous Gnome le paquet <kbd>gnome-cups-manager</kbd> 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. 
</p>
<p>
	Sous KDE c'est dans <kbd>panneau de configuration/périphériques/imprimantes</kbd> que cela se passe. Dans la liste <kbd>Système d'impression utilisé</kbd>, sélectionnez <kbd>CUPS (Common Unix Print System)</kbd>. Cliquez sur <kbd>Appliquer</kbd> et vois imprimantes devraient apparaître. Faites un click droit dessus et choisissez <kbd>Tester l'imprimante..</kbd>, puis <kbd>Imprimer la page de test</kbd>. 
</p>


	<a name='chapter_18'></a>
  <h2>Paramétrage d'un poste Windows</h2>
	
<p>
  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 <kbd>samba</kbd> 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. 
</p>
<p>
  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, <a class='external' target='_blank' href='http://www.adobe.com/support/downloads/product.jsp?product=44&amp;platform=Windows' >Adobe fourni un tel driver</a>. 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 <kbd>http://serveur_impression:631/printers/Stylus_Photo_RX640</kbd>. 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 <kbd>/usr/share/cups/models/gutenprint/5.1/fr</kbd> pour récupérer le fichier <kbd>stp-escp2-rx640.5.1.ppd.gz</kbd>, 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é. 
</p>


	<a name='chapter_19'></a>
  <h2>Conclusion</h2>
	
<p>
  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. 
</p>

    ]]></content>
  </entry>
</feed>
