
                                Printing-HOWTO

Grant Taylor <gtaylor+pht@picante.com>, traduction Jean-Michel VANSTEENE
<J.M.Vansteene@frcl.bull.fr>, <vanstee@worldnet.fr>

   12 Novembre 1997

1. Introduction

   Le Printing-HOWTO devrait contenir tout ce dont vous avez besoin pour
   mettre en place les services d'impression sur votre systme Linux.
   Comme vous vous en doutez peut-tre, ceci est un tantinet plus
   compliqu que le ``simple'' _clic_ du monde _Microsoft_ et _Apple_,
   mais en contre-partie, c'est beaucoup plus souple et certainement plus
   facile  administrer pour les grands rseaux.

   Ce document est organis de faon  ce que la lecture de la premire
   moiti suffise  la mise en place d'un systme qui ``tourne''. Les
   choses plus obscures voire particulires sont concentres dans la
   deuxime moiti. Vous pouvez vous rfrer  la table des matire pour
   les dtails.

   Depuis la version 3.x, ce document a t compltement rcrit et un
   certain nombre d'informations ont t retires. La principale raison
   est que l'ancien document faisait une soixantaine de pages et
   contenait pas mal de parties redondantes voire inutiles. Ainsi fait,
   la sanction est tombe: vous trouverez ici un document sensiblement
   plus concis. S'il manque une information qui vous semble importante,
   nous vous encourageons soit  parcourir l'ancien HOWTO, soit  nous
   envoyer un courrier nous proposant d'ajouter ladite information.
   L'adresse du site de G. Taylor est
   http://www.picante.com/~gtaylor/pht/.

   En vous souhaitant comme  l'accoutume, moulte satisfaction dans vos
   recherches et pleine russite dans la configuration de votre
   imprimante (Note : Dsol : a vouloir dire nous esprer toi russir
   configurer imprimante :-)).

   Les HOWTOs franais peuvent tre trouvs en France, notamment sur les
   sites

      ftp.lip6.fr             (/pub/linux/french/docs/HOWTO)
      ftp.univ-angers.fr      (/pub/linux/french/docs/HOWTO)

1.1 Historique

   Ce document est le troisime du nom, c'est  dire la troisime version
   compltement revue (en esprant que sa structure se stabilise un peu).
   L'histoire du PHT peut etre brivement dcrite ainsi :

   J'ai commenc  crire le premier HOWTO en rponse  un nombre assez
   consquent de questions qui avaient t poses dans comp.os.linux.
   C'tait en fait une FAQ que j'avais nomme HOWTO. Cette version tait
   disponible uniquement en ASCII.

   Le PHT a ensuite t regroup avec la FAQ de LPD crite par Brian
   McCauley <B.A.McCauley@bham.ac.uk>, nous avons continu ce document de
   concert pendant  peu prs deux ans. Nous avons alors ajout  notre
   document les travaux de Karl Auer <Karl.Auer@anu.edu.au>. Cette
   version du PHT tait disponible en TeXInfo, PostScript, HTML, ASCII et
   Info.

   Aprs avoir un peu laiss le PHT vieillir pendant une bonne anne,
   sans avoir pu trouver quelqu'un souhaitant le maintenir, j'ai dcid
   de le rcrire. Cette version est conforme au ``standard''
   Linuxdoc-SGML.

1.2 Copyright

   Ce document est sous Copyright (C) 1996 par Grant Taylor. Vous pouvez
   le copier et le distribuer tel quel comme vous le souhaitez. Par
   contre aucune modification ne peut tre faite sans le consentement de
   l'auteur sauf si vous supprimez du document toute marque qui lui fait
   rfrence, ainsi qu'au traducteur et  toutes les personnes cites (y
   compris les adresses de courrier lectronique) et que vous le diffusez
   en votre nom. L'auteur (et le traducteur) ne sauraient tre tenus
   responsables de propos qui ne sont pas les leurs.

   Le coordinateur des HOWTOs est actuellement Greg Hankins
   <gregh@sunsite.unc.edu>. Veuillez quand meme ne pas encombrer sa boite
   aux lettres de questions sauf de la plus haute importance. En France,
   le coordinateur est Eric Dumas <dumas@freenix.fr, dumas@Linux.EU.Org>.

2. Qu'est-ce que l'impression sous UNIX ?

   Je me permets de consacrer un petit chapitre au B.A.BA de l'impression
   sous UNIX et donc sous Linux. Les gourous trouveront ce chapitre
   inutile et je les invite  passer au suivant. Les dbutants trouveront
   l'information suffisante, je l'espre, pour comprendre comment les
   donnes sont vhicules vers leur chre imprimante.

   La faon la plus simple d'imprimer sous Unix (et donc Linux) est
   d'envoyer les donnes directement au pilote de l'imprimante.

      ls >/dev/lp0

   Cette mthode a nanmoins un gros inconvnient : elle ne tire pas
   parti des caractristiques multi-tches du systme d'exploitation. En
   effet vous devrez attendre que le tampon de l'imprimante ait absorb
   toutes les donnes pour pouvoir continuer  travailler.

   Une meilleure mthode consiste  utiliser un spool d'impression, dont
   le rle est de collecter les donnes temporairement dans des fichiers
   afin de les envoyer, en tche de fond,  l'imprimante. Lorsque
   plusieurs fichiers sont soumis, ils seront imprims dans l'ordre de
   soumission (premier entr, premier sorti). La zone de spool est donc
   bien une _file_. On dit que les travaux sont dans la _file
   d'impression_. Cette mthode met en jeu deux acteurs : le client
   (_lpr_) permet  tout utilisateur de soumettre des travaux d'impression.
   Le serveur quant  lui (_lpd_) les prend en charge en tche de fond.
   Il rcupre les donnes dans le spool ainsi que des informations qui
   lui sont ncessaires pour l'impression proprement dite.

   Nous verrons dans un chaptre un peu plus loin comment tout cela
   interagit. Arrtons-nous l pour le moment et penchons-nous dj sur
   le plus important: les priphriques du systme.

3. Comment Imprimer

   Si le dmon d'impression de votre machine est correctement configur,
   vous pouvez lire le _Printing-Usage HOWTO_

   <http://www.loria.fr/services/linux/HOWTOFRENCH/Printing-Usage-HOWTO/P
   rinting-Usage-HOWTO.html

   qui traite plus particulirement de la commande lpr et de la
   manipulation des files d'impression.

   Si, par contre, vous venez d'installez un nouveau systme (un qui
   marche, quoi...) vous souhaitez certainement configurer les services
   d'impression. Restez sur cette chane :-) ne zappez pas et allons-y.

3.1 Les priphriques d'imprimantes dans le systme

   Les imprimantes sont souvent rattaches (surtout les imprimantes
   personnelles) au port parallle. Elles sont gres par les
   priphriques de type /dev/lp?.

   Si vous disposez d'une imprimante srie, vous utiliserez bien sr
   /dev/ttyS? (ou /dev/ttys?), et non pas /dev/lp? ni /dev/cua?. Le
   majeur de /dev/ttyS? est 4, celui de /dev/cua? est 5.

3.2 Le priphrique lp

  Noyaux antrieurs  2.1.32

   Si vous utilisez une imprimante parallle, vous devez disposer d'un
   noyau Linux compil avec les gestionnaires de priphriques
   d'impression lp. Verifiez-le  l'aide de la commande

      cat /proc/devices

   qui doit vous montrer un ou plusieurs priphriques lp. De plus le
   rpertoire /dev doit comporter la liste des priphriques /dev/lp0,
   /dev/lp1, ...

   Sur un systme de type XT, LPT1: correspond  /dev/lp0 (majeur 6,
   mineur 0), alors que sur un AT, LPT1: correspond  /dev/lp1 (majeur 6,
   mineur 1).

     Nom     Majeur  Mineur  Port
     lp0     6       0       0x3bc
     lp1     6       1       0x378
     lp2     6       2       0x278

   Le port parallle peut tre gr par le pilote du noyau de deux
   manires. D'une part par polling (scrutation), d'autre part par
   interruption. La mthode de gestion par interruption est en thorie
   plus efficace, puisque le gestionnaire n'est sollicit par une
   interruption qu'au moment o un travail est  effectuer. En pratique,
   il semble que ce soit dpendant de la machine. Dans beaucoup de cas,
   il n'y a pas tant de diffrence que cela.

   Un certain nombre d'utilisateurs se sont plaints que leur port
   parallle bidirectionnel n'tait pas dtect lorsqu'ils utilisent un
   vieux cable unidirectionnel. Vrifiez que le vtre est rcent.

   Vous ne pourrez pas utiliser les pilotes plip et lp en mme temps.
   Vous pouvez cependant charger l'un ou l'autre soit manuellement, soit
   par kerneld version 2.x (et noyaux au moins 1.3.x). En configurant les
   interruptions avec attention, vous pourrez thoriquement utilisez plip
   sur un port et lp sur l'autre. Quelqu'un l'a fait en modifiant les
   pilotes... J'attends avec impatience que quelqu'un me dise comment
   faire  partir d'une simple et ingnieuse commande.

   Un petit utilitaire appel tunelp vous permet, sous le compte
   super-utilisateur, de rgler les interruptions d'un priphrique lp,
   le mode de fonctionnement du pilote, la frquence de scrutation, et
   plein d'autres options...

   Avec LILO et LOADLIN, vous pouvez configurer les adresses et
   interruptions utiliss par le pilote.

     Syntaxe:      lp=port0[,irq0[,port1[,irq1[,port2[,irq2]]]]]

     Par exemple:   lp=0x378,0   ou   lp=0x278,5,0x378,7 **

   (**) le port lp0 en 0x3bc n'est plus utilis sur les PC rcents.

   Si cette caractristique est utilise, vous devez spcifier tous les
   ports que vous souhaitez utiliser, il n'y a pas de valeurs par dfaut.
   Vous pouvez invalider un pilote en indiquant lp=0.

   Lorsque le pilote est charg en tant que module (version noyau 2 et
   1.3.x), il est galement possible de spcifier les lignes
   d'interruption utilises soit dans le fichier /etc/conf.modules, soit
   sur la ligne de commande de insmod en utilisant la mme syntaxe. Les
   paramtres sont io=port0,port1,port2 et irq=irq0,irq1,irq2. Lisez les
   mages de manuel de insmod pour plus d'information.

   Le code source du pilote de port parallle se trouve dans
   /usr/src/linux/drivers/char/lp.c.

  Noyaux postrieurs  2.1.32: le priphriqueparport.

   Depuis le noyau 2.1.33 (il existe un patch pour la version 2.0.30), le
   priphrique lp est simplement un client du nouveau priphrique
   parport. L'ajout de ce parport corrige un certain nombre de problmes
   dont tait affubl lp - il peut partager le port avec d'autres
   pilotes, il met dynamiquement en relation les ports parallles
   disponibles avec les numros de priphriques plutt que de forcer une
   correspondance statique entre addresse d'entr/sortie et numro de
   port, ...

   Une prochaine version de ce document devrait couvrir le parport
   lorsque j'en aurai utilis un, mais en attendant, vous pouvez lire le
   fichier Documentation/parport.txt dans les sources du noyau, ou aller
   sur le site _parport_  http://www.cyberelk.demon.co.uk/parport.html

