<HTML> <HEAD> <TITLE>L'impression, comment ça marche</TITLE> </HEAD> <BODY> <H1>6. <A NAME="s6"></A>L'impression, comment ça marche</H1> <P> <A HREF="Printing-HOWTO.html#toc6">Contenu de cette section</A></P> <P></P> <P>Nous considérons ici que vous utilisez la suite logicielle <CODE>lpd</CODE> que nous décrirons d'ailleurs. Elle est la plus répandue et fonctionne très bien.</P> <P></P> <H2>6.1 <A NAME="ss6.1"></A> Impression locale et impression distante </H2> <P></P> <P>L'impression locale permet aux utilisateurs d'envoyer des travaux d'impression à l'imprimante directement rattachée à leur machine.</P> <P></P> <P></P> <P>L'impression distante, par contre, permet de soumettre des travaux d'impression depuis une machine, à une autre machine sur le réseau, sur laquelle est connectée une imprimante.</P> <P></P> <P></P> <P></P> <H2>6.2 <A NAME="ss6.2"></A> De quoi avez vous besoin </H2> <P></P> <P>Nous supposons que vous savez éditer un fichier texte sous Linux et que vous avez une bonne compréhension des notions de droits d'accès et de propriété (<CODE>chmod</CODE>, <CODE>chown</CODE>).</P> <P></P> <P></P> <P>Nous supposons également que votre système Linux fonctionne correctement. En particulier, si vous souhaitez faire de l'impression distante, que votre réseau fonctionne déjà.</P> <P></P> <P></P> <P>Consultez à ce propos les nombreuses documentations disponibles sur le sujet (comme on dit: RTFM, ce qui en bon francais veut dire LLBD <CODE>:-)</CODE>).</P> <P></P> <P></P> <P></P> <H2>6.3 <A NAME="ss6.3"></A> Les programmes importants</H2> <P></P> <P>Le système d'impression Unix comprend (au moins) 5 programmes. Ils doivent se trouver à l'endroit décrit (c'est le mieux) ou dans un répertoire accessible (avec la variable PATH), appartenir à root (groupe lp), et avoir les permissions suivantes :</P> <P> <BLOCKQUOTE><CODE> <PRE> -r-sr-sr-x root lp /usr/bin/lpr -r-sr-sr-x root lp /usr/bin/lpq -r-sr-sr-x root lp /usr/bin/lprm -r-xr-sr-x root lp /usr/sbin/lpc -rwxr--r-- root lp /usr/sbin/lpd </PRE> </CODE></BLOCKQUOTE> </P> <P>Les quatre premiers sont utilisés pour soumettre, visualiser, annuler, contrôler les travaux d'impression. Le dernier est le démon.</P> <P></P> <P></P> <P>Il existe bien entendu des pages de manuel en ligne pour ces commandes que vous pourrez consulter pour plus d'information. Le point important à noter est que les commandes <CODE>lpr</CODE>, <CODE>lpq</CODE>, <CODE>lpc</CODE> et <CODE>lprm</CODE> opèrent sur une imprimante par défaut nommée <CODE>lp</CODE>. La variable d'environnement <CODE>PRINTER</CODE> peut contenir le nom de l'imprimante que vous avez choisie. La spécification du nom d'une imprimante sur la ligne de commande surchargera ces définitions (les imprimantes de l'exemple sont hors-ligne):</P> <P></P> <P></P> <P> <BLOCKQUOTE><CODE> <PRE> # echo $PRINTER (vide) # # lpq waiting for lp to become ready (offline ?) ... # export PRINTER=mon_imprimante # lpq waiting for mon_imprimante to become ready (offline ?) ... # lpq -Plpr0 waiting for lpr0 to become ready (offline ?) ... </PRE> </CODE></BLOCKQUOTE> </P> <P></P> <H3>Le client et le serveur</H3> <P></P> <P>Voici ci-dessous les interactions client - démon</P> <P> <BLOCKQUOTE><CODE> <PRE> _________ +/BlaBla /+ //________//| / / + +----------------+ +----------+ / | LPR | |= oo |/ +----------------+ +----------+ | Imprimante | ^ V | +----------------+ +------------------+ | LPD |------>------>----| LPD | +----------------+ +------------------+ Soumission d'un requete d'impression +----------------+ | LPQ | +----------------+ \ \_______>______ \ +----------------+ \+------------------+ | LPD | | LPD | +----------------+ +------------------+ Soumission d'une demande d'information </PRE> </CODE></BLOCKQUOTE> </P> <P>Lorsque le système démarre, <CODE>lpd</CODE> est chargé. Il lit le fichier <CODE>/etc/printcap</CODE> (dont vous trouverez une explication plus loin) qui décrit les imprimantes connues.</P> <P></P> <H3>Les fichiers soumis par le client</H3> <P></P> <P>Lorsqu'un programme client soumet un travail d'impression, il génère deux fichiers qu'il écrit dans le spool:</P> <P> <UL> <LI> Un fichier de données qui contient une copie des données que vous souhaitez soumettre à l'imprimante. Il s'agit bien d'une copie, ce qui signifie que toute modification ultérieure de votre fichier n'altérera pas l'impression. </LI> <LI> Un fichier de description du travail à effectuer. </LI> </UL> </P> <P></P> <H3>La commande lpr</H3> <P></P> <P>La commande <CODE>lpr</CODE> soumet un travail d'impression. Elle se charge de mettre les données à imprimer dans un fichier dans le spool d'impression. Ces données peuvent provenir soit d'un fichier (les données sont dupliquées et toute modification ultérieure du fichier d'origine n'affectera pas l'impression), soit de l'entrée standard (stdin). Le démon est averti de l'existence d'un nouveau fichier et envoie, dès que possible, les données vers l'imprimante physique (ou la machine distante).</P> <P></P> <P></P> <P>La taille du spool est bien entendu limitée à la place disponible sur votre disque dans <CODE>/usr/spool/</CODE> ou à la taille limite spécifiée dans le fichier de configuration <CODE>printcap</CODE>. Vous pouvez néanmoins imprimer un gros fichier en demandant à <CODE>lpr</CODE> de ne pas dupliquer le fichier. Le démon d'impression ira alors chercher le fichier que vous indiquez dans la ligne de commande et non plus dans le spool.</P> <P></P> <H3>La commande lpq</H3> <P></P> <P>La commande <CODE>lpq</CODE> affiche le contenu du spool, pour une imprimante donnée. Une des informations importantes fournies est le numéro du travail (job). C'est lui qui pourra servir à annuler un des travaux soumis, y compris celui en cours d'impression. Parmi tous les travaux soumis, l'indication ``active'' indique le travail en cours d'impression (ou que <CODE>lpd</CODE> essaie d'envoyer à l'impression).</P> <P></P> <H3>La commande lprm</H3> <P></P> <P>La commande <CODE>lprm</CODE> enlève un travail de la file (et donc le fichier du spool). Vous pouvez soit spécifier un numéro de job, soit un tiret permettant de supprimer tous les travaux vous appartenant. Si vous êtes root, tous les travaux sont supprimés. Pour supprimer les travaux d'un utilisateur, spécifiez son nom.</P> <P> <BLOCKQUOTE><CODE> <PRE> # lprm 1 dfA001Aa00484 dequeued cfA001Aa00484 dequeued # </PRE> </CODE></BLOCKQUOTE> </P> <P>Le premier fichier contient les données à imprimer. Il a été créé par <CODE>lpr</CODE>. Le deuxième contient des informations que le démon utilise pour savoir que faire des données (impression locale, distante, ...) Consultez le manuel en ligne : <CODE>lpd(8)</CODE>.</P> <P></P> <H3>La commande lpc</H3> <P></P> <P>La commande <CODE>lpc</CODE> permet de contrôler les travaux en cours ainsi que l'imprimante, et certains aspects de son utilisation. En particulier, vous pouvez démarrer ou stopper la sortie des travaux du spool pour l'impression, valider ou invalider une imprimante, et même modifier l'ordre d'impression des fichiers. Les commandes suivantes permettent d'invalider l'impression sur <CODE>mon_imprimante</CODE>, de valider le spool sur <CODE>ton_imprimante</CODE>, et de faire passer le job 37 en début de file:</P> <P> <BLOCKQUOTE><CODE> <PRE> lpc down mon_imprimante lpc enable ton_imprimante lpc topq 37 </PRE> </CODE></BLOCKQUOTE> </P> <P><CODE>lpc</CODE> peut fonctionner en interactif si aucun paramètre ne lui est passé. Vous pouvez lire les pages du manuel en ligne pour obtenir des instructions complètes. A noter que certaines actions de <CODE>lpc</CODE> sont réservées au super-utilisateur (root).</P> <P></P> <H2>6.4 <A NAME="ss6.4"></A> Les répertoires importants</H2> <P></P> <P>Le répertoire le plus important est le répertoire de spool, dans lequel les données vont être stockées avant d'être imprimées. Typiquement, un système sera configuré pour avoir un répertoire de spool par imprimante. Cela rend la gestion plus facile. Sur mon système, par exemple, le répertoire <CODE>/usr/spool/lp</CODE> est le répertoire principal. Sous ce répertoire, on y trouve le sous-répertoire <CODE>lpr0</CODE>, correspondant à la déclaration que j'ai faite dans <CODE>/etc/printcap</CODE> pour le répertoire de spool de mon imprimante.</P> <P></P> <P></P> <P>NDT: Ce qui va suivre décrit une façon de faire pour donner les bons droits d'accès aux répertoires de spool. Différentes méthodes sont possibles, sachant que, comme sous Un*x, beaucoup de choses sont possibles dans ce domaine, il convient de faire attention de ne pas offrir de failles à la sécurité de l'ensemble.</P> <P></P> <P></P> <P>Le répertoire de spool doit appartenir à <CODE>root</CODE>, et au groupe <CODE>lp</CODE>, avec les droits de lecture/d'écriture pour utilisateur et groupe, et lecture seule pour le reste du monde.</P> <P> <BLOCKQUOTE><CODE> <PRE> chmod ug=rwx,o=rx lpr0 chgrp lp lpr0 drwxrwxr-x 2 root lp 1024 Feb 11 10:51 lpr0/ </PRE> </CODE></BLOCKQUOTE> </P> <P>Un autre répertoire doit également être présent : <CODE>/usr/spool/lpd</CODE> avec les mêmes droits. Vous aurez plus d'informations plus avant dans ce document.</P> <P></P> <H2>6.5 <A NAME="ss6.5"></A> Les fichiers importants</H2> <P></P> <P>En dehors des programmes que nous avons déjà évoqués précédemment, quatre fichiers doivent se trouver dans chaque répertoire de spool. Avec les versions récentes des gestionnaires d'impression, vous n'avez pas à vous soucier de ces fichiers. Ils sont créés automatiquement s'ils n'existent pas : <CODE>.seq</CODE>, <CODE>errs</CODE>, <CODE>lock</CODE> et <CODE>status</CODE>. Ces fichiers doivent avoir les droits <CODE>-rw-rw-r--</CODE>. Le fichier <CODE>.seq</CODE> contient un compteur pour l'affectation des numéros de jobs. Le fichier <CODE>status</CODE> contient le message devant être émis par la commande <CODE>lpc stat</CODE>. Le fichier <CODE>lock</CODE> est utilisé par le démon pour qu'il n'imprime qu'un fichier à la fois. Le fichier <CODE>errs</CODE> contient les erreurs survenues sur l'imprimante.</P> <P></P> <P></P> <P>Le fichier <CODE>errs</CODE> n'est pas obligatoire. De plus, il peut s'appeler comme vous le souhaitez, pourvu que son nom soit déclaré dans le fichier <CODE>/etc/printcap</CODE> que nous décrirons dans la suite.</P> <P></P> <HR> <P> Chapitre <A HREF="Printing-HOWTO-7.html">suivant</A>, Chapitre <A HREF="Printing-HOWTO-5.html">Précédent</A> <P> Table des matières de <A HREF="Printing-HOWTO.html#toc6">ce chapitre</A>, <A HREF="Printing-HOWTO.html#toc">Table des matières</A> générale</P> <P> <A HREF="Printing-HOWTO.html">Début</A> du document, <A HREF="#0"> Début de ce chapitre</A></P> </BODY> </HTML>