Printing-HOWTO
 Grant  Taylor  <[email protected]>,  traduction  Jean-
 Michel        VANSTEENE        <[email protected]>,
 <[email protected]>
 12 Novembre 1997

 11..  IInnttrroodduuccttiioonn

 Le  Printing-HOWTO devrait  contenir  tout ce  dont  vous avez  besoin
 pour mettre  en   place   les    services   d'impression  sur    votre
 systeme  Linux.  Comme  vous  vous  en  doutez  peut-etre, ceci est un
 tantinet plus complique  que le ``simple''  _c_l_i_c  du  monde  _M_i_c_r_o_s_o_f_t
 et _A_p_p_l_e, mais  en   contre-partie,    c'est beaucoup  plus     souple
 et  certainement   plus   facile      a   administrer    pour      les
 grands reseaux.

 Ce document est  organise de facon  a ce que la lecture de la premiere
 moitie suffise  a la mise en place d'un systeme     qui    ``tourne''.
 Les    choses   plus  obscures voire particulieres sont    concentrees
 dans la   deuxieme moitie. Vous pouvez vous referer  a  la  table  des
 matiere pour les details.

 Depuis  la  version  3.x, ce  document a ete completement reecrit   et
 un    certain    nombre     d'informations   ont  ete  retirees.    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 tombee: vous trouverez ici
 un document sensiblement plus  concis.  S'il  manque  une  information
 qui   vous   semble   importante,   nous    vous  encourageons  soit a
 parcourir l'ancien HOWTO,  soit  a  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  a l'accoutumee, moulte satisfaction dans vos
 recherches    et   pleine  reussite  dans  la   configuration de votre
 imprimante  (Note : Desole  : ca  vouloir   dire   nous  esperer   toi
 reussir configurer imprimante :-)).

 Les   HOWTOs  francais  peuvent etre trouves  en France, notamment sur
 les sites

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

 11..11..  HHiissttoorriiqquuee

 Ce   document  est   le  troisieme    du   nom,  c'est   a  dire    la
 troisieme version  completement revue (en esperant que sa    structure
 se  stabilise un    peu).   L'histoire  du  PHT  peut etre  brievement
 decrite ainsi :

 J'ai  commence    a    ecrire    le premier   HOWTO    en reponse a un
 nombre assez consequent de  questions  qui  avaient  ete  posees  dans
 comp.os.linux.   C'etait  en   fait  une     FAQ   que  j'avais nommee
 HOWTO.   Cette   version etait disponible uniquement en ASCII.

 Le  PHT a  ensuite ete  regroupe  avec  la FAQ  de   LPD  ecrite   par
 Brian    McCauley   <[email protected]>,  nous avons    continue
 ce document   de   concert  pendant  a peu  pres    deux   ans.   Nous
 avons   alors    ajoute a notre document  les  travaux  de Karl   Auer
 <[email protected]>.  Cette version du  PHT  etait  disponible   en
 TeXInfo, PostScript, HTML, ASCII et Info.

 Apres  avoir   un peu laisse le  PHT vieillir pendant une bonne annee,
 sans avoir pu trouver quelqu'un souhaitant le maintenir,  j'ai  decide
 de   le   reecrire.   Cette   version    est  conforme au ``standard''
 Linuxdoc-SGML.

 11..22..  CCooppyyrriigghhtt

 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   etre   faite
 sans  le  consentement    de  l'auteur  sauf  si   vous   supprimez du
 document   toute   marque  qui  lui    fait  reference,   ainsi  qu'au
 traducteur    et  a toutes  les personnes  citees   (y     compris les
 adresses   de     courrier electronique) et que vous  le  diffusez  en
 votre  nom.   L'auteur  (et  le  traducteur) ne sauraient etre   tenus
 responsables de propos qui  ne sont pas les leurs.

 Le     coordinateur     des    HOWTOs   est       actuellement    Greg
 Hankins   <[email protected]>.    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     <[email protected], [email protected]>.

 22..  QQuu''eesstt--ccee qquuee ll''iimmpprreessssiioonn ssoouuss UUNNIIXX ??

 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  a   passer   au  suivant.    Les   debutants
 trouveront  l'information  suffisante,  je  l'espere, pour  comprendre
 comment  les  donnees   sont     vehiculees    vers     leur     chere
 imprimante.

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

       ls >/dev/lp0

 Cette methode  a neanmoins un gros inconvenient : elle  ne  tire   pas
 parti des caracteristiques  multi-taches du systeme d'exploitation. En
 effet  vous devrez attendre que le tampon de l'imprimante ait  absorbe
 toutes les donnees pour  pouvoir continuer a travailler.

 Une   meilleure    methode     consiste    a   utiliser    un    spool
 d'impression,   dont   le   role   est   de   collecter  les   donnees
 temporairement  dans  des fichiers afin  de  les envoyer, en tache  de
 fond, a l'imprimante.  Lorsque  plusieurs fichiers sont  soumis,   ils
 seront   imprimes dans  l'ordre  de soumission (premier entre, premier
 sorti). La zone  de spool est donc  bien une ffiillee.  On  dit  que   les
 travaux  sont   dans     la ffiillee  dd''iimmpprreessssiioonn.      Cette methode met
 en jeu  deux acteurs : le client  (_l_p_r)  permet  a  tout   utilisateur
 de  soumettre  des    travaux    d'impression.  Le serveur quant a lui
 (_l_p_d) les prend en charge en tache de fond.  Il recupere  les  donnees
 dans le spool ainsi que des informations   qui   lui  sont necessaires
 pour    l'impression proprement dite.

 Nous  verrons dans  un chapitre  un  peu plus loin comment  tout  cela
 interagit.   Arretons-nous  la  pour  le  moment et penchons-nous deja
 sur  le plus important:  les peripheriques du systeme.

 33..  CCoommmmeenntt IImmpprriimmeerr

 Si  le   demon   d'impression de  votre  machine    est   correctement
 configure, vous pouvez lire le  _P_r_i_n_t_i_n_g_-_U_s_a_g_e _H_O_W_T_O

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

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

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

 33..11..  LLeess ppeerriipphheerriiqquueess dd''iimmpprriimmaanntteess ddaannss llee ssyysstteemmee

 Les imprimantes  sont  souvent rattachees  (surtout   les  imprimantes
 personnelles)   au   port   parallele.   Elles  sont  gerees  par  les
 peripheriques de type /dev/lp?.

 Si  vous  disposez   d'une imprimante  serie,  vous  utiliserez   bien
 sur    /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.

 33..22..  LLee ppeerriipphheerriiqquuee llpp

 33..22..11..  NNooyyaauuxx aanntteerriieeuurrss aa 22..11..3322

 Si  vous  utilisez une  imprimante parallele, vous devez disposer d'un
 noyau    Linux   compile       avec    les    gestionnaires         de
 peripheriques d'impression lp.  Verifiez-le a l'aide de la commande

            cat /proc/devices

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

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

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

 Le  port  parallele   peut  etre gere par le  pilote du  noyau de deux
 manieres.  D'une part  par polling  (scrutation), d'autre  part    par
 interruption.     La   methode de    gestion  par interruption est  en
 theorie plus  efficace, puisque le gestionnaire n'est  sollicite   par
 une  interruption qu'au    moment ou un travail est   a effectuer.  En
 pratique,  il  semble que  ce  soit  dependant  de  la  machine.  Dans
 beaucoup de cas, il n'y  a pas tant de difference que cela.

 Un   certain   nombre   d'utilisateurs   se sont    plaints  que  leur
 port  parallele  bidirectionnel    n'etait   pas  detecte   lorsqu'ils
 utilisent  un  vieux  cable unidirectionnel. Verifiez que le votre est
 recent.

 Vous ne pourrez pas utiliser les pilotes plip et  lp  en  meme  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 theoriquement  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   a  partir
 d'une  simple et ingenieuse commande.

 Un petit utilitaire appele  tunelp vous permet, sous  le compte super-
 utilisateur,      de     regler    les         interruptions      d'un
 peripherique  lp, le mode de fonctionnement du pilote, la frequence de
 scrutation, et plein d'autres options...

 Avec  LILO  et  LOADLIN,  vous  pouvez  configurer   les  adresses  et
 interruptions utilises 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 utilise  sur les PC recents.

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

 Lorsque le pilote est charge en tant que module  (version noyau  2  et
 1.3.x),    il   est  egalement  possible    de  specifier  les  lignes
 d'interruption    utilisees        soit     dans   le          fichier
 /etc/conf.modules,  soit   sur  la   ligne  de  commande de insmod  en
 utilisant   la      meme    syntaxe.      Les      parametres     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  parallele   se  trouve   dans
 /usr/src/linux/drivers/char/lp.c.

 33..22..22..  ppaarrppoorrtt..  NNooyyaauuxx  ppoosstteerriieeuurrss   aa 22..11..3322:: llee ppeerriipphheerriiqquuee

 Depuis   le  noyau  2.1.33  (il  existe    un  patch pour   la version
 2.0.30), le peripherique   lp    est     simplement  un    client   du
 nouveau  peripherique    parport.    L'ajout de  ce    parport corrige
 un certain     nombre  de   problemes  dont    etait affuble lp  -  il
 peut  partager  le port avec d'autres pilotes, il met dynamiquement en
 relation les   ports  paralleles  disponibles  avec  les   numeros  de
 peripheriques   plutot    que  de  forcer  une correspondance statique
 entre addresse d'entre/sortie et numero de port, ...

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

 33..33..  LLeess ppeerriipphheerriiqquueess sseerriiee

 Les  peripheriques    serie              utilisables    sont   appeles
 /dev/ttyS?     (les    peripheriques /dev/cua? sont  aussi  serie mais
 pas utilisables  dans ce  domaine).    L'utilitaire  stty  permet   de
 visualiser  ou  de  modifier  les  caractertiques   d'un  port  donne.
 setserial  permet  de controler   et configurer les  IRQ   et adresses
 d'entree/sortie   si  besoin est.  Referez-vous  au _S_e_r_i_a_l_-_H_O_W_T_O  pour
 de plus amples renseignements.

 Si  vous utilisez une imprimante serie   lente  avec  le  controle  de
 flux,   vous  constaterez  peut-etre   que certaines  impressions sont
 tronquees.  Ceci  est  certainement   du  au  port   serie   dont   le
 comportement    par   defaut  est    de     purger   son   tampon  des
 caracteres   non   transmis   dans   les    30  secondes  apres     sa
 fermeture.   Une  imprimante  trop   lente  n'aura pas  le temps de le
 vider. Le tampon peut contenir 4096 caracteres.

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

 Le   delai  de    30   secondes  peut   etre  ajuste   a  l'aide    du
 parametre  ``closing_wait''   (attente  fermeture)    de  la  commande
 setserial (version 2.12 et ulterieure).

 Notez   que   les   ports  serie    sont  generalement  configures  au
 demarrage  de  la machine grace a un appel a setserial dans le fichier
 /etc/rc.d/rc.serial.  Vous pouvez  rajouter  toute  option  necessaire
 dans ce fichier.

 44..  LLeess iimmpprriimmaanntteess ssuuppppoorrtteeeess

 Le  noyau   Linux supporte quasiment toutes  les imprimantes que  vous
 pouvez physiquement connecter  au port  serie  ou parallele. Il  y   a
 neanmoins   des   petites    choses  a  savoir,   notamment  certaines
 imprimantes     a      eviter       bien        qu'elles      puissent
 (electriquement  parlant)  communiquer avec Linux. En premier lieu, il
 existe    toute    une    generation   d'imprimantes     incompatibles
 s'appuyant  sur   le ``Windows Printing System''  et qui  repondent au
 label ``pour   Windows''. Ces imprimantes  ne fonctionnent   pas  avec
 Linux.  Elles  font  travailler   l'unite  centrale pour    des taches
 normalement  laissees    au   microprocesseur   de       l'imprimante.
 Malheureusement  ces  taches  ne  peuvent   etre effectuees 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 systeme, le
 meilleur   choix est d'avoir  une  imprimante    PostScript.  Presquer
 tous  les  logiciels Unix produisent du _P_o_s_t_S_c_r_i_p_t  et bien evidemment
 le mieux  est   d'avoir une  imprimante   qui    le  comprend.    Cela
 simplifie.    Malheureusement   _P_o_s_t_S_c_r_i_p_t   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  a imprimer, vous pouvez
 connecter une   simple imprimante matricielle retrouvee    dans  votre
 grenier.   Sinon,  comme   nous  le  verrons,  il faudra passer par un
 logiciel d'interpretation du  _P_o_s_t_S_c_r_i_p_t (le   plus  celebre  est   le
 logiciel   gratuit   _G_h_o_s_t_S_c_r_i_p_t    de   _A_l_l_a_d_i_n  _s_o_f_t_w_a_r_e).  Utilisez
 alors une imprimante reconnue par ce logiciel.

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

 Les imprimantes supportees 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 correctif 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. Correct 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 -dPrintQuality=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 stcolor 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

 55..  QQuueell ddeemmoonn dd''iimmpprreessssiioonn ??

 Jusque recemment, le  choix  sous Linux etait simple  puisque tout  le
 monde  disposait    du seul demon 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  systemes SVR4  tels  que  Sun   Solaris  sont
 fournis  avec  un  paquetage logiciel d'impression centre sur lpsched.
 D'autre part,  sous  Linux, quelques  fournisseurs   proposent  LPRng,
 une  implementation     beaucoup     plus   recente     et  disponible
 gratuitement.   LPRng  est   tres  facilement administrable  notamment
 sur  des  plate-formes  importantes  et  contient du code plus robuste
 (moins farfelu??)  que lpd.

 A l'heure actuelle malgre toutes ces nouveautes, lpd est  certainement
 ce  qui  convient le mieux a la plupart des utilisateurs.  Meme  si ce
 n'est  pas le  fin  du  fin,  il  tourne  bien  une    fois  configure
 et,      chose  importante,  il     est tres   bien documente dans les
 livres sur Unix.

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

 66..  LL''iimmpprreessssiioonn,, ccoommmmeenntt ccaa mmaarrcchhee

 Nous  considerons  ici  que  vous utilisez la suite logicielle lpd que
 nous decrirons  d'ailleurs. Elle est  la plus repandue  et  fonctionne
 tres bien.

 66..11..  IImmpprreessssiioonn llooccaallee eett iimmpprreessssiioonn ddiissttaannttee

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

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

 66..22..  DDee qquuooii aavveezz vvoouuss bbeessooiinn

 Nous  supposons  que vous savez editer un  fichier texte sous Linux et
 que  vous avez   une bonne  comprehension   des  notions   de   droits
 d'acces et de propriete (chmod, chown).

 Nous   supposons   egalement   que  votre   systeme  Linux  fonctionne
 correctement.   En  particulier,   si    vous  souhaitez   faire    de
 l'impression distante, que votre reseau fonctionne deja.

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

 66..33..  LLeess pprrooggrraammmmeess iimmppoorrttaannttss

 Le  systeme   d'impression Unix comprend (au  moins) 5 programmes. Ils
 doivent se trouver a  l'endroit  decrit (c'est le  mieux)  ou dans  un
 repertoire  accessible   (avec   la variable PATH),  appartenir a 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  utilises  pour  soumettre,    visualiser,
 annuler,  controler les   travaux   d'impression. Le dernier    est le
 demon.

 Il existe bien  entendu  des  pages  de  manuel   en  ligne  pour  ces
 commandes que vous  pourrez consulter  pour    plus d'information.  Le
 point   important a noter  est    que   les commandes    lpr,     lpq,
 lpc  et    lprm operent   sur une    imprimante par defaut nommee  lp.
 La    variable   d'environnement PRINTER    peut contenir le nom    de
 l'imprimante  que vous  avez choisie.  La  specification du nom  d'une
 imprimante sur la ligne de commande  surchargera ces definitions  (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 ?)
           ...

 66..33..11..  LLee cclliieenntt eett llee sseerrvveeuurr

 Voici ci-dessous les interactions client - demon

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

                  Soumission d'un requete d'impression

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

                  Soumission d'une demande d'information

 Lorsque       le   systeme     demarre,   lpd     est charge.   Il lit
 le   fichier   /etc/printcap (dont  vous  trouverez   une  explication
 plus  loin) qui  decrit  les imprimantes connues.

 66..33..22..  LLeess ffiicchhiieerrss ssoouummiiss ppaarr llee cclliieenntt

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

 +o   Un fichier de donnees qui  contient une copie des donnees que vous
    souhaitez  soumettre a l'imprimante. Il s'agit bien d'une copie, ce
    qui signifie  que toute modification  ulterieure de  votre  fichier
    n'alterera pas l'impression.

 +o   Un fichier de description du travail a effectuer.

 66..33..33..  LLaa ccoommmmaannddee llpprr

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

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

 66..33..44..  LLaa ccoommmmaannddee llppqq

 La commande lpq  affiche le contenu du   spool,  pour  une  imprimante
 donnee.      Une  des   informations    importantes fournies   est  le
 numero  du  travail (job).  C'est   lui  qui pourra  servir a  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
 a l'impression).

 66..33..55..  LLaa ccoommmmaannddee llpprrmm

 La commande lprm enleve  un travail de la  file (et  donc  le  fichier
 du  spool).   Vous  pouvez soit  specifier un numero de job,  soit  un
 tiret    permettant   de   supprimer   tous     les     travaux   vous
 appartenant.    Si    vous   etes  root,    tous    les  travaux  sont
 supprimes.    Pour   supprimer    les   travaux     d'un  utilisateur,
 specifiez son nom.

           # lprm 1
           dfA001Aa00484 dequeued
           cfA001Aa00484 dequeued
           #

 Le   premier fichier contient les  donnees  a imprimer.  Il a ete cree
 par  lpr. Le deuxieme contient des informations que le  demon  utilise
 pour  savoir que faire des donnees (impression  locale, distante, ...)
 Consultez le manuel en ligne : lpd(8).

 66..33..66..  LLaa ccoommmmaannddee llppcc

 La commande lpc  permet de  controler  les  travaux  en   cours  ainsi
 que    l'imprimante,  et certains     aspects de son   utilisation. En
 particulier,  vous pouvez demarrer ou  stopper la sortie  des  travaux
 du    spool    pour   l'impression,     valider    ou   invalider  une
 imprimante, et meme 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 debut de file:

           lpc down mon_imprimante
           lpc enable ton_imprimante
           lpc topq 37

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

 66..44..  LLeess rreeppeerrttooiirreess iimmppoorrttaannttss

 Le repertoire le plus  important est le  repertoire  de   spool,  dans
 lequel   les  donnees  vont   etre stockees  avant d'etre   imprimees.
 Typiquement,    un  systeme   sera  configure     pour     avoir    un
 repertoire        de  spool par imprimante. Cela rend la gestion  plus
 facile.   Sur  mon  systeme,  par  exemple,      le         repertoire
 /usr/spool/lp  est    le repertoire   principal. Sous ce   repertoire,
 on  y trouve le sous-repertoire     lpr0, correspondant       a     la
 declaration  que   j'ai faite  dans   /etc/printcap pour le repertoire
 de spool de mon imprimante.

 NDT: Ce  qui va suivre decrit  une facon  de  faire  pour  donner  les
 bons       droits      d'acces     aux      repertoires     de  spool.
 Differentes   methodes  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    a   la
 securite de l'ensemble.

 Le repertoire de spool doit appartenir a root, et au groupe lp,   avec
 les  droits  de lecture/d'ecriture  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   repertoire  doit  egalement  etre present : /usr/spool/lpd
 avec  les memes  droits.   Vous aurez plus d'informations  plus  avant
 dans ce document.

 66..55..  LLeess ffiicchhiieerrss iimmppoorrttaannttss

 En     dehors     des   programmes  que      nous  avons  deja evoques
 precedemment, quatre  fichiers   doivent  se   trouver    dans  chaque
 repertoire  de  spool.   Avec les versions recentes des  gestionnaires
 d'impression,  vous n'avez pas  a vous soucier de ces  fichiers.   Ils
 sont  crees  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 numeros de  jobs.  Le  fichier  status  contient  le
 message   devant    etre   emis   par    la   commande    lpc stat. Le
 fichier  lock est utilise par le  demon  pour  qu'il  n'imprime  qu'un
 fichier  a   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 declare dans le
 fichier /etc/printcap que nous decrirons dans la suite.

 77..  CCoonnffiigguurreerr lleess sseerrvviicceess dd''iimmpprreessssiioonn

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

 77..11..  LLee ffiicchhiieerr //eettcc//pprriinnttccaapp

 Le  fichier   /etc/printcap  decrit  toutes  les imprimantes que votre
 systeme    doit  connaitre.      Il    peut  etre modifie  avec  votre
 editeur prefere, doit appartenir a 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    incomprehensible a premiere
 vue.    Il    respecte    effectivement   une    syntaxe  particuliere
 et   malgre les  apparences, assez simple lorsque l'on connait !    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  recuperer    si   vous  ne   les avez  pas).   Plus loin sont
 decrits les parametres importants.

 Une   entree   de  printcap    decrit   une  imprimante,  c'est-a-dire
 une correspondance nom  logique -  imprimante physique, puis decrit la
 facon de transmettre les  donnees. Par exemple, une entree  va decrire
 le  peripherique  physique  a  utiliser,  le repertoire  de spool, les
 traitements a effectuer sur  les donnees avant  impression,  ou encore
 le  repertoire   dans  lequel    seront  notifiees   les erreurs. Vous
 pouvez aussi limiter la quantite  de donnees pour  un  job,   ou  meme
 limiter   l'acces   d'une   imprimante   a  une classe d'utilisateurs.
 Vous trouverez dans  la partie suivante la description des champs.

 Il    est  tout   a   fait    possible   d'avoir  plusieurs    entrees
 decrivant       differentes      facons d'envoyer   des donnees a  une
 meme  imprimante physique.  Par exemple,  une  imprimante     physique
 peut  supporter  les    formats    HP   LaserJet  et  PostScript,   en
 fonction  de   la  sequence   de  caracteres envoyee au   debut   d'un
 travail.    Vous  definirez  donc  deux  entrees, l'une permettant  de
 traiter  le   format  HP,  l'autre  le  format   _P_o_s_t_S_c_r_i_p_t.       Les
 programmes      generant  des  donnees   ``HP''  les     enverront   a
 l'imprimante  HP,     ceux  generant  des    donnees   _P_o_s_t_S_c_r_i_p_t  les
 enverront  a  l'imprimante _P_o_s_t_S_c_r_i_p_t. Toutes les deux representent la
 meme imprimante physique.

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

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

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

 Ceci  definit  une  imprimante  dont les  noms sont   lp (par defaut),
 dj  et deskjet.   Les  deux   derniers  sont  des  alias  de  la  meme
 imprimante.    La  file  (on  dit  tres  souvent  le  spool,  meme  en
 francais...)   de cette  imprimante  de  trouve  dans   le  repertoire
 /var/spool/lpd/dj (sd signifie spool   directory).    Le  peripherique
 utilise  est /dev/lp0.      La     page  d'en-tete    est    supprimee
 (sh) et   aucune limite de  taille   de fichier n'est fixee (mx)

 Notez que la meme entree pourrait s'ecrire:

           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 decrites.

 Tous les champs exceptes les noms d'imprimantes sont entoures de deux-
 points  et   reperes par  un  symbole de  deux  lettres suivi du signe
 egal.   Ensuite  est  indiquee  la  valeur  qui  peut  etre   de  type
 numerique,  booleenne ou chaine de caracteres:

           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 distant
           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 pages
                                           de fin de travaux
           mx              numerique       indique la taille maximum d'un job
                                           (en blocs = 1Ko sous linux)

 77..11..11..  DDeettaaiillss ssuurr llee cchhaammpp llpp

 Si           vous         specifiez          /dev/null           comme
 peripherique, tous  les   traitements se  feront,  mais  tout  partira
 a  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   peripheriques''.      Si vous designez une
 imprimante  distante avec  rp et  rm, lp doit contenir :lp=:.

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

 77..11..22..  DDeettaaiillss ssuurr llee cchhaammpp llff

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

 77..11..33..  DDeettaaiillss ssuurr llee cchhaammpp iiff

 Les     filtres  d'entree sont   des    utilitaires  transformant  les
 donnees  qu'il  recoivent  sur  leur  entree  standard  en  un  format
 particulier qu'il sortent sur leur sortie standard.   Typiquement,  la
 conversion   texte -  _P_o_s_t_S_c_r_i_p_t deja mentionnee.

 Si  vous   specifiez     un  filtre    d'entree,   le   demon n'envoie
 pas    directement     les        donnees       au  peripherique.   Il
 execute le  filtre  en dirigeant les donnes sur son   entree  standard
 et en  designant  le peripherique de sortie comme sortie standard.

 77..11..44..  DDeettaaiillss ssuurr lleess cchhaammppss rrmm eett rrpp

 Envoyer des   donnees   a une   imprimante   rattachee a   une machine
 distante   est   tres  simple:   il  suffit de specifier   le nom   de
 la    machine avec  rm    et     le  nom  de  l'imprimante   avec  rp.
 S'assurer  que  l'entree  lp  est vide. A noter que les donnees seront
 d'abord mises dans le spool local  avant  d'etre   transferees.   Meme
 si  votre imprimante est distante, il faudra egalement un spool local.

 77..11..55..  DDeettaaiillss ssuurr lleess cchhaammppss sshh eett ssff

 Les  bannieres    concernent  eventuellement   les    utilisations   a
 plusieurs personnes. Elles identifient les jobs.

 La  suppression de ces  bannieres vous permet d'economiser  du papier.
 Par   contre     la gestion  des   sauts    de     page   sera    plus
 interessante,  surtout  si vous utilisez des traitements de textes qui
 formatent toujours des  pages pleines.  Dans ce  cas,  pas  besoin  de
 saut  de  page supplementaire.  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 debut de page.

 77..11..66..  DDeettaaiill ssuurr llee cchhaammpp mmxx

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

 Cela  peut etre interessant pour  des imprimantes  physiques  en  mode
 texte,  notamment  si   des  utilisateurs  ou  des  programmes  creent
 accidentellement des donnees trop volumineuses.

 Si vous manquez de memoire de masse, pourquoi  n'inventeriez-vous  pas
 un   filtre  qui    decompresse  ce qu'il a   a envoyer a l'imprimante
 ?      Vous    soumettriez     alors   des    donnees compressees.

 88..  LLeess ffiillttrreess

 Si   avec   les   explications  precedentes,   tout    marche    c'est
 formidable, mais en regle general, 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 _P_o_s_t_S_c_r_i_p_t...   Vous obtenez  le
 listing complet    du   code  _P_o_s_t_S_c_r_i_p_t   avec     les   meme  effets
 d'escalier. Une horreur.

 Il  faut donc quelque chose de plus et c'est  le role des filtres. Les
 plus  observateurs    d'entre   vous   auront    peut-etre    remarque
 l'existence  des  parametres  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  executable  qui     lit   les
 donnees   sur  son entree  standard  et sort le resultat sur sa sortie
 standard.

 Commencons par  ecrire   un    script que vous      appellerez  filtre
 et qui ajoute des retours chariot avant chaque caractere fin de ligne.
 Ceci elimine 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'entree  est  modifiee   en consequence:

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

 Essayez  d'ecrire 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 caractere  retour-chariot et non pas un
 `^' suivi d'un 'M'. Dans emacs, pour saisir  ce caractere,  entrez  la
 sequence  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 genere  des  parametres qui
 sont  passes   au filtre. Par defaut  il passe -w0.   Si  l'option  -l
 est  donnee,  il   passe  -c.   Ce script est traditionnellement nomme
 /usr/lib/lpf.  Si vous avez   plusieurs  scripts  de   la  sorte,  une
 bonne idee consiste  a  les  mettre tous dans  un sous-repertoire, par
 exemple /usr/lib/lpd.

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

           #!/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  reconnait le   fichier   d'entree  et   le
 convertit    au bon format   pour   votre imprimante.   Un  tel filtre
 est appele  filtre magique.   Ne  vous embetez   pas   a   les  ecrire
 vous-meme,   il     en     existe   surement deja  un  qui        vous
 convient.                Allez                voir                 sur
 tsx-11.mit.edu:/pub/linux/sources/usr.bin/magic-filter-x.y.tar.gz.

 99..  LLeess ffiicchhiieerrss,, lleeuurr eemmppllaacceemmeenntt eett lleess ddrrooiittss dd''aacccceess

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

 Pensez a  inclure lpd dans le  fichier  rc.local  apres  le  demarrage
 eventuel  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 repertoire 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  crees  par     lpr et lpd. Ils  peuvent
 etre  absents  si  vous    ne  les  avez  encore  jamais  lances. Avec
 d'anciennes  versions il fallait executer touch sur   ces fichiers  ou
 bien  modifier  leurs  droits. Les  bugs concernant ces  fichiers  ont
 maintenant  ete corriges dans les versions recentes.

 Il est   a noter  egalement   que  le   groupe   d'appartenance  etait
 daemon  avec  d'anciennes  versions, et   est maintenant lp.

 Ne     soyez  pas    surpris  de  trouver     des   choses  legerement
 differentes sur  votre systeme. D'un autre cote, si quelque  chose  ne
 fonctionne   pas, pensez a soupconner ces droits avant   d'affoler nos
 boites   aux  lettres   (Si   vous  saviez  le  nombre  de   courriers
 electroniques recus  et dont la  solution se trouve la !).

 On peut trouver le programme lpr avec ou sans  le bit setuid(root). En
 fait ce  n'est  pas si   evident que  cela.   Tout depend  des  droits
 et  permissions des repertoires de spool. Autant que je sache, il  y a
 une totale  securite  avec lpr, meme si il est setuid(root).  Donc,  a
 la  limite,   positionnez  le  bit pour ne pas vous soucier des droits
 d'acces au repertoire de spool.

 Vous etes libre  de mettre les  binaires   dans  les  repertoires  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  etant  interessantes   pour  tout
 utilisateur, il  est bon de les laisser aux endroits habituels.

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

 L'emplacement du  fichier  de  verrouillage  principal  du  demon  lpd
 (lpd.lock),  est  fixe    en  dur  dans  le  code.   Il se trouve dans
 /var/spool/lpd/lpd.lock.  Donc,  vous  devrez  prevoir  un  repertoire
 /var/spool/lpd    meme     si        votre  repertoire   de  spool est
 different.   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   donne   que l'on  jongle  en permanence entre /usr et /var, il
 est clair  qu'un  lien  doit   exister  entre  les  deux.   Soit  vous
 definissez       vos         repertoires        dans /usr/spool/... et
 definissez  le lien   /var vers /usr,  soit vous  mettez   tout   sous
 /var/spool/lpd... et definissez 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  stockes  dans    la    partition  de  root,     /var
 etant cree sous /, dans l'autre,  ce  sera  dans  la  partition  /usr,
 puisque  /usr   est  monte.    Vous  pouvez  aussi avoir un systeme de
 fichiers /var reserve.

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

 Desormais,  le   repertoire       /etc   est      le  repertoire    ou
 sont     situes  les    fichiers   de configuration.   Vous     pouvez
 choisir de  les    mettre  ailleurs, mais definissez  toujours un lien
 symbolique  de /etc  vers vos fichiers.  Si votre systeme comporte des
 binaires qui vont toujours chercher leur configuration  dans  /usr/etc
 ou  /etc/inet, ils  sont  surement tres  anciens   et vous gagneriez a
 mettre votre systeme a jour.

 1100..  OOuu ttrroouuvveerr ddeess ffiillttrreess dd''iimmpprreessssiioonn ??

 Pas  mal  de filtres   sont  deja  rediges   et disponibles        sur
 _S_u_n_s_i_t_e                      ou                _l_i_p_6               dans
 /pub/sunsite/linux/system/printing.

 1100..11..  LLeess ffiillttrreess mmaaggiiqquueess

 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 controle'
                 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 <[email protected]>
 Site-initial:   sunsite.unc.edu
                 53000 /pub/Linux/system/printing/magicfilter-1.1b.tar.gz
 licence-copie:  GPL

 1100..22..  LLeess ffiillttrreess AAPPSS

      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'entree   _i_f  du   fichier
 /etc/printcap  et   convertissent  la  plupart  des  types de fichiers
 connus   (texte,   _P_o_s_t_S_c_r_i_p_t,   dvi,   gif,    ...)     en  commandes
 comprehensibles par votre imprimante.

 1100..33..  LLeess ffiillttrreess EEZZ--mmaaggiicc

 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:         [email protected] (Toby Reed)
 Maintenu-par:   [email protected] (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.

 1111..  LLeess llooggiicciieellss dd''iimmpprreessssiioonn

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

 1111..11..  GGhhoossttSSccrriipptt

 _G_h_o_s_t_S_c_r_i_p_t est un  logiciel majeur pour  l'impression  sous Linux. En
 effet   la   plupart   des  logiciels  generent  du   _P_o_s_t_S_c_r_i_p_t.   Ce
 logiciel, gratuit,   est capable de    convertir   le   _P_o_s_t_S_c_r_i_p_t  en
 langage  comprehensible  par   votre   imprimante (si le    pilote est
 disponible).  Il  joue   le role de   filtre  afin que vous   puissiez
 considerer   votre    imprimante   comme    _P_o_s_t_S_c_r_i_p_t.    Ceci   vous
 simplifie grandement la vie.

 _G_h_o_s_t_S_c_r_i_p_t est disponible sous deux formes.  Une version commerciale,
 appelee  _A_l_l_a_d_i_n _G_h_o_s_t_S_c_r_i_p_t, peut etre   utilisee librement pour  des
 besoins   prives  mais  ne   doit   pas   etre  distribuee  par    les
 distributions  payantes   de    Linux.   Elle   est  generalement   en
 avance  d'une annee sur   la version gratuite.

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

 1111..11..11..  UUttiilliisseerr GGhhoossttSSccrriipptt

 gs  est  le  nom  de l'executable. gs -help vous donne une aide rapide
 sur  les  parametres disponibles.  (La   liste   des  pilotes  est  la
 liste des pilotes compiles avec  la version et non la liste complete.)
 Quoi que vous fassiez avec gs, il est  conseille  d'invalider  l'acces
 aux     fichiers    (par    -dSAFER).     En   effet _P_o_s_t_S_c_r_i_p_t est un
 langage  pleinement  operationnel  et  un   fichier   _P_o_s_t_S_c_r_i_p_t   peu
 scrupuleux  peut  endommager  vos  fichiers et vous donner un terrible
 mal de crane..

 Exemple de ligne de commande pour un imprimante Stylus 800

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

 1111..11..22..  RReeggllaaggeess

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

 1111..11..33..  GGaammmmaa,, ttaaiilllleess ddee ppooiinnttss,, ......

 Il  se  peut que vous trouviez  vos   impressions trop  sombres.  Ceci
 peut arriver si votre imprimante n'a pas  une  definition  suffisante.
 Dans  ce  cas vous devez  creer votre  propre  fonction de  transfert.
 Pour  ceci,  creez  le  fichier   gamma.ps  dans  le   repertoire  des
 librairies   de  _G_h_o_s_t_S_c_r_i_p_t  et   appelez le fichier  sur la ligne de
 commande de  gs  avant  le  fichier  a  imprimer.  Pour  eclaricir  le
 resultat,   vous     devez     diminuer   les    valeurs    indiquees.
 Notamment si votre pilote utilise l'algorithme de _F_l_o_y_d_-_S_t_e_i_n_b_e_r_g pour
 rasteriser   les  couleurs, des  valeurs comprises  entre  0.15 et 0.2
 sont mieux adaptees.

           ---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 repertoire /examples de  _G_h_o_s_t_S_c_r_i_p_t  qui contient une page
 de test des couleurs).

 1122..  LL''iimmpprreessssiioonn aa ddiissttaannccee

 Une des caracteristiques de lpd est qu'il  supporte  l'impression  sur
 des   imprimantes   rattachees  a   d'autres   machines  que la votre.
 Avec, en  plus,  une  combinaison   de  filtres  soignee,  vous  aurez
 un systeme   d'impression  transparent,    reparti et performant.
 1122..11..  VVeerrss uunn hhoottee UUnniixx//llppdd

 Pour    que      des    machines    distantes      puissent   utiliser
 l'imprimante attachee a   votre machine, le   nom   de  ces   machines
 doit  etre  reference      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  preferable  de  declarer les   machines  dans  /etc/hosts.lpd
 qui   est   specialement   reserve   a   l'impression,   le    fichier
 /etc/hosts.equiv  donnant des droits plus etendus.

 Vous  pouvez restreindre les droits  d'acces distants  par  groupe  ou
 par  utilisateur.    Les     groupes  autorises sont    indiques grace
 au        parametre    :rg=:      du    fichier   printcap:   rg=admin
 restreint       l'utilisation          aux   utilisateurs   du  groupe
 admin.  Le   parametre booleen :rs=:  du  meme    fichier    restreint
 l'acces  aux utilisateurs ayant un compte sur votre machine.

 1122..11..11..  AAvveecc llppdd

 Pour   imprimer  vers  une  autre   machine,  vous  devez  creer   une
 entree 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  repertoire de  spool   local
 gere   par  votre lpd  local. Les fichiers soumis y seront copies puis
 envoyes vers la machine distante.

 1122..11..22..  AAvveecc rrllpprr

 Vous pouvez utiliser  rlpr  pour soumettre une  impression directement
 a  la  machine  distante  sans  passer  par un demon local et toute sa
 configuration.   C'est  particulierement  interessant   lorsque   vous
 imprimer rarement et vers differentes imprimantes.

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

 1122..22..  LLaannMMaannaaggeerr oouu SSaammbbaa..  IImmpprriimmeerr vveerrss  uunnee  iimmpprriimmaannttee   aattttaacchheeee
 aa   WWiinnddoowwss  9955,, NNTT,,

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

 Il est possible de rediriger une file lpd vers un service d'impression
 SMB       grace           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 repertoire de spool  et decrire 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  egalement  utiliser     le  programme  smbclient  pour
 soumettre un fichier directement a un  service d'impression  SMB  sans
 impliquer  lpd.   Lisez  la  documentation de tous ces programmes pour
 plus d'information.

 1122..33..  VVeerrss uunnee iimmpprriimmaannttee NNeettWWaarree

 La suite     logicielle ncpfs  contient    un utilitaire appele nprint
 qui  fournit  les  memes fonctionnalites 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 egalement  soumettre  des travaux d'impression
 vers  NetWare ou mettre  des  travaux  d'impression   de   NetWare  en
 file  sur  votre  systeme Linux.    Vous devez disposer   d'un  noyaux
 1.2.x  ou 1.3.54   et ulterieur.   ncpfs NNEE fonctionne   PPAASS  avec  un
 noyau 1.3.x (x < 54).

 Pour  que   nprint  fonctionne  via  lpd,  vous devez ecrire 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 a 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 -

 1122..44..  VVeerrss uunnee iimmpprriimmaannttee EEtthheerrTTaallkk

 Le     paquetage  logiciel netatalk    contient l'equivalent de nprint
 et      smbclient.         Referez-vous      au  Netatalk-HOWTO   dans
 lequel      est  bien   decrite   la procedure  d'impression  vers  et
 depuis un reseau _A_p_p_l_e.

 1122..55..  VVeerrss uunnee iimmpprriimmaannttee HHPP oouu aauuttrree iimmpprriimmaannttee EEtthheerrnneett

 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 general,  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 entree 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 general deux files  incorporees; l'une ``raw'' accepte le  PCL
 (et  peut-etre  le  PostScript),  l'autre ``text'' accepte l'ascii pur
 (et    s'arrange     pour   resoudre     d'elle-meme    les  problemes
 d'effets d'escalier).

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

 1122..66..  VVeerrss dd''aanncciieennnneess HHPP

 Certaines anciennes imprimantes HP ne  supportent qu'un protocole  mal
 foutu  s'appuyant  sur    des    connexions     TCP,  notamment    les
 premiers modeles a base de cartes JetDirect (et quelques JetDirectEx).
 Pour   imprimer  vers  de  telles   imprimantes, vous devez ouvrir une
 connexion  TCP   vers   un  port  dedie   (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;
      }

 1122..77..  LLeess ffiillttrreess dd''eennttrreeee ppoouurr ddeess iimmpprriimmaanntteess ddiissttaanntteess

 Une  des   bizarreries  de   lpd  est  que le   filtre   d'entree (if)
 n'est pas    execute    pour  des    imprimantes  distantes.  Si  vous
 devez  absolument  passer  par  un   filtre,   il vous faudra utiliser
 deux  files,   la    premiere    redirigeant   vers      la  deuxieme.
 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 lance en tant  que  demon.
 Elle   positionne  correctement   le    nom    du  soumissionnaire  du
 travail    dans   la  deuxieme   queue.     Il serait d'ailleurs mieux
 d'utiliser   une  methode  plus  sure   pour recuperer ce  nom car  ce
 n'est pas toujours  le 5eme parametre.

 1122..88..  IImmpprriimmeerr ddeeppuuiiss WWiinnddoowwss

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

 Samba est fourni avec une documentation  complete.  Vous  pouvez  soit
 installer un  filtre magique sur Linux et  imprimer du _P_o_s_t_S_c_r_i_p_t soit
 installer un pilote     d'imprimante  specifique sous     Windows   et
 decrire  une   file sans   filtre.    En s'appuyant sur   les  pilotes
 Windows, vous pourrez obtenir de meilleurs  resultats, mais  c'est  un
 peu  plus  complique  a administrer si   vous avez plusieurs  stations
 sous Windows.  Donc essayez d'abord la premiere solution.

 1122..99..  DDeeppuuiiss NNeettwwaarree

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

 1122..1100..  DDeeppuuiiss uunn AAppppllee

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

 1122..1111..  IImmpprriimmeerr vveerrss uunn ffaaxx

 1122..1111..11..  UUttiilliisseerr uunn mmooddeemm//ffaaxx

 Si    vous disposez   d'un   modem/fax,   vous     pouvez   configurer
 votre  systeme    pour     envoyer   ou   recevoir    des    fax   aux
 formats _P_o_s_t_S_c_r_i_p_t, dvi, ascii, etc...  Vous  pourrez  meme  faire  en
 sorte que votre courrier electronique soit faxe!

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

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

 Les logiciels de  fax  tournant sous  Linux  doivent savoir  convertir
 les donnees recues  en  un format  compatible  avec le groupe III pour
 la  transmission.  Comme d'habitude  _G_h_o_s_t_s_c_r_i_p_t    sait  faire  !  Le
 pilote tiffg3 genere des  messages fax encodes au format g3/tiff. Vous
 devrez  compiler et integrer le pilote si ce n'est deja 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 a:

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

 Enfin, efax merite   d'etre mentionne.    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

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

 1122..1111..22..  UUttiilliisseerr llee sseerrvviiccee dd''iimmpprreessssiioonn ddiissttaanntt

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

 1133..  LLeess llooggiicciieellss qquuii ppeerrmmeetttteenntt ddee rreeaalliisseerr ddee bbeelllleess iimmpprreessssiioonnss

 Linux sait faire tourner un grand nombre de   binaires  avec  plus  ou
 moins  de  reussite:   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'emulation  iBCS.  La  suite  Corel  Office  en  Java  est  egalement
 prometteuse...)

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

 1133..11..  LLeess llaannggaaggeess aa bbaalliisseess

 La  plupart  des  langages  balises  sont  bien  adaptes  aux  projets
 consequents   ou   repetitifs   pour   lesquels   vous  souhaitez  que
 l'ordinateur  controle la mise  en forme  pour un  resultat  homogene.
 Vouloir   ajouter   un   bel  effet   dans  un  tel  langage  choquera
 certainement.

 1133..11..11..  nnrrooffff

 C'est l'un des plus anciens langages balises sous Unix. Les  pages  de
 manuel  en  ligne sont l'exemple le  plus connu de pages formattees en
 macros  nroff; beaucoup de gens ne  jurent que par   lui...   mais  sa
 syntaxe  est  quand  meme  plus  compliquee  que  necessaire; ce n'est
 certainement  pas   le bon     choix   pour  les    nouveaux  projets.
 Il  est  interessant 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 resultat en vaut vraiment la peine.

 1133..11..22..  TTeeXX

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

 1133..11..33..  SSGGMMLL

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

 1133..11..44..  HHTTMMLL

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

 1133..22..  TTrraaiitteemmeennttss ddee tteexxtteess WWYYSSIIWWYYGG

 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: _S_t_a_r_O_f_f_i_c_e.

 1133..22..11..  SSttaarrOOffffiiccee

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

 1133..22..22..  LLyyXX

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

 1133..22..33..  LL''iinntteerrffaaccee uuttiilliissaatteeuurr ''AAnnddrreeww''

 Cette  interface comprend un  editeur WYSIWYG  appele ez comportant la
 plupart  des  fonctionnalites  de base d'un traitement de texte: HTML,
 et MIME pour courrier et  forums de  discussions   (niouzes,  si  vous
 preferez).

 1133..22..44..  OOffffrreess ccoommmmeerrcciiaalleess

 Caldera    et    Red    Hat   vendent      des  paquetages   logiciels
 comprenant les applications  principales,  a savoir un  traitement  de
 texte  et  un  tableur.   Caldera  vend  egalement (a verifier)  WABI,
 l'emulation   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.

 1144..  LLooggiicciieellss ddee pprree--vviissuuaalliissaattiioonn

 Tout ce que vous imprimez peut etre  egalement  visualise  a  l'ecran.
 Ceci permet  dans bien des cas d'economiser du papier.

 1144..11..  PPoossttSSccrriipptt

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

 1144..22..  TTeeXX ddvvii

 les fichiers TeX    dvi    (DeVice Independent  -    independant    du
 peripherique)     peuvent      etre    visualises    sous     X11    a
 l'aide                              de                            xdvi
 (http://www.picante.com/~gtaylor/pht/man/xdvi.html).    Les   versions
 recentes  de  xdvi  appellent   ghostscript    pour   le   rendu    de
 specificites _P_o_s_t_S_c_r_i_p_t.

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

 1144..33..  AAddoobbee PPDDFF

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

 1155..  LLeess iimmpprriimmaanntteess sseerriiee

 Le  demon  lpd fournit cinq attributs que vous pouvez positionner dans
 /etc/printcap afin  de  controler le  port serie 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   definir    la      vitesse   du     port,  la    syntaxe    est
 evidente. Exemple: br .Pp

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

 Faites  bien  attention aux bits  que vous selectionnez.  Mais au fait
 que sont-ils  ?  Souvenez-vous..., la  commande stty.  Elle indique de
 nombreux   parametres  caracterisant  un   tty.   La commande stty  -a
 affiche en clair  les  parametres du tty, certains  d'entre-eux  etant
 precedes  d'un  tiret   s'ils  sont invalides et sans tiret s'ils sont
 valides.  La commande stty peut   etre    appliques  au  port    serie
 (voir  exemple).   Ce sont certains de   ces parametres (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 -tostop
           -echoprt -echoctl -echoke

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

 Vous pouvez utiliser cette commande pour configurer le port de facon a
 obtenir  une      impression    correcte.       Par   exemple,     les
 differences   que   l'on  peut   noter  entre le  stty   ci-dessus  et
 l'initialisation du port  au  demarrage de  ma   machine  reside  dans
 les  informations  -clocal, -crtscts et  ixon.  (La   configuration de
 votre   port  pourra   tres  bien  etre differente  selon  la  maniere
 dont votre imprimante gere le controle de flux).

 Votre   port  etant bien configure, faites  : cat fichier > /dev/ttyS?
 (? est  le numero de  votre  port) pour  imprimer un fichier.

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

           /* c_cflag bit meaning */
           #define CBAUD   0010017

 Elle decrit justement les bits manipulables a 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  interessent  particulierement  :  ce
 sont   les  memes      parametres   que dans   la   commande stty.  Je
 sens que  vous voyez ou  on veut en venir.  stty n'est qu'un interface
 necessaire au positionnement (ou  effacement) de bits.

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

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

 Effectuez   les    meme   reglages     avec   la   section    suivante
 intitulee

           /* c_lflag bits */

 Dans   mon cas  je n'ai rien   a  positionner, j'ai  donc simplement a
 fournir  la  valeur  xcvotre  fichier  printcap  correctement  defini,
 essayez  d'imprimer.  Si quelque chose ne va pas, continuez a lire les
 paragraphes suivants.

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

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

 La mise en place de lpd n'est  pas traitee ici,  mais  sachez  que  si
 vous    avez   des    problemes  avec    la    configuration  du  port
 serie,  vous  pouvez empecher  lpd  de  le  configurer en  considerant
 votre   imprimante  comme ne  presentant  pas  une interface  normale.
 Lisez egalement   a ce propos le chapitre suivant.

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

 Creez 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

               #!/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/ecriture   pour  tout   le
 monde. Essayez-le: /usr/lib/lpd/if <FICHIER.

 Definissez  un  filtre    d'entree   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  determiner
 si  le(s)  fichier(s) sont bien mis dans le repertoire de spool.  Cela
 devrait  imprimer,  si  votre  essai  manuel  du  script  precedent  a
 fonctionne.    Bien  entendu, le mieux  serait de pouvoir se passer du
 script d'entree et donc du parametre if.

 Supposons   donc   que    la  methode  precedente    a fonctionne,  et
 que   vous   pensez  avoir   correctement  configure  votre    fichier
 printcap.   Executez    la     commande  stty    -a  </dev/ttyS?.   Si
 certains  parametres  ne  sont pas corrects, verifiez   les constantes
 du    fichier termbits.h.  Si  la  configuration    est    incorrecte,
 malgre   tous    vos  efforts   de verification,  n'hesitez    pas   a
 installer   un demon recent.

 1155..11..  IImmpprriimmaanntteess aanncciieennnneess eett ccaarraacctteerreess ppeerrdduuss

 Certaines  anciennes  imprimantes  series  ont  des   petits   tampons
 memoire  et  gerent   mal  le controle  de flux.  Supprimer le FIFO du
 port serie  (16550)  avec setserial  (faites croire  a  setserial  que
 c'est un port 8250 et ca marchera).

 1166..  CCoommpplleemmeennttss eett rreeggllaaggeess

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

 Vous    pouvez  egalement  definir   dans    vos  fichiers  de   login
 (.profile,  par   exemple)  ou  celui   par   defaut,   une   variable
 d'environnement     PRINTER  definissant  l'imprimante     a utiliser.
 Exemple:

           export PRINTER=lpr0

 Ceci  evite  d'avoir a       specifier -Plpr0 a chaque fois.

 Il est  possible de  ``reutiliser''  une  entree  printcap.   Si  vous
 declarez   votre  propre    machine  comme machine   hote distante, et
 une  autre   imprimante   comme  imprimante  distante,   vous   pouvez
 rediriger   les   donnees    a  imprimer  de    l'une   vers  l'autre.
 Souvenez-vous que  si vous  utilisez  cette technique,   les   donnees
 passeront    par  chaque   filtre  de  la  chaine   et   seront  mises
 successivement dans chaque spool.

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

 Plutot  que  de  specifier   une   taille  maximum  de  fichier   pour
 l'impression,  vous  prefereriez sans doute  que les fichiers du spool
 ne puissent remplir votre disque, meme temporairement. Pour ce  faire,
 creez   un     fichier   appele   minfree   dans  chaque repertoire de
 spool,  contenant, sous  forme   d'un  nombre  de  blocs  (1  Ko  pour
 Linux),  la  quantite  minimum  d'espace disque devant rester pour que
 les donnees puissent  etre  acceptees dans le spool.   Vous    creerez
 un       fichier   reel    dans      le repertoire    principal     de
 spool   et,       dans    chaque sous-repertoire, un  lien  symbolique
 vers ce fichier.

 1177..  RReessuummee

 Voici  un  guide   de   configuration  etape   par  etape   pour   une
 imprimante    nommee /dev/lp0. Vous pouvez l'etendre  a  votre  guise.
 Pour faire ce qui suit,  vous devez etre root.  (NDT:  L'auteur a tout
 installe dans /usr/spool/lpd.  J'ai prefere     modifier    legerement
 cette  configuration     en  definissant  /usr/spool/lp/lpr0        et
 /usr/spool/lpd, comme dans la plupart des distributions)

 +o   Verifiez les droits   d'acces et  l'emplacement    de  lpr,  lprm,
    lpq,  lpc et lpd.   Voir a ce  propos: Les programmes importants.

 +o    Creez  le     repertoire   de    spool  pour  votre   imprimante,
    appelee 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

 +o   Creez un repertoire permettant au  demon  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

 +o     Dans     les       repertoires         /usr/spool/lp/lpr0     et
    /usr/spool/lpd,  creez  les  fichier  necessaires,  avec  les  bons
    droits   (Cette   manipulation   n'est  pas  necessaire  avec   les
    versions recentes 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

 +o    Creez    le          shell-script    filtre_entree     dans    le
    repertoire      /usr/spool/lp/lpr0.  Utilisez le      filtre decrit
    precedemment. Donnez-lui les bons droits.

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

 +o   Creez le fichier  /etc/printcap, s'il n'existe  pas.  Enlevez  les
    entrees   qu'il   contient et ajoutez   une entree de  test decrite
    precedemment.  Donnez-lui       les    droits -rw-r--r--.

 +o   Editez le fichier /etc/rc.d/rc.local ou rc.multi. Ajoutez la ligne
    /usr/sbin/lpd     a   la   fin.   Cela lancera    le demon au boot.
    Vous pouvez aussi le lancer a la main :

      root# /usr/sbin/lpd

 +o   Effectuez un test d'impression :

          ls -l | lpr -Plpr0

 +o   Regardez dans   /tmp   et  verifiez   la   presence    du  fichier
    testlp.out.  Il    devrait   contenir    le  listing  du repertoire
    dans lequel vous etiez.

 +o    Editez  /etc/printcap.    Dupliquez  l'entree  lpr0.   Vous  avez
    alors      2  entrees  identiques.        Dans  la premiere entree,
    changez, sur   la premiere   ligne  uniquement, les occurrences  de
    lpr0  par testlp.  Dans la  seconde entree, changez /dev/null   par
    le peripherique reel, par   exemple  /dev/lp0.  Dans   la   seconde
    entree, enlevez le champ if completement.

 +o    Rebootez  le  systeme    ou     tuez le demon  d'impression    et
    relancez-le,   afin       qu'il   reprenne      en     compte    le
    fichier /etc/printcap modifie.

 +o   Refaites un test  d'impression -  Allumez  votre imprimante.  Cela
    devrait imprimer!

               ls -l | lpr -Plpr0

 1188..  PPrroobblleemmeess aavveecc llaa LLaasseerrJJeett 55MM

 1188..11..  PPoossttSSccrriipptt

 Cette  imprimante   peut    poser des  problemes    d'impression    en
 PostScript.   Si   vous  constatez,   apres  avoir imprime 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 a <[email protected]>.

 +o    l'imprimante  est  en   configuration   d'usine  avec   le   flag
    d'impression des erreurs postscript valide.

 +o  Le fichier printcap est tres 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:

 +o    Le   filtre  utilise  (filter_court)   est  donne ci-dessous.  Il
    n'accepte  que  les  fichiers  _a_s_c_i_i,  _P_o_s_t_S_c_r_i_p_t   et   _P_o_s_t_S_c_r_i_p_t
    _c_o_m_p_r_e_s_s_e.   Ce   qui  est   interessant,   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 decimal )

 #!/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  ([email protected])
 #
 # 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

 1188..22..  RReeccttoo--vveerrssoo

 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'inserer apres la premiere ligne...

 %!Ado...

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

 ou, pour valider le recto seul:

      %%BeginFeature:  *Duplex None <<Duplex false>> setpagedevice %%EndFea-
      ture

 1199..  IInnffoorrmmaattiioonnss ccoonncceerrnnaanntt ccee ddooccuummeenntt

 Sauf changements, les documents HOWTO sont places sous  copyright  par
 leurs  auteurs respectifs.  Les  documents  Linux HOWTO peuvent   etre
 reproduits  et distribues   en  tout ou  partie,  par   quelque  moyen
 physique    que   ce  soit,  sans   l'autorisation  de  l'auteur.  Les
 traductions et travaux  derives    sont   egalement     permis    sans
 autorisation  expresse.    La  distribution  a  titre  commercial  est
 permise  et  meme encouragee; cependant, l'auteur souhaiterait en etre
 averti.

 En bref, nous souhaitons que l'information contenue  dans ces document
 soit  repandue   le   plus  largement    possible.   Cependant,   nous
 souhaitons  maintenir  le  copyright sur ce document, et souhaiterions
 etre avertis de toute re-distribution.  Si vous  avez des questions  a
 ce   propos,  contactez  Greg   Hankins,  le nouveau coordinateur  des
 documents  Linux  HOWTO  a  l'adresse  <[email protected]>.      Son
 representant          francais          est         Eric         Dumas
 <[email protected],[email protected]>.