3.3 Les priphriques srie

   Les priphriques srie utilisables sont appels /dev/ttyS? (les
   priphriques /dev/cua? sont aussi srie mais pas utilisables dans ce
   domaine). L'utilitaire stty permet de visualiser ou de modifier les
   caractrtiques d'un port donn. setserial permet de controler et
   configurer les IRQ et adresses d'entre/sortie si besoin est.
   Rfrez-vous au _Serial-HOWTO_ pour de plus amples renseignements.

   Si vous utilisez une imprimante srie lente avec le contrle de flux,
   vous constaterez peut-tre que certaines impressions sont tronques.
   Ceci est certainement d au port srie dont le comportement par dfaut
   est de purger son tampon des caractres non transmis dans les 30
   secondes aprs sa fermeture. Une imprimante trop lente n'aura pas le
   temps de le vider. Le tampon peut contenir 4096 caractres.

   Si la commande cat file > /dev/ttyS2 produit une sortie correcte pour
   les fichiers courts et tronque pour les longs fichiers, vous tes
   peut-tre dans ce cas.

   Le dlai de 30 secondes peut tre ajust  l'aide du paramtre
   ``closing_wait'' (attente fermeture) de la commande setserial (version
   2.12 et ultrieure).

   Notez que les ports srie sont gnralement configurs au dmarrage de
   la machine grace  un appel  setserial dans le fichier
   /etc/rc.d/rc.serial. Vous pouvez rajouter toute option ncessaire dans
   ce fichier.

4. Les imprimantes supportes

   Le noyau Linux supporte quasiment toutes les imprimantes que vous
   pouvez physiquement connecter au port srie ou parallle. Il y a
   nanmoins des petites choses  savoir, notamment certaines imprimantes
    viter bien qu'elles puissent (lectriquement parlant) communiquer
   avec Linux. En premier lieu, il existe toute une gnration
   d'imprimantes incompatibles s'appuyant sur le ``Windows Printing
   System'' et qui rpondent au label ``pour Windows''. Ces imprimantes
   ne fonctionnent pas avec Linux. Elles font travailler l'unit centrale
   pour des tches normalement laisses au microprocesseur de
   l'imprimante. Malheureusement ces tches ne peuvent etre effectues
   que par le pilote du constructeur qui ne tourne que sous Windows.
   Conclusion n'achetez pas ce genre d'imprimante pour Linux.

   Evidemment, sous Linux, comme d'ailleurs sous tout autre systme, le
   meilleur choix est d'avoir une imprimante PostScript. Presquer tous
   les logiciels Unix produisent du _PostScript_ et bien videmment le
   mieux est d'avoir une imprimante qui le comprend. Cela simplifie.
   Malheureusement _PostScript_ n'est pratiquement pas disponible en
   dehors du domaine des imprimantes laser. Et c'est cher. Rassurez-vous,
   vous pouvez utiliser toute autre imprimante.

   Si vous ne comptez pas avoir de PostScript  imprimer, vous pouvez
   connecter une simple imprimante matricielle retrouve dans votre
   grenier. Sinon, comme nous le verrons, il faudra passer par un
   logiciel d'interprtation du _PostScript_ (le plus clbre est le
   logiciel gratuit _GhostScript_ de _Alladin software_). Utilisez alors
   une imprimante reconnue par ce logiciel.

   Voir http://www.cs.wisc.edu/~ghost/printer.html pour des informations
   mises  jour selon les versions disponibles et les pilotes en test.

   Les imprimantes supportes sont:

     Canon BubbleJet BJ10e
     Canon BubbleJet BJ200
     Canon BubbleJet BJC-210 (4.01) N/B seulement
     Canon BubbleJet BJC-240 (3.33, 4.03) N/B seulement
     Canon BubbleJet BJC-600
     Canon BubbleJet BJC-610 (3.53) 360dpi seulement, N/B & couleur. Voir corre
ctif bjc610.
     Canon BubbleJet BJC-4000
     Canon BubbleJet BJC-4100 (4.01) pas couleur.
     Canon MultiPASS C2500
     Canon BJC-240 (5.01)
     Canon BJC-70 (5.01)
     Canon BubbleJet BJC-800

     HP DeskJet (3.33)
     HP DeskJet Plus (3.33)
     HP DeskJet 500 (3.53)
     HP DeskJet Portable (4.01)
     HP DeskJet 400 (3.33, 4.03) N/B teste seulement.
     HP DeskJet 500C (3.53)
     HP DeskJet 540C (3.53)
     HP DeskJet 690C (4.03) 1bit/pixel et 32bit/pixel
     HP DeskJet 693C (4.03)
     HP DeskJet 550C (3.53)
     HP DeskJet 560C (3.53)
     HP DeskJet 600 (3.53) N/B teste seulement (1bit/pixel or 32bit/pixel)
     HP DeskJet 660C (3.53)
     HP DeskJet 682C (4.01) Utiliser gamma=0.3
     HP DeskJet 683C (3.33, 4.03)
     HP DeskJet 693C (4.03) 24bit/pixel
     HP DeskJet 850 (3.53) 300dpi
     HP DeskJet 870Cse (4.03) (16 ou 32 bits/pixel)
     HP DeskJet 850
     HP DeskJet 870Cse (4.03)
     HP DeskJet 870Cxi (4.03)
     HP DeskJet 680 (5.01)
     HP DeskJet 500C (3.53)
     HP DeskJet 500C (3.53)
     HP DeskJet 510 (3.53)
     HP DeskJet 520 (3.53)
     HP DeskJet 540C (3.53)
     HP DeskJet 693C (4.03)
     HP DeskJet 600 (3.53)
     HP DeskJet 600 (3.53) marges incorrectes
     HP DeskJet 870Cse (4.03)
     HP LaserJet 5 (4.01) 300dpi ou 600dpi
     HP LaserJet 5L (4.03) 300dpi ou 600dpi Marges incorrectes dans GS 3.33. Co
rrect dans GS 4.03.
     Oki OL410ex LED printer (4.03) 300dpi ou 600dpi
     HP PaintJet XL300
     HP DeskJet 600 (3.53) 300dpi OK, 600 dpi tres lent
     HP DeskJet 1200C (3.53)
     HP DeskJet 1600C (4.03) 24bit/pixel. -dShingling=2 -dDepletion=1 -dPrintQu
ality=1
     Ricoh 4081 laser printer (3.53)
     Ricoh 6000 laser printer (3.53)
     Epson Stylus Color (3.53)
     Epson Stylus Color II (3.53) -r360 -dMicroweave voir devices.txt et GS stc
olor FAQ
     Epson Stylus 500 (4.03) -r360 or -r720, -dMicroweave voir les notes
                             d'Alan Williams sur GS. (Ne marche pas avec 3.33.)
     Epson Stylus 800 (3.53) -sModel=st800

5. Quel dmon d'impression ?

   Jusque rcemment, le choix sous Linux tait simple puisque tout le
   monde disposait du seul dmon lpd sorti tout droit et presque tel quel
   du code BSD Net-2. Aujourd'hui la plupart des fournisseurs proposent
   ce logiciel. Mais les choses sont en train de changer. Les systmes
   SVR4 tels que Sun Solaris sont fournis avec un paquetage logiciel
   d'impression centr sur lpsched. D'autre part, sous Linux, quelques
   fournisseurs proposent LPRng, une implmentation beaucoup plus rcente
   et disponible gratuitement. LPRng est trs facilement administrable
   notamment sur des plate-formes importantes et contient du code plus
   robuste (moins farfelu??) que lpd.

   A l'heure actuelle malgr toutes ces nouveauts, lpd est certainement
   ce qui convient le mieux  la plupart des utilisateurs. Mme si ce
   n'est pas le fin du fin, il tourne bien une fois configur et, chose
   importante, il est trs bien document dans les livres sur Unix.

   Pour plus d'information sur LPRng, allez voir sur
   http://ltpwww.gsfc.nasa.gov/ltpcf/about/unix/Depotdoc/LPRng/.

6. L'impression, comment a marche

   Nous considrons ici que vous utilisez la suite logicielle lpd que
   nous dcrirons d'ailleurs. Elle est la plus rpandue et fonctionne
   trs bien.

6.1 Impression locale et impression distante

   L'impression locale permet aux utilisateurs d'envoyer des travaux
   d'impression  l'imprimante directement rattache  leur machine.

   L'impression distante, par contre, permet de soumettre des travaux
   d'impression depuis une machine,  une autre machine sur le rseau,
   sur laquelle est connecte une imprimante.

6.2 De quoi avez vous besoin

   Nous supposons que vous savez diter un fichier texte sous Linux et
   que vous avez une bonne comprhension des notions de droits d'accs et
   de proprit (chmod, chown).

   Nous supposons galement que votre systme Linux fonctionne
   correctement. En particulier, si vous souhaitez faire de l'impression
   distante, que votre rseau fonctionne dj.

   Consultez  ce propos les nombreuses documentations disponibles sur le
   sujet (comme on dit: RTFM, ce qui en bon francais veut dire LLBD :-)).

6.3 Les programmes importants

   Le systme d'impression Unix comprend (au moins) 5 programmes. Ils
   doivent se trouver  l'endroit dcrit (c'est le mieux) ou dans un
   rpertoire accessible (avec la variable PATH), appartenir  root
   (groupe lp), et avoir les permissions suivantes :

             -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

   Les quatre premiers sont utiliss pour soumettre, visualiser, annuler,
   contrler les travaux d'impression. Le dernier est le dmon.

   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 lpr, lpq, lpc et lprm oprent sur une
   imprimante par dfaut nomme lp. La variable d'environnement PRINTER
   peut contenir le nom de l'imprimante que vous avez choisie. La
   spcification du nom d'une imprimante sur la ligne de commande
   surchargera ces dfinitions (les imprimantes de l'exemple sont
   hors-ligne):

     # 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 ?)
     ...

  Le client et le serveur

   Voici ci-dessous les interactions client - dmon

                                              _________
                                            +/BlaBla  /+
                                           //________//|
                                          /          / +
+----------------+                       +----------+ /
|      LPR       |                       |=      oo |/
+----------------+                       +----------+
        |                                 Imprimante
        |                                     ^
        V                                     |
+----------------+                  +------------------+
|      LPD       |------>------>----|        LPD       |
+----------------+                  +------------------+

            Soumission d'un requete d'impression


+----------------+
|      LPQ       |
+----------------+
                  \
                   \_______>______
                                  \
+----------------+                 \+------------------+
|      LPD       |                  |        LPD       |
+----------------+                  +------------------+

            Soumission d'une demande d'information

   Lorsque le systme dmarre, lpd est charg. Il lit le fichier
   /etc/printcap (dont vous trouverez une explication plus loin) qui
   dcrit les imprimantes connues.

  Les fichiers soumis par le client

   Lorsqu'un programme client soumet un travail d'impression, il gnre
   deux fichiers qu'il crit dans le spool:

     * Un fichier de donnes qui contient une copie des donnes que vous
       souhaitez soumettre  l'imprimante. Il s'agit bien d'une copie, ce
       qui signifie que toute modification ultrieure de votre fichier
       n'altrera pas l'impression.
     * Un fichier de description du travail  effectuer.

  La commande lpr

   La commande lpr soumet un travail d'impression. Elle se charge de
   mettre les donnes  imprimer dans un fichier dans le spool
   d'impression. Ces donnes peuvent provenir soit d'un fichier (les
   donnes sont dupliques et toute modification ultrieure du fichier
   d'origine n'affectera pas l'impression), soit de l'entre standard
   (stdin). Le dmon est averti de l'existence d'un nouveau fichier et
   envoie, ds que possible, les donnes vers l'imprimante physique (ou
   la machine distante).

   La taille du spool est bien entendu limite  la place disponible sur
   votre disque dans /usr/spool/ ou  la taille limite spcifie dans le
   fichier de configuration printcap. Vous pouvez nanmoins imprimer un
   gros fichier en demandant  lpr de ne pas dupliquer le fichier. Le
   dmon d'impression ira alors chercher le fichier que vous indiquez
   dans la ligne de commande et non plus dans le spool.

  La commande lpq

   La commande lpq affiche le contenu du spool, pour une imprimante
   donne. Une des informations importantes fournies est le numro 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 lpd essaie d'envoyer  l'impression).

  La commande lprm

   La commande lprm enlve un travail de la file (et donc le fichier du
   spool). Vous pouvez soit spcifier un numro de job, soit un tiret
   permettant de supprimer tous les travaux vous appartenant. Si vous
   tes root, tous les travaux sont supprims. Pour supprimer les travaux
   d'un utilisateur, spcifiez son nom.

     # lprm 1
     dfA001Aa00484 dequeued
     cfA001Aa00484 dequeued
     #

   Le premier fichier contient les donnes  imprimer. Il a t cr par
   lpr. Le deuxime contient des informations que le dmon utilise pour
   savoir que faire des donnes (impression locale, distante, ...)
   Consultez le manuel en ligne : lpd(8).

  La commande lpc

   La commande lpc permet de contrler les travaux en cours ainsi que
   l'imprimante, et certains aspects de son utilisation. En particulier,
   vous pouvez dmarrer ou stopper la sortie des travaux du spool pour
   l'impression, valider ou invalider une imprimante, et mme modifier
   l'ordre d'impression des fichiers. Les commandes suivantes permettent
   d'invalider l'impression sur mon_imprimante, de valider le spool sur
   ton_imprimante, et de faire passer le job 37 en dbut de file:

     lpc down mon_imprimante
     lpc enable ton_imprimante
     lpc topq 37

   lpc peut fonctionner en interactif si aucun paramtre ne lui est
   pass. Vous pouvez lire les pages du manuel en ligne pour obtenir des
   instructions compltes. A noter que certaines actions de lpc sont
   rserves au super-utilisateur (root).

6.4 Les rpertoires importants

   Le rpertoire le plus important est le rpertoire de spool, dans
   lequel les donnes vont tre stockes avant d'tre imprimes.
   Typiquement, un systme sera configur pour avoir un rpertoire de
   spool par imprimante. Cela rend la gestion plus facile. Sur mon
   systme, par exemple, le rpertoire /usr/spool/lp est le rpertoire
   principal. Sous ce rpertoire, on y trouve le sous-rpertoire lpr0,
   correspondant  la dclaration que j'ai faite dans /etc/printcap pour
   le rpertoire de spool de mon imprimante.

   NDT: Ce qui va suivre dcrit une faon de faire pour donner les bons
   droits d'accs aux rpertoires de spool. Diffrentes mthodes 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 scurit de l'ensemble.

   Le rpertoire de spool doit appartenir  root, et au groupe lp, avec
   les droits de lecture/d'criture pour utilisateur et groupe, et
   lecture seule pour le reste du monde.

        chmod ug=rwx,o=rx lpr0
        chgrp lp lpr0

     drwxrwxr-x   2 root     lp           1024 Feb 11 10:51 lpr0/

   Un autre rpertoire doit galement tre prsent : /usr/spool/lpd avec
   les mmes droits. Vous aurez plus d'informations plus avant dans ce
   document.

6.5 Les fichiers importants

   En dehors des programmes que nous avons dj voqus prcdemment,
   quatre fichiers doivent se trouver dans chaque rpertoire de spool.
   Avec les versions rcentes des gestionnaires d'impression, vous n'avez
   pas  vous soucier de ces fichiers. Ils sont crs automatiquement
   s'ils n'existent pas : .seq, errs, lock et status. Ces fichiers
   doivent avoir les droits -rw-rw-r--. Le fichier .seq contient un
   compteur pour l'affectation des numros de jobs. Le fichier status
   contient le message devant tre mis par la commande lpc stat. Le
   fichier lock est utilis par le dmon pour qu'il n'imprime qu'un
   fichier  la fois. Le fichier errs contient les erreurs survenues sur
   l'imprimante.

   Le fichier errs n'est pas obligatoire. De plus, il peut s'appeler
   comme vous le souhaitez, pourvu que son nom soit dclar dans le
   fichier /etc/printcap que nous dcrirons dans la suite.

7. Configurer les services d'impression

   La configuration minimale pour un systme d'impression permet de
   mettre des fichiers en file d'impression puis de les imprimer. Il ne
   prte aucune attention au fait que votre imprimante puisse les
   imprimer (les comprendre mme) et ne vous permettra pas d'imprimer des
   choses extraordinaires. Nanmoins, c'est un premier pas.

7.1 Le fichier /etc/printcap

   Le fichier /etc/printcap dcrit toutes les imprimantes que votre
   systme doit connatre. Il peut tre modifi avec votre diteur
   prfr, doit appartenir  root et avoir les droits suivants:

     -rw-r--r--   1 root     system        164 Oct 25 21:23 /etc/printcap

   Le contenu du fichier semble assez incomprhensible  premire vue. Il
   respecte effectivement une syntaxe particulire et malgr les
   apparences, assez simple lorsque l'on connat ! Il n'y a pas toujours
   de manuels concernant ce fichier, et cela complique un peu les choses.
   Un petit conseil en passant : essayez, dans la mesure du possible de
   rendre votre fichier le plus lisible possible, avec des commentaires.
   Vous pouvez consulter les pages du manuel en ligne concernant
   printcap(5) (ou empressez-vous de les rcuprer si vous ne les avez
   pas). Plus loin sont dcrits les paramtres importants.

   Une entre de printcap dcrit une imprimante, c'est--dire une
   correspondance nom logique - imprimante physique, puis dcrit la faon
   de transmettre les donnes. Par exemple, une entre va dcrire le
   priphrique physique  utiliser, le rpertoire de spool, les
   traitements  effectuer sur les donnes avant impression, ou encore le
   rpertoire dans lequel seront notifies les erreurs. Vous pouvez aussi
   limiter la quantit de donnes pour un job, ou mme limiter l'accs
   d'une imprimante  une classe d'utilisateurs. Vous trouverez dans la
   partie suivante la description des champs.

   Il est tout  fait possible d'avoir plusieurs entres dcrivant
   diffrentes faons d'envoyer des donnes  une mme imprimante
   physique. Par exemple, une imprimante physique peut supporter les
   formats HP LaserJet et PostScript, en fonction de la squence de
   caractres envoye au dbut d'un travail. Vous dfinirez donc deux
   entres, l'une permettant de traiter le format HP, l'autre le format
   _PostScript_. Les programmes gnrant des donnes ``HP'' les enverront
    l'imprimante HP, ceux gnrant des donnes _PostScript_ les
   enverront  l'imprimante _PostScript_. Toutes les deux reprsentent la
   mme imprimante physique.

   Les programmes qui modifient les donnes avant de les envoyer 
   l'imprimante physique sont des filtres.

   Exemple d'entre d'un fichier /etc/printcap:

     # LOCAL djet500
     lp|dj|deskjet:\
             :sd=/var/spool/lpd/dj:\
             :mx#0:\
             :lp=/dev/lp0:\
             :sh:

   Ceci dfinit une imprimante dont les noms sont lp (par dfaut), dj et
   deskjet. Les deux derniers sont des alias de la mme imprimante. La
   file (on dit trs souvent le spool, mme en franais...) de cette
   imprimante de trouve dans le rpertoire /var/spool/lpd/dj (sd signifie
   spool directory). Le priphrique utilis est /dev/lp0. La page
   d'en-tte est supprime (sh) et aucune limite de taille de fichier
   n'est fixe (mx)

   Notez que la mme entre pourrait s'crire:

     lp|dj|deskjet:sd=/var/spool/lpd/dj:mx#0:lp=/dev/lp0:sh:

   mais c'est moins beau.

   Vous pouvez consultez la page de manuel de printcap sur

   http://www.picante.com/~gtaylor/pht/man/printcap.html. Toutes les
   options y sont dcrites.

   Tous les champs excepts les noms d'imprimantes sont entours de
   deux-points et reprs par un symbole de deux lettres suivi du signe
   gal. Ensuite est indique la valeur qui peut tre de type numrique,
   boolenne ou chane de caractres:

     champ           type            signification

     lp              string          designe le peripherique d'impression
     sd              string          designe le repertoire de spool
     lf              string          designe le fichier de rapport d'erreurs
     if              string          specifie le nom du filtre d'entree
     rm              string          designe le nom d'un site d'impression dist
ant
     rp              string          designe le nom d'une imprimante distante
     sh              booleen         indique s'il faut supprimer les en-tetes
     sf              booleen         indique s'il faut supprimer les sauts de p
ages
                                     de fin de travaux
     mx              numerique       indique la taille maximum d'un job
                                     (en blocs = 1Ko sous linux)

  Dtails sur le champ lp

   Si vous spcifiez /dev/null comme priphrique, tous les traitements
   se feront, mais tout partira  la poubelle. Ca semble ridicule, mais
   cela vous permet par exemple de tester une configuration. Lisez le
   chapitre ``Imprimantes qui ne sont pas de simples priphriques''. Si
   vous dsignez une imprimante distante avec rp et rm, lp doit contenir
   :lp=:.

   Ne laissez pas ce champ vide en cas d'impression locale, le dmon
   signalerait une erreur.

  Dtails sur le champ lf

   Tout fichier spcifi ici doit exister, sinon le rapport d'erreurs ne
   se ferait pas.

  Dtails sur le champ if

   Les filtres d'entre sont des utilitaires transformant les donnes
   qu'il reoivent sur leur entre standard en un format particulier
   qu'il sortent sur leur sortie standard. Typiquement, la conversion
   texte - _PostScript_ dj mentionne.

   Si vous spcifiez un filtre d'entre, le dmon n'envoie pas
   directement les donnes au priphrique. Il excute le filtre en
   dirigeant les donns sur son entre standard et en dsignant le
   priphrique de sortie comme sortie standard.

  Dtails sur les champs rm et rp

   Envoyer des donnes  une imprimante rattache  une machine distante
   est trs simple: il suffit de spcifier le nom de la machine avec rm
   et le nom de l'imprimante avec rp. S'assurer que l'entre lp est vide.
   A noter que les donnes seront d'abord mises dans le spool local avant
   d'tre transfres. Mme si votre imprimante est distante, il faudra
   galement un spool local.

  Dtails sur les champs sh et sf

   Les bannires concernent ventuellement les utilisations  plusieurs
   personnes. Elles identifient les jobs.

   La suppression de ces bannires vous permet d'conomiser du papier.
   Par contre la gestion des sauts de page sera plus intressante,
   surtout si vous utilisez des traitements de textes qui formatent
   toujours des pages pleines. Dans ce cas, pas besoin de saut de page
   supplmentaire. Vous auriez sinon une page blanche en fin de chaque
   travail. Si vous utilisez des listings ou autres documents, ajouter un
   saut de page garantit que chaque travail commancera bien en dbut de
   page.

  Dtail sur le champ mx

   Ce champ permet de limiter la taille des donnes pour chaque job. Le
   nombre  spcifier est en blocs de BUFSIZE (pardon, de 1 Ko) sous
   Linux. La valeur 0 rend la taille illimite, permettant la soumission
   de travaux limite uniquement  la taille du disque. Notez que la
   limite concerne la taille des donnes mises en spool, et non pas les
   donnes envoyes  l'imprimante physique. Si la limite est dpasse,
   le fichier est tronqu avec l'mission d'un message disant: lpr:
   <fichier>: copy file is too large.

   Cela peut tre intressant pour des imprimantes physiques en mode
   texte, notamment si des utilisateurs ou des programmes crent
   accidentellement des donnes trop volumineuses.

   Si vous manquez de mmoire de masse, pourquoi n'inventeriez-vous pas
   un filtre qui dcompresse ce qu'il a  envoyer  l'imprimante ? Vous
   soumettriez alors des donnes compresses.

8. Les filtres

   Si avec les explications prcdentes, tout marche c'est formidable,
   mais en rgle gnral, cela ne suffit pas. Regardez ci-dessous ce que
   l'on obtient sur la DeskJet 500, lorsque j'envoie un fichier texte:

Ceci est la premiere ligne.
                           Celle-ci est la deuxieme.
                                                    Voici la troisieme.

   Et alors l'impression d'un fichier _PostScript_... Vous obtenez le
   listing complet du code _PostScript_ avec les mme effets d'escalier.
   Une horreur.

   Il faut donc quelque chose de plus et c'est le rle des filtres. Les
   plus observateurs d'entre vous auront peut-tre remarqu l'existence
   des paramtres if (input filter) et of (output filter) dans le fichier
   printcap. Pour l'instant nous avons besoin de if.

   Un filtre est un simple programme excutable qui lit les donnes sur
   son entre standard et sort le rsultat sur sa sortie standard.

   Commenons par crire un script que vous appellerez filtre et qui
   ajoute des retours chariot avant chaque caractre fin de ligne. Ceci
   limine l'effet d'escalier.

     #!/usr/local/bin/perl
     # La ligne ci-dessous doit contenir le chemin complet vers perl
     # Ce script doit etre executable: chmod 755 filtre
     while(<STDIN>){chop $_; print "$_\r\n";};
     # Vous pouvez aussi vouloir terminer avec une fin de page: print "\f";

   Dans /etc/printcap, l'entre est modifie en consquence:

lp|dj|deskjet:\
             :sd=/var/spool/lpd/dj:\
             :mx#0:\
             :lp=/dev/lp0:\
             :if=/var/spool/lpd/dj/filtre:\
             :sh:

   Essayez d'crire le filtre en shell qui sera plus efficace que de
   charger perl. Bon allez, je vous aide un peu:

     #!/bin/sh
     if [ "$1" = -c ]; then
       cat
     else
       sed -e s/$/^M/
     fi
     # echo -ne suppose que /bin/sh correspond a bash
     echo -ne \\f

   Notez que '^M' symbolise le caractre retour-chariot et non pas un `^'
   suivi d'un 'M'. Dans emacs, pour saisir ce caractre, entrez la
   squence C-q C-m, alors que sous vi, entrez C-v C-m. Le test de $1
   permet d'invalider l'insertion du retour-chariot par la commande lpr
   -l A savoir que lpr gnre des paramtres qui sont passs au filtre.
   Par dfaut il passe -w0. Si l'option -l est donne, il passe -c. Ce
   script est traditionnellement nomm /usr/lib/lpf. Si vous avez
   plusieurs scripts de la sorte, une bonne ide consiste  les mettre
   tous dans un sous-rpertoire, par exemple /usr/lib/lpd.

   Il se peut aussi que votre imprimante puisse passer dans un mode
   permettant l'ajout de retour-chariots grce  une squence
   d'chappement. Voici un exemple de filtre utilisant la commande echo
   -ne pour envoyer cette squence:

     #!/bin/sh
     # Filtre pour imprimantes HP, permettant de traiter LF comme CRLF
     # La commande echo -ne suppose que /bin/sh correspond a bash
     echo -ne \\033&k2G
     cat
     echo -ne \\f

   Vous pouvez compliquer les filtres comme bon vous semble. Le mieux est
   d'avoir un filtre qui reconnat le fichier d'entre et le convertit au
   bon format pour votre imprimante. Un tel filtre est appel filtre
   magique. Ne vous embtez pas  les crire vous-mme, il en existe
   srement dj un qui vous convient. Allez voir sur
   tsx-11.mit.edu:/pub/linux/sources/usr.bin/magic-filter-x.y.tar.gz.

9. Les fichiers, leur emplacement et les droits d'accs

   Les diffrences qui existent entre les nombreuses distributions font
   que l'on ne peut ici tre exhaustif. Je pense que beaucoup de gens
   utilisent maintenant les distributions type slackware et on peut
   raisonnablement s'appuyer sur cet exemple.

   Pensez  inclure lpd dans le fichier rc.local aprs le dmarrage
   ventuel de syslogd. Voici les fichiers tels que l'on peut les
   trouver:

     -r-sr-xr-x   1 root     lp           9308 Aug 23 21:45 /usr/bin/lpq*
     -r-sr-xr-x   1 root     lp          10056 Aug 23 21:45 /usr/bin/lpr*
     -r-sr-xr-x   1 root     lp           8900 Aug 23 21:45 /usr/bin/lprm*
     -r-x------   1 root     lp           1596 Aug 23 21:45 /usr/bin/lptest*

     -r-xr-sr-x   1 root     lp          17160 Aug 23 21:45 /usr/sbin/lpc*
     -rwxr--r--   1 root     lp          34072 Aug 23 21:45 /usr/sbin/lpd*

   et pour chaque rpertoire de spool:

     /usr/spool/lp/lpr0/
     total 5
     drwxr-xr-x   2 root     lp           1024 Feb 12 15:15 ./
     drwxr-xr-x   3 root     lp           1024 Sep  2  1993 ../
     -rw-r----x   1 root     lp              4 Feb 12 15:15 .seq
     -rw-r--r--   1 root     lp              3 Feb 13 20:46 lock
     -rw-rw-r--   1 root     root           27 Feb 12 15:15 status

   Ces trois fichiers sont crs par lpr et lpd. Ils peuvent tre absents
   si vous ne les avez encore jamais lancs. Avec d'anciennes versions il
   fallait excuter touch sur ces fichiers ou bien modifier leurs droits.
   Les bugs concernant ces fichiers ont maintenant t corrigs dans les
   versions rcentes.

   Il est  noter galement que le groupe d'appartenance tait daemon
   avec d'anciennes versions, et est maintenant lp.

   Ne soyez pas surpris de trouver des choses lgrement diffrentes sur
   votre systme. D'un autre ct, si quelque chose ne fonctionne pas,
   pensez  souponner ces droits avant d'affoler nos botes aux lettres
   (Si vous saviez le nombre de courriers lectroniques reus et dont la
   solution se trouve l !).

   On peut trouver le programme lpr avec ou sans le bit setuid(root). En
   fait ce n'est pas si vident que cela. Tout dpend des droits et
   permissions des rpertoires de spool. Autant que je sache, il y a une
   totale scurit avec lpr, mme si il est setuid(root). Donc,  la
   limite, positionnez le bit pour ne pas vous soucier des droits d'accs
   au rpertoire de spool.

   Vous tes libre de mettre les binaires dans les rpertoires que vous
   voulez, bien qu'ils se trouvent couramment dans /usr/bin ou /usr/sbin.
   (lpc et lpd peuvent se trouver par exemple dans /etc). Certaines
   commandes tant intressantes pour tout utilisateur, il est bon de les
   laisser aux endroits habituels.

   Attention toutefois, car les gens qui conoivent les distributions
   sont galement libres de choisir. Pensez  supprimer les anciennes
   versions, si vous changez de distribution.

   L'emplacement du fichier de verrouillage principal du dmon lpd
   (lpd.lock), est fix en dur dans le code. Il se trouve dans
   /var/spool/lpd/lpd.lock. Donc, vous devrez prvoir un rpertoire
   /var/spool/lpd mme si votre rpertoire de spool est diffrent. Les
   binaires anciens mettaient ce fichier dans /var/spool/lpd.lock/

   Typiquement, chez moi, on trouve

     /var/spool/lpd/
     drwxr-xr-x   4 root     lp           1024 Aug 18  1994 ./
     drwxr-xr-x  18 root     root         1024 Aug 17  1994 ../
     -rw-r--r--   1 root     root            3 Feb 14 20:12 lpd.lock

     /var/spool/lp/lpr0
     drwxr-xr-x   2 root     lp           1024 Feb 12 15:15 ./
     drwxr-xr-x   3 root     lp           1024 Sep  2  1993 ../
     -rw-r----x   1 root     lp              4 Feb 12 15:15 .seq*
     -rw-r--r--   1 root     root            3 Feb 14 20:12 lock
     -rw-rw-r--   1 root     root           27 Feb 12 15:15 status

   Etant donn que l'on jongle en permanence entre /usr et /var, il est
   clair qu'un lien doit exister entre les deux. Soit vous dfinissez vos
   rpertoires dans /usr/spool/... et dfinissez le lien /var vers /usr,
   soit vous mettez tout sous /var/spool/lpd... et dfinissez le lien
   /usr/spool vers /var/spool.

   Si vous avez, comme moi, une partition root (/) et une partition /usr,
   les deux cas ne sont pas identiques. Dans le premier, vos fichiers
   seront stocks dans la partition de root, /var etant cr sous /, dans
   l'autre, ce sera dans la partition /usr, puisque /usr est mont. Vous
   pouvez aussi avoir un systme de fichiers /var rserv.

   Le fichier de configuration principal est /etc/printcap. Il existe
   aussi, pour l'impression distante, les fichiers /etc/hosts.allow et
   /etc/hosts.lpd.

   Dsormais, le rpertoire /etc est le rpertoire o sont situs les
   fichiers de configuration. Vous pouvez choisir de les mettre ailleurs,
   mais dfinissez toujours un lien symbolique de /etc vers vos fichiers.
   Si votre systme comporte des binaires qui vont toujours chercher leur
   configuration dans /usr/etc ou /etc/inet, ils sont srement trs
   anciens et vous gagneriez  mettre votre systme  jour.

10. Ou trouver des filtres d'impression ?

   Pas mal de filtres sont dj rdigs et disponibles sur _Sunsite_ ou
   _lip6_ dans /pub/sunsite/linux/system/printing.

10.1 Les filtres magiques

Titre:          magicfilter
Version:        1.1b
Date-entree:    04APR95
Description:    Un filtre d'impression automatique, extensible, parametrable.
                Detecte tout type de fichier pour lequel existe un utilitaire
                de conversion. Ce filtre est ecrit en C et completement control
e'
                par un fichier de configuration externe. Cette version
                apporte la creation "automagique" de ce fichier
                d'apres les logiciels installes sur votre systeme
                grace a 'GNU Autoconf'.
                Cette version corrige les bogues de la version 1.1/1.1a;
                En plus: filtres pour imprimantes PostScript non-ASCII
Auteur:         H. Peter Anvin <hpa@zytor.com>
Site-initial:   sunsite.unc.edu
                53000 /pub/Linux/system/printing/magicfilter-1.1b.tar.gz
licence-copie:  GPL

10.2 Les filtres APS

Titre:          apsfilter
Version:        4.9.1
Date-entree:    Lundi, 10. Juillet 1995, 21:22:35  MET DST
Description:    magicfilter for lpd with auto filetype detection
Mots-cles:      lpd magicfilter aps apsfilter
Site-initial:   sunsite.unc.edu
                /pub/Linux/system/printing/
                211KB aps-491.tgz
Platformes:     C-Compiler, gs Postscript emulator, pbmutils
Licence-copie:  GPL

   Les filtres APS se configurent dans l'entre _if_ du fichier
   /etc/printcap et convertissent la plupart des types de fichiers connus
   (texte, _PostScript_, dvi, gif, ...) en commandes comprhensibles par
   votre imprimante.

10.3 Les filtres EZ-magic

Titre:          ez-magic printer filter
Version:        1.0.5
Date-entree:    26 Janvier 1997
Description:    ez-magic est un filtre d'impression supportant 8 formats
                de fichiers (txt,ps,gif,bmp,pcx,png,jpg,tif).
                Il permet l'impression via un reseau (SMB), ou vers une
                imprimante locale. Lit depuis un fichier, STDIN ou lpd.
                Simple a utiliser et a configurer. Seul un fichier 'script'
                est necessaire, pas de multitudes de manuels et pilotes.
                Necessite des programmes de conversion (tels que netpbm et
                ghostscript). Ecrit en 'bash'. Ajout de nouveaux formats
                facile. Preconfigure pour HP DeskJet 870Cse en reseau.
                Comparable a apsfilter et autres.
Mots-cles:      magic filter, print, graphics, samba, network, smb,
                ghostscript, postscript, gif, jpg, simple
Auteur:         toby@eskimo.com (Toby Reed)
Maintenu-par:   toby@eskimo.com (Toby Reed)
Site-initial:   http://www.eskimo.com/~toby/ez-magic-1.0.5.tar.gz
                38 kb ez-magic-1.0.5.tar.gz
Site-secondaire:sunsite.unc.edu /pub/Linux/system/printing
                38 kb ez-magic-1.0.5.tar.gz
Licence-copie:  Copyright, droits complets de manipulation sauf 1 ou 2
                restrictions.

11. Les logiciels d'impression

   Les logiciels d'impression sont disponibles en France par exemple sur
   ftp://ftp.lip6.fr/pub/linux/sunsite/system/Printing.

11.1 GhostScript

   _GhostScript_ est un logiciel majeur pour l'impression sous Linux. En
   effet la plupart des logiciels gnrent du _PostScript_. Ce logiciel,
   gratuit, est capable de convertir le _PostScript_ en langage
   comprhensible par votre imprimante (si le pilote est disponible). Il
   joue le rle de filtre afin que vous puissiez considrer votre
   imprimante comme _PostScript_. Ceci vous simplifie grandement la vie.

   _GhostScript_ est disponible sous deux formes. Une version
   commerciale, appele _Alladin GhostScript_, peut tre utilise
   librement pour des besoins privs mais ne doit pas tre distribue par
   les distributions payantes de Linux. Elle est gnralement en avance
   d'une anne sur la version gratuite.

   La version gratuite est sous licence GNU et n'est rien d'autre qu'une
   version plus ancienne de _Alladin GhostScript_.

  Utiliser GhostScript

   gs est le nom de l'excutable. gs -help vous donne une aide rapide sur
   les paramtres disponibles. (La liste des pilotes est la liste des
   pilotes compils avec la version et non la liste complte.)

   Quoi que vous fassiez avec gs, il est conseill d'invalider l'accs
   aux fichiers (par -dSAFER). En effet _PostScript_ est un langage
   pleinement oprationnel et un fichier _PostScript_ peu scrupuleux peut
   endommager vos fichiers et vous donner un terrible mal de crne..

   Exemple de ligne de commande pour un imprimante Stylus 800

gs -dNOPAUSE -sDEVICE=escp2 -sPAPERSIZE=a4 -sOutputFile=/dev/lp1 fichier.ps

  Rglages

   La taille, l'aspect et la situation d'une image sur une page sont
   rgls par le pilote de l'imprimante dans _GhostScript_. Si vous
   trouvez que vos impressions sont tronques ou mal cadres il faudra
   soit retoucher le code du pilote (dconseill), soit modifier les
   fichiers de configuration (gs_init.ps, gamma.ps)

  Gamma, tailles de points, ...

   Il se peut que vous trouviez vos impressions trop sombres. Ceci peut
   arriver si votre imprimante n'a pas une dfinition suffisante. Dans ce
   cas vous devez crer votre propre fonction de transfert. Pour ceci,
   crez le fichier gamma.ps dans le rpertoire des librairies de
   _GhostScript_ et appelez le fichier sur la ligne de commande de gs
   avant le fichier  imprimer. Pour claricir le rsultat, vous devez
   diminuer les valeurs indiques. Notamment si votre pilote utilise
   l'algorithme de _Floyd-Steinberg_ pour rastriser les couleurs, des
   valeurs comprises entre 0.15 et 0.2 sont mieux adaptes.

     ---8<---- gamma.ps ----8<---
     %!
     %transfer functions for cyan magenta yellow black
     {0.3 exp} {0.3 exp} {0.3 exp} {0.3 exp} setcolortransfer
     ---8<------------------8<---

   Vous pouvez aussi modifier les dominantes de couleurs (voir le
   rpertoire /examples de _GhostScript_ qui contient une page de test
   des couleurs).

12. L'impression  distance

   Une des caractristiques de lpd est qu'il supporte l'impression sur
   des imprimantes rattaches  d'autres machines que la vtre. Avec, en
   plus, une combinaison de filtres soigne, vous aurez un systme
   d'impression transparent, rparti et performant.

12.1 Vers un hte Unix/lpd

   Pour que des machines distantes puissent utiliser l'imprimante
   attache  votre machine, le nom de ces machines doit tre rfrenc
   soit dans le fichier /etc/hosts.lpd, soit dans le fichier
   /etc/hosts.equiv. Ce sont des fichiers textes normaux, dans lesquels
   on indique un nom de machine par ligne.

   Il est prfrable de dclarer les machines dans /etc/hosts.lpd qui est
   spcialement rserv  l'impression, le fichier /etc/hosts.equiv
   donnant des droits plus tendus.

   Vous pouvez restreindre les droits d'accs distants par groupe ou par
   utilisateur. Les groupes autoriss sont indiqus grce au paramtre
   :rg=: du fichier printcap: rg=admin restreint l'utilisation aux
   utilisateurs du groupe admin. Le paramtre boolen :rs=: du mme
   fichier restreint l'accs aux utilisateurs ayant un compte sur votre
   machine.

  Avec lpd

   Pour imprimer vers une autre machine, vous devez crer une entre
   printcap telle que:

     # REMOTE djet500
     lp|dj|deskjet:\
             :sd=/var/spool/lpd/dj:\
             :rm=machine.out.there.com:\
             :rp=printername:\
             :lp=/dev/null:\
             :sh:

   Vous noterez qu'il doit bien exister un rpertoire de spool local gr
   par votre lpd local. Les fichiers soumis y seront copis puis envoys
   vers la machine distante.

  Avec rlpr

   Vous pouvez utiliser rlpr pour soumettre une impression directement 
   la machine distante sans passer par un dmon local et toute sa
   configuration. C'est particulirement intressant lorsque vous
   imprimer rarement et vers diffrentes imprimantes.

   rlpr s'appuie sur TCP/IP. Il n'est pas ncessaires que les imprimantes
   soient connues explicitement. N'ayant pas besoin de fichier printcap,
   il est plus facile  grer. Il est compatible avec lpr.

12.2 Imprimer vers une imprimante attache  Windows 95, NT, LanManager ou
Samba.

   Il existe un mini-document (Printing to Windows HOWTO) qui dcrit ceci
   trs bien.

   Il est possible de rediriger une file lpd vers un service d'impression
   SMB grce au programme smbclient
   (http://www.picante.com/~gtaylor/pht/man/smbclient.html). Samba
   contient un script (smbprint) qui fait cela. Vous devez mettre un
   fichier de configuration pour l'imprimante en question dans le
   rpertoire de spool et dcrire le programme smbprint en tant que
   filtre dans /etc/printcap:

     lp|remote-smbprinter:\
         :lp=/dev/null:sh:\
         :sd=/var/spool/lpd/lp:\
         :if=/usr/local/sbin/smbprint:

   Vous pouvez galement utiliser le programme smbclient pour soumettre
   un fichier directement  un service d'impression SMB sans impliquer
   lpd. Lisez la documentation de tous ces programmes pour plus
   d'information.

12.3 Vers une imprimante NetWare

   La suite logicielle ncpfs contient un utilitaire appel nprint qui
   fournit les mmes fonctionnalits que smbprint pour NetWare. Vous
   pouvez l'obtenir sur
   ftp://sunsite.unc.edu/pub/Linux/system/filesystems/ncpfs/. Avec ncpfs
   vous pouvez monter des volumes du serveur NetWare sous Linux. Vous
   pouvez galement soumettre des travaux d'impression vers NetWare ou
   mettre des travaux d'impression de NetWare en file sur votre systme
   Linux. Vous devez disposer d'un noyaux 1.2.x ou 1.3.54 et ultrieur.
   ncpfs _NE_ fonctionne _PAS_ avec un noyau 1.3.x (x < 54).

   Pour que nprint fonctionne via lpd, vous devez crire un shell-script
   pour diriger stdin sur l'imprimante NetWare. Vous l'installerez comme
   un filtre (if) d'une file d'impression lpd. Vous obtiendrez :

sub2|remote-NWprinter:\
             :lp=/dev/null:sh:\
             :sd=/var/spool/lpd/sub2:\
             :if=/var/spool/lpd/nprint-script:

   le script nprint-script ressemble  quelque chose comme :

     #! /bin/sh
     # Essayez en premier le compte invite (guest)sans mot de passe!
     /usr/local/bin/nprint -S net -U name -P passwd -q printq-name -

12.4 Vers une imprimante EtherTalk

   Le paquetage logiciel netatalk contient l'quivalent de nprint et
   smbclient. Rfrez-vous au Netatalk-HOWTO dans lequel est bien dcrite
   la procdure d'impression vers et depuis un rseau _Apple_.

12.5 Vers une imprimante HP ou autre imprimante Ethernet

   Certaines imprimantes (HP et autres) sont fournies avec une interface
   Ethernet que vous pouvez directement adresser pour soumettre vos
   travaux d'impression. Conformez-vous au manuel du constructeur. En
   gnral, ces imprimantes font ``tourner'' un lpd et fournissent une ou
   plusieurs files vers lesquelles vous pouvez imprimer. Une imprimante
   HP, par exemple, pourra fonctionner avec une entre printcap telle
   que:

lj-5|remote-hplj:\
             :lp=/dev/null:sh:\
             :sd=/var/spool/lpd/lj-5:\
             :rm=printer.name.com:rp=raw:

   Les imprimantes LaserJet HP avec une interface JetDirect ont en
   gnral deux files incorpores; l'une ``raw'' accepte le PCL (et
   peut-tre le PostScript), l'autre ``text'' accepte l'ascii pur (et
   s'arrange pour rsoudre d'elle-mme les problmes d'effets
   d'escalier).

   Dans un environnement dans lequel plusieurs imprimantes ne supportent
   pas le _PostScript_, il peut tre bon de configurer un serveur
   d'impression ddi vers lequel toutes les machines enverront leurs
   travaux et sur lequel GhostScript tournera.

12.6 Vers d'anciennes HP

   Certaines anciennes imprimantes HP ne supportent qu'un protocole mal
   foutu s'appuyant sur des connexions TCP, notamment les premirs
   modles  base de cartes JetDirect (et quelques JetDirectEx). Pour
   imprimer vers de telles imprimantes, vous devez ouvrir une connexion
   TCP vers un port ddi (9100) et envoyer votre impression vers cette
   connexion. Voici le script Perl correspondant :

     #!/usr/bin/perl
     # Thanks to Dan McLaughlin for writing the original version of this
     # script (And to Jim W. Jones for sitting next to Dan when writing me
     # for help ;)

     $fileName = @ARGV[0];

     open(IN,"$fileName") || die "Can't open file $fileName";

     $dpi300     = "\x1B*t300R";
     $dosCr      = "\x1B&k3G";
     $ends = "\x0A";

     $port =  9100 unless $port;
     $them = "bach.sr.hp.com" unless $them;

     $AF_INET = 2;
     $SOCK_STREAM = 1;
     $SIG{'INT'} = 'dokill';
     $sockaddr = 'S n a4 x8';

     chop($hostname = `hostname`);
     ($name,$aliases,$proto) = getprotobyname('tcp');
     ($name,$aliases,$port) = getservbyname($port,'tcp')
         unless $port =~ /^\d+$/;;

     ($name,$aliases,$type,$len,$thisaddr) =
             gethostbyname($hostname);
     ($name,$aliases,$type,$len,$thataddr) = gethostbyname($them);
     $this = pack($sockaddr, $AF_INET, 0, $thisaddr);
     $that = pack($sockaddr, $AF_INET, $port, $thataddr);

     if (socket(S, $AF_INET, $SOCK_STREAM, $proto)) {
     #    print "socket ok\n";
     }
     else {
         die $!;
     }
     # Give the socket an address.
     if (bind(S, $this)) {
     #    print "bind ok\n";
     }
     else {
         die $!;
     }

     # Call up the server.

     if (connect(S,$that)) {
     #    print "connect ok\n";
     }
     else {
         die $!;
     }

     # Set socket to be command buffered.

     select(S); $| = 1; select(STDOUT);

     #    print S "@PJL ECHO Hi $hostname! $ends";
     #    print S "@PJL OPMSG DISPLAY=\"Job $whoami\" $ends";
     #    print S $dpi300;

     # Avoid deadlock by forking.

     if($child = fork) {
         print S $dosCr;
         print S $TimesNewR;

         while (<IN>) {
             print S;
         }
         sleep 3;
         do dokill();
     } else {
         while(<S>) {
             print;
         }
     }

     sub dokill {
         kill 9,$child if $child;
     }

12.7 Les filtres d'entre pour des imprimantes distantes

   Une des bizarreries de lpd est que le filtre d'entre (if) n'est pas
   excut pour des imprimantes distantes. Si vous devez absolument
   passer par un filtre, il vous faudra utiliser deux files, la premire
   redirigeant vers la deuxime. Par exemple :

     lj-5:remote-hplj:\
             :lp=/dev/null:sh:\
             :sd=/var/spool/lpd/lj-5:\
             :if=/usr/lib/lpd/filter-lj-5:
     lj-5-remote:lp=/dev/null:sh:rm=printer.name.com:\
             :rp=raw:sd=/var/spool/lpd/lj-5-raw:

   et le filtre filter-lj-5 (exemple):

     #!/bin/sh
     gs <options> -q -dSAFER -sOutputFile=- - | \
             lpr -Plj-5-remote -U$5

   L'option -U ne fonctionne que si lpr est lanc en tant que dmon. Elle
   positionne correctement le nom du soumissionnaire du travail dans la
   deuxime queue. Il serait d'ailleurs mieux d'utiliser une mthode plus
   sre pour rcuprer ce nom car ce n'est pas toujours le 5me
   paramtre.

12.8 Imprimer depuis Windows

   L'impression depuis un client Windows vers un serveur Unix est
   directement support par SMB en utilisant le paquetage SAMBA (qui
   supporte galement le partage de fichiers du systme de fichiers Linux
   vers les clients Windows).

   Samba est fourni avec une documentation complte. Vous pouvez soit
   installer un filtre magique sur Linux et imprimer du _PostScript_ soit
   installer un pilote d'imprimante spcifique sous Windows et dcrire
   une file sans filtre. En s'appuyant sur les pilotes Windows, vous
   pourrez obtenir de meilleurs rsultats, mais c'est un peu plus
   compliqu  administrer si vous avez plusieurs stations sous Windows.
   Donc essayez d'abord la premire solution.

12.9 Depuis Netware

   Il y a des services NetWare disponibles pour Linux, mais je n'ai
   aucune ide si vous pouvez offrir des services d'impression depuis des
   client Netware. Des informations sont les bienvenues.

12.10 Depuis un Apple

   Netatalk permet d'imprimer depuis une station Apple sur EtherTalk.
   Voir le Netatalk HOWTO (http://thehamptons.com/anders/netatalk) pour
   de plus amples renseignements.

12.11 Imprimer vers un fax

  Utiliser un modem/fax

   Si vous disposez d'un modem/fax, vous pouvez configurer votre systme
   pour envoyer ou recevoir des fax aux formats _PostScript_, dvi, ascii,
   etc... Vous pourrez mme faire en sorte que votre courrier
   lectronique soit fax!

   Les modems/Fax supportent les commandes de classe 1 ou 2. Les modems
   de classe 1 ont un sous-ensemble de fonctionnalits d'un fax disons
   traditionnel (donc, le logiciel doit faire le reste... et le cot de
   traitement est parfois critique!)

   La classe 1 correspond au standard EIA 578. Les modems de classe 2
   rpondent au sandard EIA 592. Vous trouverez dans la documentation de
   votre modem  quelle classe il appartient. Ne confondez pas classe et
   groupe. Le groupe est gnralement le groupe III.

   Les logiciels de fax tournant sous Linux doivent savoir convertir les
   donnes reues en un format compatible avec le groupe III pour la
   transmission. Comme d'habitude _Ghostscript_ sait faire ! Le pilote
   tiffg3 gnre des messages fax encods au format g3/tiff. Vous devrez
   compiler et intgrer le pilote si ce n'est dj fait.

   Un des logiciels les plus complets sur le sujet, HylaFax est
   disponible sur :

     ftp.sgi.com:/sgi/fax/?????.src.tar.Z

   Il supporte toutes sortes de choses comme les multiples modems et la
   diffusion.

   mgetty + sendfax est un couple de logiciels, contenant un getty pour
   Linux et les modems fax ainsi qu'un logiciel d'envoi de fax assez
   simple. Ce paquetage se trouve :

     sunsite.unc.edu:/pub/Linux/system/serial/getty/mgetty+sendfax-1.0.0.tar.gz

   Enfin, efax mrite d'tre mentionn. C'est un excellent choix pour
   Linux. Il supporte les classes 1 et 2.

     sunsite.unc.edu:/pub/Linux/apps/serialcomm/fax/efax08a.tar.gz

   (Rpertoire dans lequel on trouvera galement vfax10.tar.z,
   qfax1.3.tar.gz, xfax.v1.07s.tar.gz)

  Utiliser le service d'impression distant

   C'est un service exprimental vous permettant d'envoyer un courrier
   lectronique que vous souhaitez imprimer sur un fax distant. Des
   formats tels que PostScript sont supports. Bien que la couverture
   gographique de ce service soit trs faible, il est trs prometteur.
   Pour plus d'information, rfrez-vous au site Web ``Remote Printing
   WWW Site'' (http://www.tpc.int/).

13. Les logiciels qui permettent de raliser de belles impressions

   Linux sait faire tourner un grand nombre de binaires avec plus ou
   moins de russite: Linux/x86, Linux/Alpha, Linux/Sparc, iBCS, Windows
   (Un jour, avec Wine), Mac/68k (avec Executor) et Java. WordPerfect,
   traitement de texte commercial tourne bien avec l'mulation iBCS. La
   suite Corel Office en Java est galement prometteuse...)

   En ce qui concerne Linux, les choix sont limits aux logiciels Unix
   classiques:

13.1 Les langages  balises

   La plupart des langages baliss sont bien adapts aux projets
   consquents ou rptitifs pour lesquels vous souhaitez que
   l'ordinateur contrle la mise en forme pour un rsultat homogne.
   Vouloir ajouter un bel effet dans un tel langage choquera
   certainement.

  nroff

   C'est l'un des plus anciens langages baliss sous Unix. Les pages de
   manuel en ligne sont l'exemple le plus connu de pages formattes en
   macros nroff; beaucoup de gens ne jurent que par lui... mais sa
   syntaxe est quand mme plus complique que ncessaire; ce n'est
   certainement pas le bon choix pour les nouveaux projets. Il est
   intressant de savoir que vous pouvez imprimer une page de manuel
   directement en PostScript avec groff. La syntaxe est la suivante: man
   -t truc | lpr. Le rsultat en vaut vraiment la peine.

  TeX

   TeX (et le paquetage de macros LaTeX) est l'un des langages baliss le
   plus rpandu sous Unix. Les travaux techniques sont souvent rdigs en
   LaTeX parce qu'il simplifie grandement la mise en page et il est l'un
   des rares logiciels  traiter correctement et puissamment les fomules
   mathmatiques. Le format de sortie de TeX est dvi, et peut tre
   converti en _PostScript_ ou PCL (HP)  l'aide du programme dvips ou
   dvilj.

  SGML

   Il y a au moins un interprteur de SGML gratuit sous Unix et Linux; il
   est la base du systme de documentation LinuxDoc-SGML. Il supporte
   bien entendu d'autres types de documents.

  HTML

   Bien connu, il permet d'crire des documents simples.

13.2 Traitements de textes WYSIWYG

   Ca y est! Linux et Unix ne manquent plus de tels traitement de texte.
   Il existe plusieurs suites logicielles dont une disponible
   gratuitement pour une utilisation personnelle: _StarOffice_.

  StarOffice

   Une compagnie allemande distribue StarOffice pour Linux. On peut
   trouver une version libre de droits sur les serveurs ftp classiques.
   Cette version est limite  un usage personnel. Cette suite logicielle
   est trs complte; vous trouverez tout ce dont vous rviez. Il existe
   d'ailleurs un mini-HOWTO dcrivant o la trouver et comment
   l'lnstaller. La plupart des imprimantes sont reconnues.

  LyX

   LyX est une interface pour LaTeX assez prometteuse. Rendez-vous sur la
   page Web de Lyx 
   http://www-pu.informatik.uni-tuebingen.de/users/ettrich/ pour de plus
   amples renseignements.

  L'interface utilisateur 'Andrew'

   Cette interface comprend un diteur WYSIWYG appel ez comportant la
   plupart des fonctionnalits de base d'un traitement de texte: HTML, et
   MIME pour courrier et forums de discussions (niouzes, si vous
   prfrez).

  Offres commerciales

   Caldera et Red Hat vendent des paquetages logiciels comprenant les
   applications principales,  savoir un traitement de texte et un
   tableur. Caldera vend galement ( vrifier) WABI, l'mulation Windows
   de Sun qui permet de faire tourner les applications de Microsoft bien
   connues.

   Pour plus d'information, consultez les sites de Caldera
   (http://www.caldera.com) et de Red Hat (http://www.redhat.com).

   D'autres vendeurs peuvent m'envoyer un courrier descriptif de leur
   offre.

14. Logiciels de pr-visualisation

   Tout ce que vous imprimez peut tre galement visualis  l'cran.
   Ceci permet dans bien des cas d'conomiser du papier.

14.1 PostScript

   GhostScript possde un pilote X11 utilis par Ghostview
   (http://www.picante.com/~gtaylor/pht/man/ghostview.html). La dernire
   version de ce logiciel devrait permettre galement la visualisation de
   fichiers au format PDF.

14.2 TeX dvi

   les fichiers TeX dvi (DeVice Independent - indpendant du
   priphrique) peuvent tre visualiss sous X11  l'aide de xdvi
   (http://www.picante.com/~gtaylor/pht/man/xdvi.html). Les versions
   rcentes de xdvi appellent ghostscript pour le rendu de spcificits
   _PostScript_.

   Un pilote VT100 (dgvt) existe galement. Tmview fonctionne sous Linux
   avec svgalib, si cela vous suffit.

14.3 Adobe PDF

   _Acrobat Reader_ d'Adobe est disponible pour Linux. Vous pouvez le
   charger depuis http://www.adobe.com. Vous pouvez galement utiliser
   xpdf, un logiciel gratuit fournit avec les sources. _GhostScript_,
   devrait, comme je l'ai dit plus haut, supporter le format pdf.

15. Les imprimantes srie

   Le dmon lpd fournit cinq attributs que vous pouvez positionner dans
   /etc/printcap afin de contrler le port srie sur lequel se trouve
   votre imprimante.

br
     (numerique) definit le taux de transfert en bauds (appel a ioctl(2))
fc
     (num) efface des indicateurs (sgtty.h)
fs
     (num) positionne des indicateurs (inverse de `fc')
xc

xs

   Pour dfinir la vitesse du port, la syntaxe est vidente. Exemple: br
   \#9600.

   Les autres paramtres  positionner correspondent  un ensemble de
   bits, que l'on pourra soit positionner, soit mettre  0. Pour effacer
   des bits, on utilisera les paramtres fc et xc, pour les positionner,
   fs et xs.

   Faites bien attention aux bits que vous slectionnez. Mais au fait que
   sont-ils ? Souvenez-vous..., la commande stty. Elle indique de
   nombreux paramtres caractrisant un tty. La commande stty -a affiche
   en clair les paramtres du tty, certains d'entre-eux tant prcds
   d'un tiret s'ils sont invalids et sans tiret s'ils sont valids. La
   commande stty peut tre appliqus au port srie (voir exemple). Ce
   sont certains de ces paramtres (des drapeaux, des flags, donc des
   bits) que l'on va manipuler.

     # stty -a < /dev/ttyS2
          speed 9600 baud; rows 0; columns 0; line = 0;
          intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>;
          eol2 = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase
= ^W;
          lnext = ^V; min = 1; time = 0;
          -parenb -parodd cs8 hupcl -cstopb cread -clocal -crtscts
          -ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr
          -igncr -icrnl ixon -ixoff -iuclc -ixany -imaxbel
          -opost -olcuc -ocrnl -onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0
          bs0 vt0 ff0
          -isig -icanon -iexten -echo -echoe -echok -echonl -noflsh -xcase -tos
top
          -echoprt -echoctl -echoke

   Note: utilisez toujours stty de cette faon (stty < /dev/ttyS?); cette
   command utilise en effet l'entre standard).

   Vous pouvez utiliser cette commande pour configurer le port de faon 
   obtenir une impression correcte. Par exemple, les diffrences que l'on
   peut noter entre le stty ci-dessus et l'initialisation du port au
   dmarrage de ma machine rside dans les informations -clocal, -crtscts
   et ixon. (La configuration de votre port pourra trs bien tre
   diffrente selon la manire dont votre imprimante gre le contrle de
   flux).

   Votre port tant bien configur, faites : cat fichier > /dev/ttyS? (?
   est le numro de votre port) pour imprimer un fichier.

   Imprimez par exemple le fichier
   /usr/src/linux/include/asm-i386/termbits.h. Vous y dcouvrirez un tas
   de dfinitions de constantes et de structures. Nous allons voir
   quelles valeurs dfinies dans ce fichier vont nous servir pour
   configurer le port, non plus avec stty, mais avec les paramtres fc,
   xc, fs et xs du fichier printcap. Regardez la section commenant par :

     /* c_cflag bit meaning */
     #define CBAUD   0010017

   Elle dcrit justement les bits manipulables  l'aide de fc et fs dont
   on parlait. On y voit les constantes des vitesses de modulation en
   baud, puis des lignes qui nous intressent particulirement : ce sont
   les mmes paramtres que dans la commande stty. Je sens que vous voyez
   o on veut en venir. stty n'est qu'un interface ncessaire au
   positionnement (ou effacement) de bits.

   Vous savez maintenant que chaque paramtre affich par stty correspond
    un bit, et qui ont la valeur 0 lorsqu'il y a un tiret devant. Notez
   alors les bits  effacer (ce sera fait avec la paramtre fc) et ceux 
   positionner (paramtre fs). Exemple: `fc\#0177777' (Attention le
   paramtre fc semble surcharger le paramtre br, donc prenez garde 
   les positionner correctement).

   Ensuite occupez-vous des bits  positionner. Par exemple s'il faut
   positionner les bits cs8, hupcl et cread, regardez les constantes CS8
   (0000060), HUPCL (0002000) et CREAD (0000200). Pensez  la vitesse de
   modulation qu'il faut aussi dfinir, dans mon cas, ce sera B9600
   (0000015). Tous ces bits ensemble font `0002275'. Indiquez cette
   valeur au paramtre fs.

   Effectuez les mme rglages avec la section suivante intitule

     /* c_lflag bits */

   Dans mon cas je n'ai rien  positionner, j'ai donc simplement 
   fournir la valeur xc\#0157777, puis xs\#0. Une fois votre fichier
   printcap correctement dfini, essayez d'imprimer. Si quelque chose ne
   va pas, continuez  lire les paragraphes suivants.

   Souvenez-vous de toujours commencer par les bits que vous souhaitez
   voir  0 (fc et xc), puis de dfinir seulement aprs des bits 
   positionner (fs et xs).

   La commande cat fonctionne pour le port srie, mais pas lpd

   La mise en place de lpd n'est pas traite ici, mais sachez que si vous
   avez des problmes avec la configuration du port srie, vous pouvez
   empcher lpd de le configurer en considrant votre imprimante comme ne
   prsentant pas une interface normale. Lisez galement  ce propos le
   chapitre suivant.

   Donnez  votre imprimante le priphrique /dev/null1 (mknod /dev/null1
   c 1 3). N'utilisez pas /dev/null, pour ne pas qu'il soit ouvert de
   manire exclusive. Enlevez les paramtres de vitesse et de
   positionnement des bits du fichier printcap.

   Crez un shell-script comme ci-dessous :

         #!/bin/sh
         echo if: $* >> /var/spool/lpd/results
         # /dev/lp est un lien vers /dev/ttyS2 auquel est reliee l'imprimante
         exec votre_vieux_filtre $* > /dev/lp

   ...ou si vous n'avez pas de paramtre `if' configur...

         #!/bin/sh
         echo if: $* >> /var/spool/lpd/results
         cat > /dev/lp
         # la commande ``echo -ne'' suppose que /bin/sh correspond a bash
         echo -en \\f > /dev/lp

   Donnez-lui les droits de lecture/criture pour tout le monde.
   Essayez-le: /usr/lib/lpd/if <FICHIER.

   Dfinissez un filtre d'entre dans votre fichier printcap pour appeler
   ce script. :if=/usr/lib/lpd/if:.

   Utilisez la commande stty pour configurer le port correctement.
   Essayez d'imprimer. Vous devriez pouvoir dterminer si le(s)
   fichier(s) sont bien mis dans le rpertoire de spool. Cela devrait
   imprimer, si votre essai manuel du script prcdent a fonctionn. Bien
   entendu, le mieux serait de pouvoir se passer du script d'entre et
   donc du paramtre if.

   Supposons donc que la mthode prcdente a fonctionn, et que vous
   pensez avoir correctement configur votre fichier printcap. Excutez
   la commande stty -a </dev/ttyS?. Si certains paramtres ne sont pas
   corrects, vrifiez les constantes du fichier termbits.h. Si la
   configuration est incorrecte, malgr tous vos efforts de vrification,
   n'hsitez pas  installer un dmon rcent.

15.1 Imprimantes anciennes et caractres perdus

   Certaines anciennes imprimantes sries ont des petits tampons mmoire
   et grent mal le contrle de flux. Supprimer le FIFO du port srie
   (16550) avec setserial (faites croire  setserial que c'est un port
   8250 et a marchera).

16. Complments et rglages

   Si votre imprimante est _PostScript_, elle peut ne pas tre capable de
   traiter du texte pur. Si tel est le cas, vous devrez mettre en place
   un filtre pour transformer le texte en _PostScript_. Un excellent
   freeware (logiciel libre de tout droit de distribution et
   d'utilisation) appel nenscript ralise cela trs bien. Si vous ne
   mettez pas en place un tel filtre, vous devez vous assurer par
   d'autres moyens que l'imprimante ne reoit bien que du _PostScript_.

   Vous pouvez galement dfinir dans vos fichiers de login (.profile,
   par exemple) ou celui par dfaut, une variable d'environnement PRINTER
   dfinissant l'imprimante  utiliser. Exemple:

     export PRINTER=lpr0

   Ceci vite d'avoir  spcifier -Plpr0  chaque fois.

   Il est possible de ``rutiliser'' une entre printcap. Si vous
   dclarez votre propre machine comme machine hte distante, et une
   autre imprimante comme imprimante distante, vous pouvez rediriger les
   donnes  imprimer de l'une vers l'autre. Souvenez-vous que si vous
   utilisez cette technique, les donnes passeront par chaque filtre de
   la chane et seront mises successivement dans chaque spool.

   Bien que vous puissiez spcifier pour une imprimante autant d'alias
   que vous le souhaitez, il semble que pour la meilleure utilisation,
   les deux premiers doivent tre identiques et doivent correspondre au
   nom rel. Certains programmes n'utiliseront que ces deux entres. La
   commande lpc indiquera seulement le premier alias, alors que les
   commandes lpr, lprm et lpq comprennent tous les alias.

   Plutt que de spcifier une taille maximum de fichier pour
   l'impression, vous prfereriez sans doute que les fichiers du spool ne
   puissent remplir votre disque, mme temporairement. Pour ce faire,
   crez un fichier appel minfree dans chaque rpertoire de spool,
   contenant, sous forme d'un nombre de blocs (1 Ko pour Linux), la
   quantit minimum d'espace disque devant rester pour que les donnes
   puissent tre acceptes dans le spool. Vous crerez un fichier rel
   dans le rpertoire principal de spool et, dans chaque sous-rpertoire,
   un lien symbolique vers ce fichier.

17. Rsum

   Voici un guide de configuration tape par tape pour une imprimante
   nomme /dev/lp0. Vous pouvez l'tendre  votre guise. Pour faire ce
   qui suit, vous devez tre root. (NDT: L'auteur a tout install dans
   /usr/spool/lpd. J'ai prfr modifier lgrement cette configuration
   en dfinissant /usr/spool/lp/lpr0 et /usr/spool/lpd, comme dans la
   plupart des distributions)

     * Vrifiez les droits d'accs et l'emplacement de lpr, lprm, lpq,
       lpc et lpd. Voir  ce propos: Les programmes importants.
     * Crez le rpertoire de spool pour votre imprimante, appele dans
       notre exemple lpr0:

         mkdir /usr/spool/lp /usr/spool/lp/lpr0
         chowm root.lp /usr/spool/lp /usr/spool/lp/lpr0
         chmod ug=rwx,o=rx /usr/spool/lp /usr/spool/lp/lpr0

     * Crez un rpertoire permettant au dmon d'y mettre son propre
       fichier de verrouillage lpd.lock:

         mkdir /usr/spool/lpd
         chowm root.lp /usr/spool/lpd
         chmod ug=rwx,o=rx /usr/spool/lpd

     * Dans les rpertoires /usr/spool/lp/lpr0 et /usr/spool/lpd, crez
       les fichier ncessaires, avec les bons droits (Cette manipulation
       n'est pas ncessaire avec les versions rcentes du gestionnaire
       d'impression):

         cd /usr/spool/lp/lpr0
         touch .seq errs status lock
         chown root.lp .seq errs status lock
         chmod ug=rw,o=r errs status
         chmod u=rw,go=r lock
         chmod u=rw,g=r,o=x .seq

         cd /usr/spool/lpd
         touch .seq errs status lock
         chown root.lp .seq errs status lock
         chmod ug=rw,o=r errs status
         chmod u=rw,go=r lock
         chmod u=rw,g=r,o=x .seq

     * Crez le shell-script filtre_entree dans le rpertoire
       /usr/spool/lp/lpr0. Utilisez le filtre dcrit prcdemment.
       Donnez-lui les bons droits.

         cd /usr/spool/lp/lpr0
         chmod ug=rwx,o=rx filtre_entree

     * Crez le fichier /etc/printcap, s'il n'existe pas. Enlevez les
       entres qu'il contient et ajoutez une entre de test dcrite
       prcdemment. Donnez-lui les droits -rw-r--r--.
     * Editez le fichier /etc/rc.d/rc.local ou rc.multi. Ajoutez la ligne
       /usr/sbin/lpd  la fin. Cela lancera le dmon au boot. Vous pouvez
       aussi le lancer  la main :

root# /usr/sbin/lpd

     * Effectuez un test d'impression :

         ls -l | lpr -Plpr0

     * Regardez dans /tmp et vrifiez la prsence du fichier testlp.out.
       Il devrait contenir le listing du rpertoire dans lequel vous
       tiez.
     * Editez /etc/printcap. Dupliquez l'entre lpr0. Vous avez alors 2
       entres identiques. Dans la premire entre, changez, sur la
       premire ligne uniquement, les occurrences de lpr0 par testlp.
       Dans la seconde entre, changez /dev/null par le priphrique
       rel, par exemple /dev/lp0. Dans la seconde entre, enlevez le
       champ if compltement.
     * Rebootez le systme ou tuez le dmon d'impression et relancez-le,
       afin qu'il reprenne en compte le fichier /etc/printcap modifi.
     * Refaites un test d'impression - Allumez votre imprimante. Cela
       devrait imprimer!

         ls -l | lpr -Plpr0

18. Problmes avec la LaserJet 5M

18.1 PostScript

   Cette imprimante peut poser des problmes d'impression en PostScript.
   Si vous constatez, aprs avoir imprim un document PostScript, qu'elle
   ne sort plus les documents suivants et qu'elle affiche ``DATA
   RECEIVED'' en permanence, suivez les conseils qui suivent. Merci 
   <Patrick.Begou@hmg.inpg.fr>.

     * l'imprimante est en configuration d'usine avec le flag
       d'impression des erreurs postscript valid.
     * Le fichier printcap est trs simple:

# /etc/printcap
#
# This file can be edited with the printtool in the control-panel.
laser5M|lp:\
    :lp=/dev/lp2:\
    :sh:\
    :sd=/var/spool/lpd/laser5M:\
    :lf=/var/spool/lpd/laser5M/erreurs:\
    :if=/var/spool/lpd/laser5M/filter_court:

     * Le filtre utilis (filter_court) est donn ci-dessous. Il
       n'accepte que les fichiers _ascii_, _PostScript_ et _PostScript
       compress_. Ce qui est intressant, ce sont les chaines
       d'initialisation en PCL. En gros:

\033%-12345X      passage en mode PCL (d'apres l'ingenieur de MDS)
\033E             reinitialisation de l'imprimante les \n
                  semblent indispensables dans le filtre.

       Avec echo -ne, Esc c'est 033 en octal (27 en dcimal )

#!/bin/sh
#
# Filtre d'impression gerant l'ascii, le postscript et le postscript
# compresse pour une laserjet  5M. A declarer comme filtre "if" dans
# /etc/printcap.
# Reinitialise l'imprimante entre chaque impression postscript pour
# eviter les erreurs sur timeout.
#
# Version 0.1   P. BEGOU    8/97  (Patrick.Begou@hmg.inpg.fr)
#
# recuperation des donnees dans un fichier temporaire
#
FILE=/tmp/laser5M.$$
cat - > ${FILE}
#
# Scrutation du type de fichier
#
filetype=`file $FILE| cut -d":" -f2`
case $filetype in
  *PostScript*)
       (echo -ne "\033%-12345X\n"; cat ${FILE}; echo -ne "\033%-12345X\033E\033
%-12345X\n")
        echo " $FILE postscript" >&2
        ;;
  *text*|*script*)
       (echo -ne "\033%-12345X\n"; /usr/bin/nenscript -s -2rG -p- ${FILE};
        echo -ne "\033%-12345X\033E\033%-12345X\n")
        echo " $FILE texte" >&2
        ;;
  *compress*)
       # verifions qu'il s'agit bien de postscript.
       resu=`zcat ${FILE} |head -1|grep "^%!"|wc -l`
       if [ ${resu} -eq 1 ]
       then
          (echo -ne "\033%-12345X\n"; zcat ${FILE}; echo -ne "\033%-12345X\033E
\033%-12345X\n")
          echo " $FILE compresse" >&2
       else
          echo " $FILE compresse non reconnu" >&2
       fi
       ;;
  *)
        echo " $FILE non reconnu" >&2
        ;;
esac

#
# On repond Ok, tout s'est bien passe.
#
rm ${FILE}
exit 0

18.2 Recto-verso

   Voici comment configurer, par logiciel, le passage en mode
   recto-seulement ou recto-verso aussi bien pour de l'ascii que du
   PostScript.

   Il suffit d'insrer aprs la premire ligne...

%!Ado...

   ...les lignes suivantes pour valider le recto-verso:

     %%BeginFeature: *Duplex DuplexNoTumble <<Duplex true /Tumble
     false>> setpagedevice %%EndFeature

   ou, pour valider le recto seul:

     %%BeginFeature: *Duplex None <<Duplex false>> setpagedevice
     %%EndFeature

19. Informations concernant ce document

   Sauf changements, les documents HOWTO sont placs sous copyright par
   leurs auteurs respectifs. Les documents Linux HOWTO peuvent tre
   reproduits et distribus en tout ou partie, par quelque moyen physique
   que ce soit, sans l'autorisation de l'auteur. Les traductions et
   travaux drivs sont galement permis sans autorisation expresse. La
   distribution  titre commercial est permise et mme encourage;
   cependant, l'auteur souhaiterait en tre averti.

   En bref, nous souhaitons que l'information contenue dans ces document
   soit rpandue le plus largement possible. Cependant, nous souhaitons
   maintenir le copyright sur ce document, et souhaiterions tre avertis
   de toute re-distribution. Si vous avez des questions  ce propos,
   contactez Greg Hankins, le nouveau coordinateur des documents Linux
   HOWTO  l'adresse <gregh@cc.gatech.edu>. Son reprsentant franais est
   Eric Dumas <dumas@freenix.fr,dumas@Linux.EU.Org>.
