<!doctype linuxdoc system>

<article>

<title>Printing-HOWTO
<author>Grant Taylor &lt;gtaylor+pht@picante.com&gt;,
traduction Jean-Michel VANSTEENE &lt;J.M.Vansteene@frcl.bull.fr&gt;,
&lt;vanstee@worldnet.fr&gt;

<date>12 Novembre 1997


<!-- Table des matieres -->
<toc>

<sect>
Introduction
<p>

Le  Printing-HOWTO devrait  contenir  tout ce  dont  vous avez  besoin pour
mettre  en  place  les   services  d'impression sur   votre  syst&egrave;me
Linux. Comme vous vous en doutez peut-&ecirc;tre, ceci est un tantinet plus
compliqu&eacute;  que le ``simple''  <it/clic/  du monde <it/Microsoft/  et
<it/Apple/, mais  en   contre-partie,    c'est beaucoup  plus     souple et
certainement  plus  facile     &agrave;  administrer   pour     les  grands
r&eacute;seaux.

Ce document est  organis&eacute; de fa&ccedil;on  &agrave ce que la lecture
de la premi&egrave;re moiti&eacute; suffise  &agrave; la mise en place d'un
syst&egrave;me    qui   ``tourne''.    Les    choses   plus  obscures voire
particuli&egrave;res sont    concentr&eacute;es   dans la   deuxi&egrave;me
moiti&eacute;. Vous pouvez vous r&eacute;f&eacute;rer &agrave; la table des
mati&egrave;re pour les d&eacute;tails.

Depuis la version 3.x, ce  document a &eacute;t&eacute; compl&egrave;tement
r&eacute;&eacute;crit   et    un    certain   nombre    d'informations  ont
&eacute;t&eacute; retir&eacute;es.   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 tomb&eacute;e:
vous trouverez ici  un document sensiblement plus  concis.  S'il manque une
information  qui  vous  semble  importante,  nous   vous encourageons  soit
&agrave; parcourir l'ancien HOWTO,  soit &agrave; nous envoyer un  courrier
nous  proposant d'ajouter ladite   information.   L'adresse du site  de  G.
Taylor est <tt>http://www.picante.com/~gtaylor/pht/</tt>.

<p>

En vous souhaitant comme  &agrave; l'accoutum&eacute;e, moulte satisfaction
dans vos recherches   et  pleine r&eacute;ussite dans la   configuration de
votre  imprimante  (Note : D&eacute;sol&eacute;  : ça vouloir  dire  nous
esp&eacute;rer  toi r&eacute;ussir configurer imprimante :-)).

<p>

Les  HOWTOs  fran&ccedil;ais  peuvent &ecirc;tre trouv&eacute;s  en France,
notamment sur les sites

<tscreen><verb>
      ftp.lip6.fr             (/pub/linux/french/docs/HOWTO)
      ftp.univ-angers.fr      (/pub/linux/french/docs/HOWTO)
</verb></tscreen>

<sect1>
Historique
<p>

Ce   document est  le troisi&egrave;me   du  nom, c'est  &agrave; dire   la
troisi&egrave;me version  compl&egrave;tement revue (en esp&eacute;rant que
sa    structure  se  stabilise un    peu).   L'histoire  du  PHT  peut etre
bri&egrave;vement d&eacute;crite ainsi :

<p>

J'ai commenc&eacute;   &agrave;   &eacute;crire    le premier   HOWTO    en
r&eacute;ponse &agrave; un  nombre assez cons&eacute;quent de questions qui
avaient &eacute;t&eacute; pos&eacute;es dans comp.os.linux.  C'&eacute;tait
en  fait une    FAQ   que  j'avais nomm&eacute;e   HOWTO.   Cette   version
&eacute;tait disponible uniquement en ASCII.

<p>

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

<p>

Apr&egrave;s avoir  un peu laiss&eacute; le  PHT vieillir pendant une bonne
ann&eacute;e, sans avoir pu trouver quelqu'un souhaitant le maintenir, j'ai
d&eacute;cid&eacute;  de  le  r&eacute;&eacute;crire.  Cette  version   est
conforme au ``standard'' Linuxdoc-SGML.

<p>

<sect1>
Copyright
<p>

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  &ecirc;tre  faite  sans le consentement   de
l'auteur sauf si  vous  supprimez du document  toute  marque qui lui   fait
r&eacute;f&eacute;rence,  ainsi qu'au  traducteur   et &agrave; toutes  les
personnes  cit&eacute;es   (y     compris les    adresses   de     courrier
&eacute;lectronique) et que vous le diffusez en votre nom.  L'auteur (et le
traducteur) ne sauraient &ecirc;tre   tenus responsables de propos qui  ne
sont pas les leurs.

<p>

Le     coordinateur     des    HOWTOs  est      actuellement   Greg Hankins
&lt;gregh@sunsite.unc.edu&gt;.  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     &lt;dumas@freenix.fr,
dumas@Linux.EU.Org&gt;.

<p>

<sect>
Qu'est-ce que l'impression sous UNIX ?
<p>

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 &agrave;  passer  au suivant.   Les  d&eacute;butants trouveront
l'information suffisante, je  l'esp&egrave;re, pour  comprendre comment les
donn&eacute;es  sont   v&eacute;hicul&eacute;es  vers   leur   ch&egrave;re
imprimante.

<P>

La fa&ccedil;on  la plus simple d'imprimer sous   Unix (et donc  Linux) est
d'envoyer les donn&eacute;es directement au pilote de l'imprimante.

<tscreen><verb>
      ls >/dev/lp0
</verb></tscreen>

Cette m&eacute;thode  a n&eacute;anmoins un gros inconv&eacute;nient&nbsp;:
elle ne tire  pas  parti des caract&eacute;ristiques  multi-t&acirc;ches du
syst&egrave;me d'exploitation. En effet  vous devrez attendre que le tampon
de l'imprimante ait absorb&eacute;  toutes les donn&eacute;es pour  pouvoir
continuer &agrave; travailler.

<P>

Une meilleure  m&eacute;thode    consiste   &agrave;  utiliser   un   spool
d'impression,  dont  le  r&ocirc;le  est  de  collecter les  donn&eacute;es
temporairement dans  des fichiers afin  de  les envoyer, en t&acirc;che  de
fond, &agrave; l'imprimante.  Lorsque  plusieurs fichiers sont soumis,  ils
seront  imprim&eacute;s dans  l'ordre  de soumission (premier entr&eacute;,
premier sorti). La zone  de spool est donc  bien une <bf>file</bf>.  On dit
que  les travaux sont   dans     la <bf>file  d'impression</bf>.      Cette
m&eacute;thode met en jeu  deux acteurs&nbsp;: le client  (<it/lpr/) permet
&agrave; tout  utilisateur   de soumettre des   travaux   d'impression.  Le
serveur quant &agrave; lui (<it/lpd/) les prend en charge en t&acirc;che de
fond.  Il r&eacute;cup&egrave;re les donn&eacute;es dans le spool ainsi que
des informations   qui   lui  sont n&eacute;cessaires  pour    l'impression
proprement dite.

<p>

Nous  verrons dans  un chap&icirc;tre  un  peu plus loin comment  tout cela
interagit.  Arr&ecirc;tons-nous l&agrave; pour  le  moment et penchons-nous
d&eacute;j&agrave; sur  le plus important:  les p&eacute;riph&eacute;riques
du syst&egrave;me.

<p>

<sect>
Comment Imprimer
<p>

Si  le   d&eacute;mon   d'impression de  votre  machine   est  correctement
configur&eacute;, vous pouvez lire le  <it/Printing-Usage HOWTO/

<tt>&lt;http://www.loria.fr/services/linux/HOWTOFRENCH/Printing-Usage-HOWTO/Printing-Usage-HOWTO.html</tt>

qui  traite plus particuli&egrave;rement de  la commande <tt>lpr</tt> et de
la manipulation des files d'impression.

<p>

Si, par  contre, vous venez  d'installez un nouveau syst&egrave;me  (un qui
marche,  quoi...) vous  souhaitez  certainement   configurer les   services
d'impression.  Restez sur cette cha&icirc;ne :-) ne zappez pas et allons-y.

<p>

<sect1>
Les p&eacute;riph&eacute;riques d'imprimantes dans le syst&egrave;me
<p>

Les imprimantes  sont  souvent rattach&eacute;es  (surtout  les imprimantes
personnelles) au port parall&egrave;le. Elles sont g&eacute;r&eacute;es par
les p&eacute;riph&eacute;riques de type <tt>/dev/lp?</tt>.

<p>

Si  vous  disposez   d'une imprimante  s&eacute;rie,  vous utiliserez  bien
s&ucirc;r   <tt>/dev/ttyS?</tt>  (ou  <tt>/dev/ttys?</tt>),   et  non   pas
<tt>/dev/lp?</tt> ni <tt>/dev/cua?</tt>.   Le majeur de <tt>/dev/ttyS?</tt>
est 4, celui de <tt>/dev/cua?</tt> est 5.

<p>

<sect1>
Le p&eacute;riph&eacute;rique lp
<p>

<sect2>
Noyaux ant&eacute;rieurs &agrave; 2.1.32
<p>

Si vous utilisez une  imprimante parall&egrave;le, vous devez disposer d'un
noyau    Linux   compil&eacute;       avec    les   gestionnaires        de
p&eacute;riph&eacute;riques d'impression <tt>lp</tt>.  Verifiez-le &agrave;
l'aide de la commande

<tscreen><verb>
      cat /proc/devices
</verb></tscreen>

qui doit  vous montrer un ou plusieurs  p&eacute;riph&eacute;riques lp.  De
plus le r&eacute;pertoire    <tt>/dev</tt>  doit comporter la    liste  des
p&eacute;riph&eacute;riques <tt>/dev/lp0</tt>, <tt>/dev/lp1</tt>, ...

<p>

Sur un  syst&egrave;me    de type XT,   <tt>LPT1:</tt>  correspond &agrave;
<tt>/dev/lp0</tt> (majeur  6,  mineur  0),  alors  que   sur un  AT,  LPT1:
correspond &agrave; <tt>/dev/lp1</tt> (majeur 6, mineur 1).

<tscreen><verb>
     Nom     Majeur  Mineur  Port
     lp0     6       0       0x3bc
     lp1     6       1       0x378
     lp2     6       2       0x278
</verb></tscreen>

Le port parall&egrave;le  peut &ecirc;tre g&eacute;r&eacute; par le  pilote
du  noyau de deux  mani&egrave;res.  D'une part  par polling  (scrutation),
d'autre  part   par  interruption.    La  m&eacute;thode de    gestion  par
interruption est  en th&eacute;orie plus  efficace, puisque le gestionnaire
n'est  sollicit&eacute;  par  une interruption qu'au    moment o&ugrave; un
travail est   &agrave; effectuer.  En   pratique,  il  semble que  ce  soit
d&eacute;pendant de la machine. Dans beaucoup de cas, il n'y  a pas tant de
diff&eacute;rence que cela.

<p>

Un  certain  nombre   d'utilisateurs   se sont    plaints  que  leur   port
parall&egrave;le bidirectionnel   n'&eacute;tait  pas d&eacute;tect&eacute;
lorsqu'ils utilisent un vieux cable unidirectionnel. V&eacute;rifiez que le
v&ocirc;tre est r&eacute;cent.

<p>

Vous ne pourrez pas utiliser les pilotes <tt/plip/ et <tt/lp/ en m&ecirc;me
temps. Vous  pouvez cependant  charger  l'un ou l'autre soit  manuellement,
soit   par <tt/kerneld/   version  2.x (et   noyaux  au   moins 1.3.x).  En
configurant    les    interruptions      avec   attention,   vous   pourrez
th&eacute;oriquement  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  &agrave; partir  d'une  simple et
ing&eacute;nieuse commande.

<p>

Un petit utilitaire appel&eacute;  <tt/tunelp/ vous permet, sous  le compte
super-utilisateur,     de    r&eacute;gler  les       interruptions    d'un
p&eacute;riph&eacute;rique <tt/lp/, le mode de fonctionnement du pilote, la
fr&eacute;quence de scrutation, et plein d'autres options...

<p>

Avec LILO et LOADLIN, vous pouvez configurer  les adresses et interruptions
utilis&eacute;s par le pilote.

<tscreen><verb>
     Syntaxe:      lp=port0[,irq0[,port1[,irq1[,port2[,irq2]]]]]

     Par exemple:   lp=0x378,0   ou   lp=0x278,5,0x378,7 **
</verb></tscreen>

(**) le  port <tt/lp0/ en <tt/0x3bc/ n'est  plus utilis&eacute;  sur les PC
r&eacute;cents.

<p>

Si   cette    caract&eacute;ristique est    utilis&eacute;e,   vous   devez
sp&eacute;cifier tous  les ports que vous  souhaitez utiliser, il n'y a pas
de valeurs par d&eacute;faut. Vous  pouvez invalider un pilote en indiquant
<tt>lp=0</tt>.

<p>

Lorsque le pilote est charg&eacute; en tant que module  (version noyau 2 et
1.3.x),  il  est &eacute;galement possible   de sp&eacute;cifier les lignes
d'interruption    utilis&eacute;es        soit     dans  le         fichier
<tt>/etc/conf.modules</tt>, soit  sur la  ligne  de  commande de insmod  en
utilisant  la     m&ecirc;me   syntaxe.     Les    param&egrave;tres   sont
<tt>io=port0,port1,port2</tt> et   <tt>irq=irq0,irq1,irq2</tt>.   Lisez les
mages de manuel de <tt/insmod/ pour plus d'information.

<p>

Le   code source   du pilote   de  port  parall&egrave;le   se trouve  dans
<tt>/usr/src/linux/drivers/char/lp.c</tt>.

<sect2>
Noyaux  post&eacute;rieurs   &agrave; 2.1.32: le p&eacute;riph&eacute;rique
parport.
<p>

Depuis  le noyau 2.1.33 (il existe   un patch pour   la version 2.0.30), le
p&eacute;riph&eacute;rique  lp   est    simplement un   client  du  nouveau
p&eacute;riph&eacute;rique   <tt/parport/.   L'ajout de  ce    <tt/parport/
corrige  un certain     nombre  de   probl&egrave;mes  dont    &eacute;tait
affubl&eacute; <tt/lp/ - il peut partager le port avec d'autres pilotes, il
met dynamiquement en relation les  ports parall&egrave;les disponibles avec
les  num&eacute;ros de   p&eacute;riph&eacute;riques  plut&ocirc;t   que de
forcer une correspondance statique entre addresse d'entr&eacute;/sortie et
num&eacute;ro de port, ...

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

<sect1>
Les p&eacute;riph&eacute;riques s&eacute;rie
<p>

Les p&eacute;riph&eacute;riques   s&eacute;rie            utilisables  sont
appel&eacute;s    <tt>/dev/ttyS?</tt>    (les   p&eacute;riph&eacute;riques
<tt>/dev/cua?</tt> sont  aussi  s&eacute;rie mais  pas utilisables  dans ce
domaine).   L'utilitaire <tt/stty/ permet  de visualiser ou de modifier les
caract&eacute;rtiques  d'un  port  donn&eacute;. <tt/setserial/  permet  de
controler   et configurer les  IRQ   et adresses d'entr&eacute;e/sortie  si
besoin est.  R&eacute;f&eacute;rez-vous  au <it/Serial-HOWTO/  pour de plus
amples renseignements.

<p>

Si  vous utilisez une imprimante s&eacute;rie  lente avec le contr&ocirc;le
de flux,  vous constaterez peut-&ecirc;tre  que certaines  impressions sont
tronqu&eacute;es. Ceci est certainement  d&ucirc; au port s&eacute;rie dont
le    comportement   par  d&eacute;faut est   de    purger  son  tampon des
caract&egrave;res  non  transmis  dans  les   30 secondes apr&egrave;s   sa
fermeture.  Une imprimante trop  lente n'aura pas  le temps de le vider. Le
tampon peut contenir 4096 caract&egrave;res.

<p>

Si la  commande <tt>cat file > /dev/ttyS2</tt>  produit une sortie correcte
pour les  fichiers courts et  tronqu&eacute;e pour les longs fichiers, vous
&ecirc;tes peut-&ecirc;tre dans ce cas.

<p>

Le  d&eacute;lai de   30  secondes peut  &ecirc;tre ajust&eacute;  &agrave;
l'aide  du   param&egrave;tre ``closing_wait''  (attente fermeture)   de la
commande <tt>setserial</tt> (version 2.12 et ult&eacute;rieure).

<p>

Notez   que   les   ports  s&eacute;rie    sont  g&eacute;n&eacute;ralement
configur&eacute;s au d&eacute;marrage de la machine grace &agrave; un appel
&agrave; <tt>setserial</tt> dans le fichier   <tt>/etc/rc.d/rc.serial</tt>.
Vous pouvez rajouter toute option n&eacute;cessaire dans ce fichier.

<p>

<sect>
Les imprimantes support&eacute;es
<p>

Le noyau  Linux supporte quasiment toutes  les imprimantes que  vous pouvez
physiquement connecter  au port  s&eacute;rie  ou parall&egrave;le. Il y  a
n&eacute;anmoins des petites   choses &agrave; savoir,  notamment certaines
imprimantes    &agrave;    &eacute;viter     bien      qu'elles    puissent
(&eacute;lectriquement parlant) communiquer avec Linux. En premier lieu, il
existe   toute  une  g&eacute;n&eacute;ration d'imprimantes   incompatibles
s'appuyant sur  le ``Windows Printing System''  et qui  r&eacute;pondent au
label ``pour   Windows''. Ces imprimantes  ne fonctionnent  pas avec Linux.
Elles  font  travailler   l'unit&eacute;  centrale pour    des t&acirc;ches
normalement  laiss&eacute;es    au   microprocesseur  de      l'imprimante.
Malheureusement ces t&acirc;ches ne peuvent  etre effectu&eacute;es que par
le pilote du constructeur  qui   ne tourne  que sous  Windows.   Conclusion
n'achetez pas ce genre d'imprimante pour Linux.

<p>

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

<p>

Si vous ne  comptez pas avoir de PostScript  &agrave; imprimer, vous pouvez
connecter une   simple imprimante matricielle retrouv&eacute;e   dans votre
grenier.  Sinon, comme  nous le verrons,  il faudra passer par un  logiciel
d'interpr&eacute;tation du  <it/PostScript/ (le  plus c&eacute;l&egrave;bre
est  le  logiciel  gratuit  <it/GhostScript/   de  <it/Alladin  software/).
Utilisez alors une imprimante reconnue par ce logiciel.

<p>

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

<p>

Les imprimantes support&eacute;es sont:

<tscreen><verb>
     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 
</verb></tscreen>

<sect>
Quel d&eacute;mon d'impression ?
<p>

Jusque r&eacute;cemment, le  choix  sous Linux &eacute;tait simple  puisque
tout le monde disposait   du seul d&eacute;mon 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  syst&egrave;mes SVR4 tels que Sun  Solaris sont fournis avec
un paquetage logiciel d'impression centr&eacute; sur <tt/lpsched/.  D'autre
part,  sous  Linux, quelques  fournisseurs   proposent <tt>LPRng</tt>,  une
impl&eacute;mentation    beaucoup    plus  r&eacute;cente    et  disponible
gratuitement.   <tt>LPRng</tt>  est   tr&egrave;s  facilement administrable
notamment sur des plate-formes importantes et contient du code plus robuste
(moins farfelu??)  que <tt/lpd/.

<p>

A l'heure actuelle malgr&eacute; toutes ces nouveaut&eacute;s, <tt/lpd/ est
certainement ce qui convient le mieux &agrave; la plupart des utilisateurs.
M&ecirc;me  si ce  n'est  pas le  fin  du  fin,  il  tourne bien une   fois
configur&eacute;  et,     chose  importante,  il     est tr&egrave;s   bien
document&eacute; dans les livres sur Unix.

<p>

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

<p>

<sect>
L'impression, comment &ccedil;a marche
<p>

Nous consid&eacute;rons ici que  vous utilisez la suite logicielle <tt/lpd/
que nous d&eacute;crirons  d'ailleurs. Elle est  la plus r&eacute;pandue et
fonctionne tr&egrave;s bien.

<sect1>
Impression locale et impression distante 
<p>

L'impression   locale  permet    aux utilisateurs  d'envoyer   des  travaux
d'impression  &agrave;  l'imprimante directement  rattach&eacute;e &agrave;
leur machine.

<p>

L'impression  distante, par    contre,  permet  de soumettre   des  travaux
d'impression   depuis  une  machine, &agrave;  une   autre  machine  sur le
r&eacute;seau, sur laquelle est connect&eacute;e une imprimante.

<p>

<sect1>
De quoi avez vous besoin 
<p>

Nous supposons que vous savez &eacute;diter un  fichier texte sous Linux et
que  vous avez   une bonne  compr&eacute;hension   des  notions  de  droits
d'acc&egrave;s et de propri&eacute;t&eacute; (<tt/chmod/, <tt/chown/).

<p>

Nous supposons &eacute;galement  que votre  syst&egrave;me Linux fonctionne
correctement.  En particulier,  si   vous souhaitez  faire  de l'impression
distante, que votre r&eacute;seau fonctionne d&eacute;j&agrave;.

<p>

Consultez &agrave; ce propos les  nombreuses documentations disponibles sur
le sujet  (comme  on dit: RTFM, ce   qui  en bon  francais veut   dire LLBD
<tt>:-)</tt>).

<p>

<sect1>
Les programmes importants
<p>

Le syst&egrave;me  d'impression Unix comprend (au  moins) 5 programmes. Ils
doivent se trouver &agrave;  l'endroit  d&eacute;crit (c'est le  mieux)  ou
dans un r&eacute;pertoire accessible  (avec  la variable PATH),  appartenir
&agrave; root (groupe lp), et avoir les permissions suivantes :

<tscreen><verb>
             -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
</verb></tscreen>

Les quatre  premiers   sont  utilis&eacute;s  pour soumettre,   visualiser,
annuler, contr&ocirc;ler les   travaux   d'impression. Le dernier    est le
d&eacute;mon.

<p>

Il existe bien entendu des pages de manuel  en ligne pour ces commandes que
vous  pourrez consulter  pour    plus d'information.  Le  point   important
&agrave; noter  est    que   les commandes   <tt>lpr</tt>,    <tt>lpq</tt>,
<tt>lpc</tt> et    <tt>lprm</tt> op&egrave;rent   sur une    imprimante par
d&eacute;faut nomm&eacute;e  <tt>lp</tt>.  La    variable   d'environnement
<tt>PRINTER</tt>    peut contenir le nom   de   l'imprimante que vous  avez
choisie.  La  sp&eacute;cification du nom  d'une imprimante sur la ligne de
commande  surchargera ces d&eacute;finitions  (les imprimantes de l'exemple
sont hors-ligne):

<p>

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

<sect2>
Le client et le serveur
<p>

Voici ci-dessous les interactions client - d&eacute;mon

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

            Soumission d'un requete d'impression


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

            Soumission d'une demande d'information

</verb></tscreen>

Lorsque      le   syst&egrave;me     d&eacute;marre,   <tt>lpd</tt>     est
charg&eacute;.   Il lit   le   fichier   <tt>/etc/printcap</tt> (dont  vous
trouverez  une explication  plus  loin) qui  d&eacute;crit  les imprimantes
connues.

<sect2>
Les fichiers soumis par le client
<p>

Lorsqu'un  programme    client    soumet  un   travail  d'impression,    il
g&eacute;n&egrave;re deux fichiers qu'il &eacute;crit dans le spool:

<itemize>

<item>

Un fichier de donn&eacute;es qui  contient une copie des donn&eacute;es que
vous souhaitez soumettre &agrave; l'imprimante. Il s'agit bien d'une copie,
ce qui signifie  que toute modification  ult&eacute;rieure de votre fichier
n'alt&eacute;rera pas l'impression.

<item>

Un fichier de description du travail &agrave; effectuer.

</itemize>

<sect2>
La commande lpr
<p>

La commande <tt>lpr</tt> soumet un travail d'impression.  Elle se charge de
mettre les donn&eacute;es  &agrave; imprimer dans  un fichier dans le spool
d'impression. Ces donn&eacute;es  peuvent provenir  soit d'un fichier  (les
donn&eacute;es   sont       dupliqu&eacute;es    et   toute    modification
ult&eacute;rieure du  fichier d'origine n'affectera pas l'impression), soit
de   l'entr&eacute;e standard  (stdin).   Le   d&eacute;mon  est  averti de
l'existence  d'un nouveau fichier et   envoie, d&egrave;s que possible, les
donn&eacute;es vers l'imprimante physique (ou la machine distante).

<p>

La  taille  du  spool  est  bien  entendu limit&eacute;e &agrave;  la place
disponible sur votre disque dans <tt>/usr/spool/</tt> ou à la taille limite
spécifiée  dans  le fichier  de configuration   <tt/printcap/.  Vous pouvez
n&eacute;anmoins imprimer un gros fichier en demandant &agrave; <tt/lpr/ de
ne  pas dupliquer le fichier.     Le  d&eacute;mon d'impression ira   alors
chercher le fichier que vous indiquez dans la ligne de commande et non plus
dans le spool.

<sect2>
La commande lpq
<p>

La commande <tt>lpq</tt>  affiche le contenu du  spool, pour une imprimante
donn&eacute;e.     Une des   informations    importantes fournies   est  le
num&eacute;ro  du  travail (job).  C'est   lui  qui pourra  servir &agrave;
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  <tt/lpd/  essaie   d'envoyer   &agrave;
l'impression).

<sect2>
La commande lprm
<p>

La commande <tt>lprm</tt> enl&egrave;ve  un travail de la  file (et donc le
fichier  du spool).  Vous pouvez soit  sp&eacute;cifier un num&eacute;ro de
job,  soit  un tiret   permettant  de  supprimer  tous   les   travaux vous
appartenant.   Si    vous   &ecirc;tes  root,    tous    les  travaux  sont
supprim&eacute;s.    Pour   supprimer    les   travaux    d'un utilisateur,
sp&eacute;cifiez son nom.

<tscreen><verb>
     # lprm 1
     dfA001Aa00484 dequeued
     cfA001Aa00484 dequeued
     #
</verb></tscreen>

Le   premier fichier contient les  donn&eacute;es  &agrave; imprimer.  Il a
&eacute;t&eacute; cr&eacute;&eacute;  par  <tt>lpr</tt>. Le deuxi&egrave;me
contient des informations que le d&eacute;mon utilise pour savoir que faire
des donn&eacute;es (impression  locale, distante, ...)  Consultez le manuel
en ligne : <tt>lpd(8)</tt>.

<sect2>
La commande lpc
<p>

La commande <tt>lpc</tt>  permet de  contr&ocirc;ler  les travaux en  cours
ainsi  que   l'imprimante, et certains     aspects de son   utilisation. En
particulier,  vous pouvez d&eacute;marrer ou  stopper la sortie des travaux
du  spool  pour l'impression,   valider  ou  invalider une   imprimante, et
m&ecirc;me modifier   l'ordre  d'impression des  fichiers.   Les  commandes
suivantes  permettent  d'invalider l'impression sur <tt/mon_imprimante/, de
valider le spool sur <tt>ton_imprimante</tt>, et  de faire passer le job 37
en d&eacute;but de file:

<tscreen><verb>
     lpc down mon_imprimante
     lpc enable ton_imprimante
     lpc topq 37
</verb></tscreen>

<tt>lpc</tt> peut  fonctionner en interactif  si aucun  param&egrave;tre ne
lui est  pass&eacute;. Vous pouvez  lire les pages  du manuel en ligne pour
obtenir des instructions compl&egrave;tes. A noter que certaines actions de
<tt/lpc/ sont r&eacute;serv&eacute;es au super-utilisateur (root).

<sect1>
Les r&eacute;pertoires importants
<p>

Le r&eacute;pertoire le plus  important est le r&eacute;pertoire de  spool,
dans  lequel  les  donn&eacute;es  vont   &ecirc;tre stock&eacute;es  avant
d'&ecirc;tre   imprim&eacute;es.   Typiquement,    un  syst&egrave;me  sera
configur&eacute;    pour    avoir   un r&eacute;pertoire       de spool par
imprimante. Cela rend la gestion  plus facile.  Sur mon syst&egrave;me, par
exemple,    le       r&eacute;pertoire     <tt>/usr/spool/lp</tt> est    le
r&eacute;pertoire   principal. Sous ce   r&eacute;pertoire, on  y trouve le
sous-r&eacute;pertoire     <tt>lpr0</tt>, correspondant      &agrave;    la
d&eacute;claration  que   j'ai faite  dans   <tt>/etc/printcap</tt> pour le
r&eacute;pertoire de spool de mon imprimante.

<p>

NDT: Ce  qui va suivre d&eacute;crit  une fa&ccedil;on de faire pour donner
les   bons     droits    d'acc&egrave;s    aux     r&eacute;pertoires    de
spool.   Diff&eacute;rentes   m&eacute;thodes sont  possibles, sachant que,
comme  sous  Un*x, beaucoup de choses  sont  possibles dans  ce domaine, il
convient de  faire  attention de  ne   pas offrir de failles   &agrave;  la
s&eacute;curit&eacute; de l'ensemble.

<p>

Le r&eacute;pertoire de spool doit appartenir &agrave; <tt>root</tt>, et au
groupe <tt>lp</tt>,   avec  les  droits  de lecture/d'&eacute;criture  pour
utilisateur et groupe, et lecture seule pour le reste du monde.

<tscreen><verb>
        chmod ug=rwx,o=rx lpr0
        chgrp lp lpr0

     drwxrwxr-x   2 root     lp           1024 Feb 11 10:51 lpr0/
</verb></tscreen>

Un autre  r&eacute;pertoire doit &eacute;galement &ecirc;tre pr&eacute;sent
: <tt>/usr/spool/lpd</tt>  avec  les m&ecirc;mes  droits.   Vous aurez plus
d'informations plus avant dans ce document.

<sect1>
Les fichiers importants
<p>

En    dehors     des   programmes  que      nous  avons  d&eacute;j&agrave;
&eacute;voqu&eacute;s pr&eacute;c&eacute;demment, quatre  fichiers  doivent
se  trouver   dans chaque r&eacute;pertoire  de  spool.   Avec les versions
r&eacute;centes des  gestionnaires d'impression,  vous n'avez pas  &agrave;
vous soucier de ces fichiers.  Ils sont cr&eacute;&eacute;s automatiquement
s'ils n'existent   pas :  <tt>.seq</tt>,  <tt>errs</tt>,   <tt>lock</tt> et
<tt>status</tt>.      Ces     fichiers     doivent     avoir   les   droits
<tt>-rw-rw-r--</tt>.  Le  fichier  <tt>.seq</tt> contient un compteur  pour
l'affectation des num&eacute;ros de  jobs.  Le fichier <tt/status/ contient
le  message  devant   &ecirc;tre  &eacute;mis  par   la  commande   <tt>lpc
stat</tt>. Le fichier  <tt>lock</tt> est utilis&eacute; par le d&eacute;mon
pour qu'il n'imprime qu'un fichier &agrave;  la fois.  Le fichier <tt/errs/
contient les erreurs survenues sur l'imprimante.

<p>

Le fichier <tt>errs</tt> n'est pas obligatoire.  De plus, il peut s'appeler
comme vous le souhaitez, pourvu que son nom soit d&eacute;clar&eacute; dans
le fichier <tt>/etc/printcap</tt> que nous d&eacute;crirons dans la suite.

<sect>
Configurer les services d'impression
<p>

La   configuration minimale pour   un syst&egrave;me d'impression permet de
mettre des  fichiers  en file d'impression   puis de les imprimer.    Il ne
pr&ecirc;te  aucune  attention  au  fait que   votre imprimante puisse  les
imprimer  (les comprendre m&ecirc;me)  et  ne vous permettra pas d'imprimer
des choses extraordinaires. N&eacute;anmoins, c'est un premier pas.

<sect1>
Le fichier <tt>/etc/printcap</tt>
<p>

Le fichier  <tt>/etc/printcap</tt> d&eacute;crit toutes les imprimantes que
votre  syst&egrave;me    doit  conna&icirc;tre.      Il    peut  &ecirc;tre
modifi&eacute; avec votre &eacute;diteur pr&eacute;f&eacute;r&eacute;, doit
appartenir &agrave; root et avoir les droits suivants:

<tscreen><verb>
     -rw-r--r--   1 root     system        164 Oct 25 21:23 /etc/printcap
</verb></tscreen>

Le contenu  du    fichier semble  assez    incompr&eacute;hensible &agrave;
premi&egrave;re    vue.    Il    respecte    effectivement   une    syntaxe
particuli&egrave;re et  malgr&eacute; les  apparences, assez simple lorsque
l'on conna&icirc;t !    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 <tt>printcap(5)</tt> (ou  empressez-vous de
les r&eacute;cup&eacute;rer   si  vous ne  les avez  pas).   Plus loin sont
d&eacute;crits les param&egrave;tres importants.

<p>

Une   entr&eacute;e   de  <tt/printcap/    d&eacute;crit   une  imprimante,
c'est-&agrave;-dire une correspondance nom  logique -  imprimante physique,
puis d&eacute;crit la  fa&ccedil;on de transmettre les  donn&eacute;es. Par
exemple, une entr&eacute;e  va d&eacute;crire le p&eacute;riph&eacute;rique
physique &agrave; utiliser, le r&eacute;pertoire  de spool, les traitements
&agrave; effectuer sur  les donn&eacute;es avant  impression,  ou encore le
r&eacute;pertoire  dans lequel   seront notifi&eacute;es  les erreurs. Vous
pouvez aussi limiter la quantit&eacute;  de donn&eacute;es pour un job,  ou
m&ecirc;me  limiter  l'acc&egrave;s  d'une  imprimante  &agrave; une classe
d'utilisateurs.  Vous trouverez dans  la partie suivante la description des
champs.

<p>

Il   est tout  &agrave;  fait   possible  d'avoir plusieurs  entr&eacute;es
d&eacute;crivant      diff&eacute;rentes      fa&ccedil;ons d'envoyer   des
donn&eacute;es &agrave;  une m&ecirc;me  imprimante physique.  Par exemple,
une imprimante    physique   peut supporter les   formats   HP  LaserJet et
PostScript,   en fonction  de   la  s&eacute;quence   de  caract&egrave;res
envoy&eacute;e au  d&eacute;but  d'un travail.   Vous d&eacute;finirez donc
deux entr&eacute;es, l'une permettant  de traiter le  format HP, l'autre le
format  <it/PostScript/.     Les  programmes     g&eacute;n&eacute;rant des
donn&eacute;es  ``HP'' les    enverront   &agrave; l'imprimante HP,    ceux
g&eacute;n&eacute;rant des   donn&eacute;es  <it/PostScript/ les  enverront
&agrave; l'imprimante <it/PostScript/. Toutes les deux représentent la même
imprimante physique.

<p>

Les   programmes  qui modifient  les  donn&eacute;es  avant  de les envoyer
&agrave; l'imprimante physique sont des filtres.

<p>

Exemple d'entr&eacute;e d'un fichier <tt>/etc/printcap</tt>:

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

Ceci d&eacute;finit une  imprimante  dont les  noms sont   <tt>lp</tt> (par
d&eacute;faut), <tt>dj</tt>  et <tt>deskjet</tt>.   Les deux  derniers sont
des alias de la m&ecirc;me imprimante.  La file (on dit tr&egrave;s souvent
le spool, m&ecirc;me en fran&ccedil;ais...)   de cette imprimante de trouve
dans  le r&eacute;pertoire <tt>/var/spool/lpd/dj</tt> (<tt>sd</tt> signifie
spool   directory).    Le  p&eacute;riph&eacute;rique   utilis&eacute;  est
<tt>/dev/lp0</tt>.      La    page d'en-t&ecirc;te   est   supprim&eacute;e
(<tt>sh</tt>) et   aucune limite de  taille   de fichier n'est fix&eacute;e
(<tt>mx</tt>)

<p>

Notez que la m&ecirc;me entr&eacute;e pourrait s'&eacute;crire:

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

mais c'est moins beau.
<p>

Vous pouvez consultez la page de manuel de <tt/printcap/ sur

<p>

<tt>http://www.picante.com/~gtaylor/pht/man/printcap.html</tt>. Toutes  les
options y sont d&eacute;crites.

<p>

Tous les champs except&eacute;s les noms d'imprimantes sont entour&eacute;s
de deux-points et  rep&eacute;r&eacute;s par  un  symbole de  deux  lettres
suivi du signe &eacute;gal.  Ensuite est indiqu&eacute;e la valeur qui peut
&ecirc;tre  de type  num&eacute;rique,  bool&eacute;enne ou cha&icirc;ne de
caract&egrave;res:

<tscreen><verb>
     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)
</verb></tscreen>

<sect2>
D&eacute;tails sur le champ lp
<p>

Si        vous      sp&eacute;cifiez       <tt>/dev/null</tt>         comme
p&eacute;riph&eacute;rique, tous  les   traitements se  feront,  mais  tout
partira &agrave; 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   p&eacute;riph&eacute;riques''.      Si vous
d&eacute;signez une imprimante  distante avec  <tt>rp</tt> et  <tt>rm</tt>,
<tt>lp</tt> doit contenir <tt>:lp=:</tt>.

<p>

Ne laissez  pas ce champ  vide en cas  d'impression locale, le d&eacute;mon
signalerait une erreur.

<sect2>
D&eacute;tails sur le champ lf
<p>

Tout   fichier sp&eacute;cifi&eacute;  ici  doit exister,  sinon le rapport
d'erreurs ne se ferait pas.

<sect2>
D&eacute;tails sur le champ if
<p>

Les     filtres  d'entr&eacute;e sont   des    utilitaires transformant les
donn&eacute;es qu'il re&ccedil;oivent sur leur entr&eacute;e standard en un
format particulier qu'il sortent sur leur sortie standard.  Typiquement, la
conversion   texte -  <it/PostScript/ d&eacute;j&agrave; mentionn&eacute;e.

<p>

Si vous  sp&eacute;cifiez    un filtre   d'entr&eacute;e,  le  d&eacute;mon
n'envoie            pas    directement     les       donn&eacute;es      au
p&eacute;riph&eacute;rique.  Il ex&eacute;cute le  filtre  en dirigeant les
donn&eacute;s sur son   entr&eacute;e  standard et en  d&eacute;signant  le
p&eacute;riph&eacute;rique de sortie comme sortie standard.

<p>

<sect2>
D&eacute;tails sur les champs rm et rp
<p>

Envoyer des   donn&eacute;es   &agrave; une   imprimante   rattach&eacute;e
&agrave;   une machine  distante  est  tr&egrave;s  simple:   il  suffit de
sp&eacute;cifier   le nom   de la    machine avec <tt/rm/   et    le nom de
l'imprimante  avec <tt>rp</tt>.   S'assurer que l'entr&eacute;e <tt>lp</tt>
est vide. A noter que les donn&eacute;es seront d'abord mises dans le spool
local  avant  d'&ecirc;tre  transf&eacute;r&eacute;es.  M&ecirc;me si votre
imprimante est distante, il faudra &eacute;galement un spool local.

<p>

<sect2>
D&eacute;tails sur les champs sh et sf
<p>

Les banni&egrave;res   concernent &eacute;ventuellement  les   utilisations
&agrave; plusieurs personnes. Elles identifient les jobs.

La suppression de ces  banni&egrave;res vous permet d'&eacute;conomiser  du
papier. Par   contre     la gestion  des   sauts    de    page  sera   plus
int&eacute;ressante, surtout si vous utilisez des traitements de textes qui
formatent toujours des  pages pleines.  Dans ce  cas, pas besoin de saut de
page suppl&eacute;mentaire.  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 d&eacute;but
de page.

<sect2>
D&eacute;tail sur le champ mx
<p>

Ce champ permet de limiter la taille des donn&eacute;es pour chaque job. Le
nombre &agrave; sp&eacute;cifier  est en blocs de <tt>BUFSIZE</tt> (pardon,
de 1 Ko)   sous  Linux.  La valeur   0  rend la  taille   illimit&eacute;e,
permettant la soumission de  travaux limit&eacute;e uniquement &agrave;  la
taille    du disque.   Notez   que   la   limite concerne   la   taille des
donn&eacute;es mises  en    spool,   et   non  pas  les      donn&eacute;es
envoy&eacute;es &agrave;   l'imprimante   physique.   Si  la   limite   est
d&eacute;pass&eacute;e,    le   fichier       est     tronqu&eacute;   avec
l'&eacute;mission d'un  message disant: <tt>lpr: &lt;fichier&gt;: copy file
is too large</tt>.

<p>

Cela  peut &ecirc;tre int&eacute;ressant pour  des imprimantes physiques en
mode  texte, notamment si  des utilisateurs ou des programmes cr&eacute;ent
accidentellement des donn&eacute;es trop volumineuses.

<p>

Si vous manquez de m&eacute;moire de masse, pourquoi n'inventeriez-vous pas
un  filtre qui   d&eacute;compresse  ce qu'il a   &agrave; envoyer &agrave;
l'imprimante   ?      Vous    soumettriez     alors   des    donn&eacute;es
compress&eacute;es.

<sect>
Les filtres
<p>

Si  avec  les  explications pr&eacute;c&eacute;dentes,  tout  marche  c'est
formidable, mais en r&egrave;gle g&eacute;n&eacute;ral, cela ne suffit pas.
Regardez   ci-dessous ce que l'on  obtient   sur  la  DeskJet 500,  lorsque
j'envoie un fichier texte:

<tscreen><verb>
Ceci est la premiere ligne.
                           Celle-ci est la deuxieme.
                                                    Voici la troisieme.
</verb></tscreen>

Et alors l'impression    d'un fichier <it/PostScript/...   Vous obtenez  le
listing complet    du  code <it/PostScript/  avec    les  m&ecirc;me effets
d'escalier. Une horreur.

<p>

Il faut donc quelque chose de plus et c'est  le r&ocirc;le des filtres. Les
plus observateurs   d'entre  vous  auront  peut-&ecirc;tre  remarqu&eacute;
l'existence des param&egrave;tres <tt>if</tt> (input filter) et <tt>of</tt>
(output filter) dans le fichier printcap.  Pour l'instant nous avons besoin
de <tt>if</tt>.

<p>

Un filtre  est    un  simple  programme  ex&eacute;cutable  qui    lit  les
donn&eacute;es  sur son entr&eacute;e  standard  et sort le r&eacute;sultat
sur sa sortie standard.

<p>

Commen&ccedil;ons par  &eacute;crire   un    script que vous     appellerez
<tt/filtre/ et qui ajoute des retours chariot avant chaque caract&egrave;re
fin de ligne.  Ceci &eacute;limine l'effet d'escalier.

<tscreen><verb>
     #!/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";
</verb></tscreen>

Dans   <tt>/etc/printcap</tt>,   l'entr&eacute;e  est  modifi&eacute;e   en
cons&eacute;quence:

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

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

<tscreen><verb>
     #!/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
</verb></tscreen>

Notez que  '^M' symbolise le caract&egrave;re  retour-chariot et non pas un
`^' suivi d'un 'M'. Dans emacs, pour saisir  ce caract&egrave;re, entrez la
s&eacute;quence <tt>C-q  C-m</tt>,    alors que  sous  vi, entrez   <tt>C-v
C-m</tt>.   Le    test  de &dollar;1   permet    d'invalider l'insertion du
retour-chariot par la commande  <tt>lpr  -l</tt> A savoir que  <tt>lpr</tt>
g&eacute;n&egrave;re  des  param&egrave;tres qui   sont  pass&eacute;s   au
filtre. Par d&eacute;faut  il passe <tt>-w0</tt>.   Si l'option <tt>-l</tt>
est donn&eacute;e, il  passe <tt>-c</tt>.  Ce script est traditionnellement
nomm&eacute; <tt>/usr/lib/lpf</tt>.  Si vous avez  plusieurs scripts de  la
sorte, une  bonne id&eacute;e consiste  &agrave;  les  mettre tous dans  un
sous-r&eacute;pertoire, par exemple <tt>/usr/lib/lpd</tt>.

<p>

Il se peut aussi que votre imprimante puisse passer dans un mode permettant
l'ajout  de  retour-chariots  gr&acirc;ce    &agrave; une   s&eacute;quence
d'&eacute;chappement. Voici   un  exemple de filtre  utilisant  la commande
<tt>echo -ne</tt> pour envoyer cette s&eacute;quence:

<tscreen><verb>
     #!/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&amp;k2G
     cat
     echo -ne \\f
</verb></tscreen>

Vous pouvez compliquer  les filtres  comme bon  vous  semble. Le mieux  est
d'avoir un  filtre qui  reconna&icirc;t le  fichier  d'entr&eacute;e et  le
convertit   au bon format   pour   votre imprimante.   Un  tel filtre   est
appel&eacute;  filtre magique.   Ne  vous emb&ecirc;tez  pas  &agrave;  les
&eacute;crire         vous-m&ecirc;me,  il    en    existe   s&ucirc;rement
d&eacute;j&agrave;  un  qui        vous  convient.    Allez    voir     sur
<tt>tsx-11.mit.edu:/pub/linux/sources/usr.bin/magic-filter-x.y.tar.gz</tt>.

<p>

<sect>
Les fichiers, leur emplacement et les droits d'acc&egrave;s
<p>

Les diff&eacute;rences qui existent entre les nombreuses distributions font
que l'on ne  peut ici &ecirc;tre exhaustif.  Je  pense que beaucoup de gens
utilisent  maintenant  les distributions type   <tt/slackware/  et on  peut
raisonnablement s'appuyer sur cet exemple.

<p>

Pensez &agrave;  inclure <tt/lpd/ dans le  fichier rc.local apr&egrave;s le
d&eacute;marrage  &eacute;ventuel de  <tt>syslogd</tt>.  Voici les fichiers
tels que l'on peut les trouver:

<tscreen><verb>
     -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*
</verb></tscreen>

et pour chaque r&eacute;pertoire de spool:

<tscreen><verb>
     /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
</verb></tscreen>

Ces  trois   fichiers    sont  cr&eacute;&eacute;s  par     <tt>lpr</tt> et
<tt>lpd</tt>. Ils  peuvent  &ecirc;tre absents si vous   ne les avez encore
jamais lanc&eacute;s. Avec d'anciennes  versions il fallait ex&eacute;cuter
<tt/touch/ sur   ces fichiers ou    bien modifier  leurs  droits. Les  bugs
concernant ces  fichiers  ont maintenant  &eacute;t&eacute; corrig&eacute;s
dans les versions r&eacute;centes.

<p>

Il est   &agrave; noter  &eacute;galement   que  le  groupe  d'appartenance
&eacute;tait  <tt/daemon/  avec  d'anciennes  versions, et   est maintenant
<tt>lp</tt>.

<p>

Ne   soyez pas   surpris de trouver    des  choses l&eacute;g&egrave;rement
diff&eacute;rentes sur  votre syst&egrave;me. D'un autre c&ocirc;t&eacute;,
si quelque  chose ne fonctionne  pas, pensez &agrave; soup&ccedil;onner ces
droits avant   d'affoler nos bo&icirc;tes  aux lettres  (Si  vous saviez le
nombre de courriers &eacute;lectroniques re&ccedil;us  et dont la  solution
se trouve l&agrave; !).

<p>

On peut trouver le programme <tt/lpr/ avec ou sans  le bit setuid(root). En
fait ce  n'est  pas si   &eacute;vident que  cela.   Tout d&eacute;pend des
droits et permissions des r&eacute;pertoires de spool. Autant que je sache,
il  y a une totale  s&eacute;curit&eacute;  avec <tt/lpr/, m&ecirc;me si il
est setuid(root). Donc, &agrave; la limite,  positionnez le bit pour ne pas
vous soucier des droits d'acc&egrave;s au r&eacute;pertoire de spool.

<p>

Vous &ecirc;tes libre  de mettre les  binaires  dans les r&eacute;pertoires
que vous voulez, bien qu'ils se  trouvent couramment dans <tt>/usr/bin</tt>
ou <tt>/usr/sbin</tt>.   (<tt>lpc</tt>  et <tt>lpd</tt> peuvent  se trouver
par    exemple  dans  <tt>/etc</tt>).     Certaines  commandes &eacute;tant
int&eacute;ressantes  pour tout utilisateur, il  est bon de les laisser aux
endroits habituels.

<p>

Attention  toutefois, car les  gens qui con&ccedil;oivent les distributions
sont &eacute;galement  libres  de choisir.  Pensez  &agrave; supprimer  les
anciennes versions, si vous changez de distribution.

<p>

L'emplacement du fichier de verrouillage principal du d&eacute;mon <tt/lpd/
(<tt>lpd.lock</tt>), est fix&eacute;   en dur dans le  code.   Il se trouve
dans <tt>/var/spool/lpd/lpd.lock</tt>.  Donc, vous devrez pr&eacute;voir un
r&eacute;pertoire    <tt>/var/spool/lpd</tt>   m&ecirc;me    si       votre
r&eacute;pertoire  de  spool est   diff&eacute;rent.  Les binaires  anciens
mettaient ce fichier dans <tt>/var/spool/lpd.lock</tt>/

<p>

Typiquement, chez moi, on trouve

<tscreen><verb>
     /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
</verb></tscreen>

Etant  donn&eacute;  que l'on  jongle  en permanence entre <tt>/usr</tt> et
<tt>/var</tt>, il  est clair qu'un lien doit  exister entre les deux.  Soit
vous      d&eacute;finissez      vos         r&eacute;pertoires        dans
<tt>/usr/spool/</tt>... et  d&eacute;finissez  le lien   <tt>/var</tt> vers
<tt>/usr</tt>,  soit vous mettez  tout  sous  <tt>/var/spool/lpd</tt>... et
d&eacute;finissez le lien <tt>/usr/spool</tt> vers <tt>/var/spool</tt>.

<p>

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
stock&eacute;s  dans    la    partition  de  root,     <tt>/var</tt>  etant
cr&eacute;&eacute; sous <tt>/</tt>, dans l'autre, ce sera dans la partition
<tt>/usr</tt>, puisque <tt>/usr</tt>  est mont&eacute;.   Vous pouvez aussi
avoir un syst&egrave;me de fichiers <tt>/var</tt> r&eacute;serv&eacute;.

<p>

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

<p>

D&eacute;sormais,  le   r&eacute;pertoire       <tt>/etc</tt>   est      le
r&eacute;pertoire   o&ugrave;   sont    situ&eacute;s  les    fichiers   de
configuration.   Vous     pouvez  choisir de  les    mettre  ailleurs, mais
d&eacute;finissez  toujours un lien   symbolique de <tt>/etc</tt>  vers vos
fichiers.  Si votre syst&egrave;me comporte des  binaires qui vont toujours
chercher leur configuration  dans <tt>/usr/etc</tt>  ou <tt>/etc/inet</tt>,
ils  sont  s&ucirc;rement tr&egrave;s  anciens   et vous gagneriez &agrave;
mettre votre syst&egrave;me &agrave; jour.

<sect>
Ou trouver des filtres d'impression ?
<p>

Pas  mal  de filtres   sont  d&eacute;j&agrave;  r&eacute;dig&eacute;s   et
disponibles        sur   <it/Sunsite/            ou      <it/lip6/     dans
/pub/sunsite/linux/system/printing.

<sect1>
Les filtres magiques
<p>

<tscreen><verb>
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 <hpa@zytor.com>
Site-initial:   sunsite.unc.edu
                53000 /pub/Linux/system/printing/magicfilter-1.1b.tar.gz
licence-copie:  GPL
</verb></tscreen>

<sect1>
Les filtres APS
<p>

<tscreen><verb>
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
</verb></tscreen>

Les  filtres APS se   configurent dans l'entr&eacute;e  <it/if/ du  fichier
<tt>/etc/printcap</tt> et  convertissent la plupart  des  types de fichiers
connus   (texte,   <it/PostScript/,   dvi,   gif,    ...)     en  commandes
compr&eacute;hensibles par votre imprimante.

<sect1>
Les filtres EZ-magic
<p>

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

<sect>
Les logiciels d'impression
<p>

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

<sect1>
GhostScript
<p>

<it/GhostScript/ est un  logiciel majeur pour  l'impression  sous Linux. En
effet la plupart  des logiciels g&eacute;n&egrave;rent du  <it/PostScript/.
Ce  logiciel, gratuit,   est capable de   convertir  le  <it/PostScript/ en
langage compr&eacute;hensible par   votre   imprimante (si le    pilote est
disponible).  Il  joue   le r&ocirc;le de   filtre  afin que vous  puissiez
consid&eacute;rer votre   imprimante  comme   <it/PostScript/.   Ceci  vous
simplifie grandement la vie.

<p>

<it/GhostScript/ est disponible sous deux formes.  Une version commerciale,
appel&eacute;e  <it/Alladin GhostScript/, peut &ecirc;tre   utilis&eacute;e
librement pour  des  besoins   priv&eacute;s mais ne  doit  pas  &ecirc;tre
distribu&eacute;e par   les  distributions payantes  de   Linux.  Elle  est
g&eacute;n&eacute;ralement  en  avance  d'une ann&eacute;e sur   la version
gratuite.

<p>

La  version gratuite est  sous licence   GNU  et n'est rien  d'autre qu'une
version plus ancienne de <it/Alladin GhostScript/.

<sect2>
Utiliser GhostScript
<p>

<tt>gs</tt> est le nom de l'ex&eacute;cutable. <tt>gs -help</tt> vous donne
une aide rapide  sur  les  param&egrave;tres disponibles.  (La   liste  des
pilotes est la liste des pilotes compil&eacute;s avec  la version et non la
liste compl&egrave;te.)


<p>

Quoi que vous fassiez avec <tt>gs</tt>, il est conseill&eacute; d'invalider
l'acc&egrave;s   aux    fichiers   (par   <tt>-dSAFER</tt>).     En   effet
<it/PostScript/ est un langage pleinement op&eacute;rationnel et un fichier
<it/PostScript/ peu scrupuleux peut endommager vos  fichiers et vous donner
un terrible mal de cr&acirc;ne..

<p>

Exemple de ligne de commande pour un imprimante Stylus 800

<tscreen><verb>
gs -dNOPAUSE -sDEVICE=escp2 -sPAPERSIZE=a4 -sOutputFile=/dev/lp1 fichier.ps
</verb></tscreen>

<sect2>
R&eacute;glages
<p>

La  taille,   l'aspect et la    situation d'une image   sur  une  page sont
r&eacute;gl&eacute;s par le  pilote de  l'imprimante dans <it/GhostScript/.
Si  vous   trouvez   que vos  impressions   sont   tronqu&eacute;es  ou mal
cadr&eacute;es    il    faudra    soit  retoucher  le      code   du pilote
(d&eacute;conseill&eacute;),  soit modifier  les  fichiers de configuration
(<tt>gs_init.ps</tt>, <tt>gamma.ps</tt>)

<sect2>
Gamma, tailles de points, ...
<p>

Il  se  peut que vous trouviez  vos   impressions trop  sombres.  Ceci peut
arriver si votre imprimante n'a pas  une d&eacute;finition suffisante. Dans
ce cas vous devez  cr&eacute;er votre  propre  fonction de  transfert. Pour
ceci, cr&eacute;ez le fichier  <tt>gamma.ps</tt> dans le  r&eacute;pertoire
des librairies  de <it/GhostScript/ et  appelez le fichier  sur la ligne de
commande de gs avant le fichier &agrave; imprimer. Pour &eacute;claricir le
r&eacute;sultat, vous   devez   diminuer  les   valeurs   indiqu&eacute;es.
Notamment si votre pilote utilise l'algorithme de <it/Floyd-Steinberg/ pour
rast&eacute;riser  les couleurs, des  valeurs comprises  entre  0.15 et 0.2
sont mieux adapt&eacute;es.

<tscreen><verb>
     ---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<---
</verb></tscreen>

Vous  pouvez    aussi  modifier  les   dominantes   de  couleurs  (voir  le
r&eacute;pertoire <tt>/examples</tt> de  <it/GhostScript/  qui contient une
page de test des couleurs).

<sect>
L'impression &agrave; distance
<p>

Une des caract&eacute;ristiques de <tt/lpd/ est qu'il supporte l'impression
sur des  imprimantes  rattach&eacute;es &agrave;  d'autres  machines que la
v&ocirc;tre.   Avec, en  plus,  une combinaison  de filtres soign&eacute;e,
vous aurez     un syst&egrave;me   d'impression  transparent,    réparti et
performant.

<sect1>
Vers un h&ocirc;te Unix/lpd
<p>

Pour  que    des  machines  distantes    puissent utiliser     l'imprimante
attach&eacute;e &agrave;   votre machine, le   nom   de ces  machines  doit
&ecirc;tre  r&eacute;f&eacute;renc&eacute;      soit  dans    le    fichier
<tt>/etc/hosts.lpd</tt>, soit   dans le fichier  <tt>/etc/hosts.equiv</tt>.
Ce sont  des fichiers textes  normaux, dans lesquels on  indique un  nom de
machine par ligne.

<p>

Il  est  pr&eacute;f&eacute;rable  de  d&eacute;clarer les   machines  dans
<tt>/etc/hosts.lpd</tt>   qui est sp&eacute;cialement r&eacute;serv&eacute;
&agrave; l'impression,  le   fichier <tt>/etc/hosts.equiv</tt>  donnant des
droits plus &eacute;tendus.

<p>

Vous  pouvez restreindre les droits  d'acc&egrave;s distants  par groupe ou
par utilisateur.   Les    groupes  autoris&eacute;s sont    indiqu&eacute;s
gr&acirc;ce     au       param&egrave;tre   <tt>:rg=:</tt>     du   fichier
<tt>printcap</tt>: <tt>rg=admin</tt> restreint     l'utilisation        aux
utilisateurs  du groupe   <tt/admin/.  Le   param&egrave;tre bool&eacute;en
<tt>:rs=:</tt>  du  m&ecirc;me    fichier   restreint   l'acc&egrave;s  aux
utilisateurs ayant un compte sur votre machine.

<sect2>
Avec lpd
<p>

Pour  imprimer vers  une  autre   machine,  vous  devez  cr&eacute;er   une
entr&eacute;e <tt/printcap/ telle que:

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

Vous noterez qu'il doit  bien exister un  r&eacute;pertoire de spool  local
g&eacute;r&eacute;  par votre <tt/lpd/  local. Les fichiers soumis y seront
copi&eacute;s puis envoy&eacute;s vers la machine distante.

<sect2>
Avec rlpr
<p>

Vous pouvez utiliser  <tt/rlpr/  pour soumettre une  impression directement
&agrave; la machine distante sans passer par un d&eacute;mon local et toute
sa configuration.  C'est particuli&egrave;rement int&eacute;ressant lorsque
vous imprimer rarement et vers diff&eacute;rentes imprimantes.

<p>

<tt>rlpr</tt> s'appuie sur TCP/IP.  Il n'est pas n&eacute;cessaires que les
imprimantes soient connues   explicitement.  N'ayant pas besoin de  fichier
printcap, il est plus facile &agrave; g&eacute;rer.  Il est compatible avec
<tt/lpr/.

<sect1>
Imprimer vers  une  imprimante  attach&eacute;e &agrave;   Windows  95, NT,
LanManager ou Samba.
<p>

Il  existe un   mini-document  (<tt>Printing  to  Windows  HOWTO</tt>)  qui
d&eacute;crit ceci tr&egrave;s bien.

<p>

Il est possible de rediriger une file <tt/lpd/ vers un service d'impression
SMB      gr&acirc;ce          au          programme          <tt/smbclient/
(<tt>http://www.picante.com/~gtaylor/pht/man/smbclient.html</tt>).    Samba
contient un script (<tt>smbprint</tt>) qui fait cela.  Vous devez mettre un
fichier  de   configuration   pour  l'imprimante   en  question   dans   le
r&eacute;pertoire de spool  et d&eacute;crire le programme <tt/smbprint/ en
tant que filtre dans <tt>/etc/printcap</tt>:

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

Vous   pouvez &eacute;galement utiliser    le programme <tt/smbclient/ pour
soumettre un fichier directement &agrave; un  service d'impression SMB sans
impliquer <tt>lpd</tt>.  Lisez la documentation de tous ces programmes pour
plus d'information.

<sect1>
Vers une imprimante NetWare
<p>

La suite     logicielle <tt/ncpfs/  contient    un utilitaire appel&eacute;
<tt/nprint/ qui fournit les m&ecirc;mes fonctionnalit&eacute;s que smbprint
pour    NetWare.            Vous        pouvez       l'obtenir          sur
<tt>ftp://sunsite.unc.edu/pub/Linux/system/filesystems/ncpfs/</tt>.    Avec
<tt>ncpfs</tt> vous pouvez  monter  des volumes   du serveur NetWare   sous
Linux.   Vous  pouvez &eacute;galement  soumettre  des travaux d'impression
vers  NetWare ou mettre  des  travaux d'impression  de  NetWare en file sur
votre syst&egrave;me Linux.    Vous devez disposer   d'un  noyaux 1.2.x  ou
1.3.54   et ult&eacute;rieur.   <tt>ncpfs</tt> <bf/NE/ fonctionne  <bf/PAS/
avec un noyau 1.3.x (x &lt; 54).

<p>

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

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

le script <tt>nprint-script</tt> ressemble &agrave; quelque chose comme :

<tscreen><verb>
     #! /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 -
</verb></tscreen>

<sect1>
Vers une imprimante EtherTalk
<p>

Le     paquetage  logiciel <tt/netatalk/    contient l'&eacute;quivalent de
<tt/nprint/   et    <tt/smbclient/.       R&eacute;f&eacute;rez-vous     au
<tt>Netatalk-HOWTO</tt>  dans   lequel      est  bien   d&eacute;crite   la
proc&eacute;dure d'impression vers et depuis un r&eacute;seau <it/Apple/.

<sect1>
Vers une imprimante HP ou autre imprimante Ethernet
<p>

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
g&eacute;n&eacute;ral,  ces imprimantes  font ``tourner''  un  <tt/lpd/  et
fournissent une ou  plusieurs files vers  lesquelles vous  pouvez imprimer.
Une imprimante  HP, par exemple, pourra  fonctionner avec une entr&eacute;e
<tt/printcap/ telle que:

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

Les    imprimantes LaserJet   HP avec  une   interface   JetDirect  ont  en
g&eacute;n&eacute;ral deux files  incorpor&eacute;es; l'une ``raw'' accepte
le PCL (et peut-&ecirc;tre le PostScript), l'autre ``text'' accepte l'ascii
pur   (et    s'arrange     pour  r&eacute;soudre    d'elle-m&ecirc;me   les
probl&egrave;mes d'effets d'escalier).

<p>

Dans un environnement dans  lequel plusieurs imprimantes ne  supportent pas
le  <it/PostScript/,  il  peut &ecirc;tre   bon  de configurer  un  serveur
d'impression d&eacute;di&eacute; vers lequel  toutes les machines enverront
leurs travaux et sur lequel GhostScript tournera.

<sect1>
Vers d'anciennes HP
<p>

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

<tscreen><verb>
     #!/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&amp;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;
     }
</verb></tscreen>

<sect1>
Les filtres d'entr&eacute;e pour des imprimantes distantes
<p>

Une des  bizarreries  de   <tt/lpd/  est  que le   filtre   d'entr&eacute;e
(<tt>if</tt>)   n'est pas    ex&eacute;cut&eacute;   pour des   imprimantes
distantes. Si vous  devez absolument passer par un  filtre,  il vous faudra
utiliser   deux  files,   la    premi&egrave;re    redirigeant  vers     la
deuxi&egrave;me. Par exemple :

<tscreen><verb>
     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:
</verb></tscreen>

et le filtre <tt>filter-lj-5</tt> (exemple): 

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

L'option <tt>-U</tt> ne fonctionne que si  <tt>lpr</tt> est lanc&eacute; en
tant  que  d&eacute;mon.    Elle   positionne  correctement   le   nom   du
soumissionnaire du  travail   dans  la deuxi&egrave;me  queue.    Il serait
d'ailleurs mieux  d'utiliser   une  m&eacute;thode  plus  s&ucirc;re   pour
r&eacute;cup&eacute;rer ce  nom car  ce  n'est pas toujours  le 5&egrave;me
param&egrave;tre.

<sect1>
Imprimer depuis Windows
<p>

L'impression depuis un client Windows vers un  serveur Unix est directement
support&eacute;  par <tt>SMB</tt> en  utilisant le paquetage <tt>SAMBA</tt>
(qui supporte &eacute;galement le partage  de fichiers du syst&egrave;me de
fichiers Linux vers les clients Windows).

<p>

Samba est fourni avec une documentation  compl&egrave;te.  Vous pouvez soit
installer un  filtre magique sur Linux et  imprimer du <it/PostScript/ soit
installer un pilote     d'imprimante  sp&eacute;cifique sous    Windows  et
d&eacute;crire une  file sans   filtre.    En s'appuyant sur   les  pilotes
Windows, vous pourrez obtenir de meilleurs  r&eacute;sultats, mais c'est un
peu plus compliqué  &agrave; administrer si   vous avez plusieurs  stations
sous Windows.  Donc essayez d'abord la premi&egrave;re solution.

<sect1>
Depuis Netware
<p>

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

<sect1>
Depuis un Apple
<p>

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


<sect1>
Imprimer vers un fax
<p>

<sect2>
Utiliser un modem/fax
<p>

Si    vous disposez   d'un   modem/fax,  vous    pouvez  configurer   votre
syst&egrave;me   pour    envoyer  ou  recevoir    des    fax   aux  formats
<it/PostScript/, dvi, ascii, etc...  Vous pourrez m&ecirc;me faire en sorte
que votre courrier &eacute;lectronique soit fax&eacute;!

<p>

Les  modems/Fax supportent les commandes  de classe 1  ou 2.  Les modems de
classe  1 ont un  sous-ensemble  de fonctionnalit&eacute;s d'un fax  disons
traditionnel (donc, le logiciel doit faire le reste...  et le co&ucirc;t de
traitement est parfois critique!)

<p>

La classe 1  correspond   au standard  EIA  578.  Les  modems de  classe  2
r&eacute;pondent  au sandard EIA  592. Vous trouverez dans la documentation
de votre  modem &agrave;  quelle  classe  il appartient. Ne  confondez  pas
classe et groupe. Le  groupe est g&eacute;n&eacute;ralement le groupe  III.


<p>

Les logiciels de  fax  tournant sous  Linux  doivent savoir  convertir  les
donn&eacute;es re&ccedil;ues  en  un format  compatible  avec le groupe III
pour la  transmission.  Comme d'habitude <it/Ghostscript/   sait faire ! Le
pilote <tt/tiffg3/ g&eacute;n&egrave;re des  messages fax encod&eacute;s au
format <tt>g3/tiff</tt>. Vous devrez  compiler et int&eacute;grer le pilote
si ce n'est d&eacute;j&agrave; fait.

<p>

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

<tscreen><verb>
     ftp.sgi.com:/sgi/fax/?????.src.tar.Z
</verb></tscreen>

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

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

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

Enfin, <tt/efax/ m&eacute;rite   d'&ecirc;tre mentionn&eacute;.   C'est  un
excellent choix pour Linux. Il supporte les classes 1 et 2.

<tscreen><verb>
     sunsite.unc.edu:/pub/Linux/apps/serialcomm/fax/efax08a.tar.gz
</verb></tscreen>

(R&eacute;pertoire    dans     lequel    on      trouvera  &eacute;galement
<tt>vfax10.tar.z</tt>,                             <tt>qfax1.3.tar.gz</tt>,
<tt>xfax.v1.07s.tar.gz</tt>)

<sect2>
Utiliser le service d'impression distant
<p>

C'est un service exp&eacute;rimental vous  permettant d'envoyer un courrier
&eacute;lectronique que  vous souhaitez imprimer sur un  fax  distant.  Des
formats tels que PostScript  sont support&eacute;s. Bien que  la couverture
g&eacute;ographique   de  ce  service  soit   tr&egrave;s  faible,  il  est
tr&egrave;s    prometteur.     Pour             plus         d'information,
r&eacute;f&eacute;rez-vous  au  site  Web   ``Remote Printing    WWW Site''
(<tt>http://www.tpc.int/</tt>).

<p>

<sect>
Les logiciels qui permettent de r&eacute;aliser de belles impressions
<p>

Linux sait faire tourner un grand nombre de  binaires avec plus ou moins de
r&eacute;ussite:  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'&eacute;mulation  iBCS.  La suite
Corel Office en Java est &eacute;galement prometteuse...)

<p>

En ce qui concerne Linux, les choix  sont limit&eacute;s aux logiciels Unix
classiques:

<sect1>
Les langages &agrave; balises
<p>

La plupart des langages balis&eacute;s sont bien adapt&eacute;s aux projets
cons&eacute;quents ou r&eacute;p&eacute;titifs pour lesquels vous souhaitez
que l'ordinateur  contr&ocirc;le la mise  en forme  pour un r&eacute;sultat
homog&egrave;ne. Vouloir ajouter un bel effet  dans un tel langage choquera
certainement.

<sect2>
nroff
<p>

C'est l'un des plus anciens langages balis&eacute;s sous Unix. Les pages de
manuel en ligne sont l'exemple le  plus connu de pages formatt&eacute;es en
macros  nroff; beaucoup de gens ne  jurent que par  lui...  mais sa syntaxe
est quand m&ecirc;me plus compliqu&eacute;e que n&eacute;cessaire; ce n'est
certainement  pas   le bon    choix  pour les   nouveaux projets.    Il est
int&eacute;ressant de savoir que  vous pouvez imprimer  une page  de manuel
directement en   PostScript avec <tt/groff/.   La syntaxe  est la suivante:
<tt>man -t truc | lpr</tt>. Le r&eacute;sultat en vaut vraiment la peine.

<sect2>
TeX
<p>

TeX (et le paquetage de macros LaTeX) est  l'un des langages balis&eacute;s
le   plus r&eacute;pandu sous Unix.  Les   travaux  techniques sont souvent
r&eacute;dig&eacute;s en LaTeX parce qu'il  simplifie grandement la mise en
page et il est  l'un des rares  logiciels &agrave; traiter correctement  et
puissamment les  fomules math&eacute;matiques. Le format  de  sortie de TeX
est  dvi, et  peut  &ecirc;tre  converti  en  <it/PostScript/ ou  PCL  (HP)
&agrave; l'aide du programme <tt/dvips/ ou <tt/dvilj/.

<sect2>
SGML
<p>

Il y a au moins un interpr&eacute;teur de SGML gratuit  sous Unix et Linux;
il est    la base  du syst&egrave;me    de documentation LinuxDoc-SGML.  Il
supporte bien entendu d'autres types de documents.

<sect2>
HTML
<p>

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

<sect1>
Traitements de textes WYSIWYG
<p>

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: <it/StarOffice/.

<sect2>
StarOffice
<p>

Une  compagnie allemande  distribue  <tt/StarOffice/ pour  Linux.   On peut
trouver une version libre de droits  sur les serveurs ftp classiques. Cette
version  est   limit&eacute;e  &agrave;  un   usage personnel.  Cette suite
logicielle est   tr&egrave;s compl&egrave;te; vous  trouverez  tout ce dont
vous r&ecirc;viez.   Il  existe d'ailleurs un  mini-HOWTO  d&eacute;crivant
o&ugrave;  la trouver et  comment l'lnstaller.  La  plupart des imprimantes
sont reconnues.

<sect2>
LyX
<p>

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

<sect2>
L'interface utilisateur 'Andrew'
<p>

Cette  interface comprend un  &eacute;diteur WYSIWYG  appel&eacute; <tt/ez/
comportant la plupart des fonctionnalit&eacute;s de base d'un traitement de
texte: HTML,  et MIME pour courrier et  forums de discussions  (niouzes, si
vous pr&eacute;f&eacute;rez).

<sect2>
Offres commerciales
<p>

Caldera  et  Red  Hat vendent    des paquetages  logiciels   comprenant les
applications  principales,  &agrave; savoir un  traitement  de  texte et un
tableur.  Caldera  vend  &eacute;galement (&agrave; v&eacute;rifier)  WABI,
l'&eacute;mulation   Windows  de  Sun qui   permet   de faire   tourner les
applications de Microsoft bien connues.  <p>

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

<p>

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

<sect>
Logiciels de pr&eacute;-visualisation
<p>

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

<sect1>
PostScript
<p>

GhostScript   poss&egrave;de  un  pilote X11 utilis&eacute;   par Ghostview
(<tt>http://www.picante.com/~gtaylor/pht/man/ghostview.html</tt>).       La
derni&egrave;re version de ce  logiciel devrait  permettre &eacute;galement
la visualisation de fichiers au format PDF.

<sect1>
TeX dvi
<p>

les fichiers TeX    dvi    (DeVice Independent  -   ind&eacute;pendant   du
p&eacute;riph&eacute;rique) peuvent  &ecirc;tre visualis&eacute;s sous  X11
&agrave;               l'aide                   de                <tt/xdvi/
(<tt>http://www.picante.com/~gtaylor/pht/man/xdvi.html</tt>).  Les versions
r&eacute;centes de <tt/xdvi/ appellent  <tt/ghostscript/  pour le rendu  de
sp&eacute;cificit&eacute;s <it/PostScript/.

<p>

Un pilote VT100  (<tt>dgvt</tt>)  existe &eacute;galement.  <tt>Tmview</tt>
fonctionne sous Linux avec <tt>svgalib</tt>, si cela vous suffit.

<sect1>
Adobe PDF
<p>

<it/Acrobat  Reader/ d'Adobe  est  disponible pour Linux.   Vous  pouvez le
charger depuis <tt>http://www.adobe.com</tt>.  Vous pouvez &eacute;galement
utiliser  <tt>xpdf</tt>, un logiciel   gratuit  fournit avec  les  sources.
<it/GhostScript/, devrait, comme je l'ai dit plus haut, supporter le format
pdf.

<sect>
Les imprimantes s&eacute;rie
<p>

Le d&eacute;mon <tt/lpd/ fournit cinq attributs que vous pouvez positionner
dans <tt>/etc/printcap</tt> afin  de  contr&ocirc;ler le  port s&eacute;rie
sur lequel se trouve votre imprimante.

<tscreen><verb>
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
</verb></tscreen>

Pour  d&eacute;finir   la      vitesse   du     port,  la    syntaxe    est
&eacute;vidente. Exemple: br \#9600.

<p>

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

<p>

Faites bien attention aux bits  que vous s&eacute;lectionnez.  Mais au fait
que sont-ils  ?  Souvenez-vous..., la  commande <tt/stty/.  Elle indique de
nombreux   param&egrave;tres  caract&eacute;risant  un   tty.   La commande
<tt>stty  -a</tt> affiche en clair  les  param&egrave;tres du tty, certains
d'entre-eux &eacute;tant    pr&eacute;c&eacute;d&eacute;s d'un tiret  s'ils
sont invalid&eacute;s et sans tiret s'ils sont valid&eacute;s.  La commande
<tt/stty/ peut  &ecirc;tre   appliqu&eacute;s au port   s&eacute;rie  (voir
exemple).   Ce sont certains de   ces param&egrave;tres (des drapeaux,  des
flags, donc des bits) que l'on va manipuler.

<tscreen><verb>
     # 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
</verb></tscreen>

Note:   utilisez toujours  <tt/stty/   de cette  fa&ccedil;on  (<tt>stty  <
/dev/ttyS?</tt>); cette command utilise en effet l'entr&eacute;e standard).

<p>

Vous pouvez utiliser cette commande pour configurer le port de fa&ccedil;on
&agrave;    obtenir une     impression   correcte.      Par  exemple,   les
diff&eacute;rences  que  l'on  peut   noter  entre le  stty   ci-dessus  et
l'initialisation du port  au  d&eacute;marrage de ma  machine r&eacute;side
dans  les  informations  <tt>-clocal</tt>, <tt>-crtscts</tt> et  <tt/ixon/.
(La   configuration de votre   port  pourra   tr&egrave;s  bien  &ecirc;tre
diff&eacute;rente selon la mani&egrave;re dont votre imprimante g&egrave;re
le contr&ocirc;le de flux).

<p>

Votre  port &eacute;tant bien configur&eacute;, faites  : <tt>cat fichier >
/dev/ttyS?</tt> (? est  le num&eacute;ro de  votre  port) pour  imprimer un
fichier.

<p>

Imprimez            par            exemple               le         fichier
<tt>/usr/src/linux/include/asm-i386/termbits.h</tt>.        Vous          y
d&eacute;couvrirez  un  tas   de d&eacute;finitions  de   constantes et  de
structures.   Nous allons  voir  quelles  valeurs d&eacute;finies  dans  ce
fichier vont nous servir pour configurer le port,  non plus avec stty, mais
avec les param&egrave;tres <tt/fc/,  <tt/xc/, <tt/fs/ et <tt/xs/ du fichier
printcap. Regardez la section commen&ccedil;ant par :

<tscreen><verb>
     /* c_cflag bit meaning */
     #define CBAUD   0010017
</verb></tscreen>

Elle d&eacute;crit justement les bits manipulables &agrave; 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 int&eacute;ressent particuli&egrave;rement :
ce   sont  les m&ecirc;mes     param&egrave;tres   que dans   la   commande
<tt/stty/.  Je sens que  vous voyez o&ugrave;  on veut en venir.  <tt/stty/
n'est qu'un interface  n&eacute;cessaire au positionnement (ou  effacement)
de bits.

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

Ensuite  occupez-vous des bits  &agrave; positionner. Par exemple s'il faut
positionner  les  bits  <tt/cs8/,  <tt/hupcl/ et   <tt/cread/, regardez les
constantes   <tt/CS8/    (0000060),  <tt/HUPCL/  (0002000)   et  <tt/CREAD/
(0000200).  Pensez  &agrave;  la  vitesse de  modulation qu'il  faut  aussi
d&eacute;finir, dans mon cas,  ce sera <tt/B9600/  (0000015). Tous ces bits
ensemble  font `0002275'.    Indiquez  cette   valeur  au  param&egrave;tre
<tt/fs/.  <p>

Effectuez  les   m&ecirc;me  r&eacute;glages    avec  la  section  suivante
intitul&eacute;e

<tscreen><verb>
     /* c_lflag bits */
</verb></tscreen>

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

<p>

Souvenez-vous  de toujours commencer par  les  bits que vous souhaitez voir
&agrave;  0  (<tt/fc/   et  <tt/xc/), puis   de   d&eacute;finir  seulement
apr&egrave;s des bits &agrave; positionner (<tt/fs/ et <tt/xs/).

La  commande <tt/cat/   fonctionne  pour  le port  s&eacute;rie,  mais  pas
<tt/lpd/

La mise en place de <tt/lpd/ n'est  pas trait&eacute;e ici, mais sachez que
si  vous   avez  des   probl&egrave;mes avec   la   configuration  du  port
s&eacute;rie,  vous  pouvez emp&ecirc;cher  <tt/lpd/  de  le  configurer en
consid&eacute;rant  votre  imprimante comme ne  pr&eacute;sentant  pas  une
interface  normale. Lisez &eacute;galement   &agrave; ce propos le chapitre
suivant.

Donnez  &agrave;    votre     imprimante   le    p&eacute;riph&eacute;rique
<tt>/dev/null1</tt>   (<tt>mknod /dev/null1  c  1   3</tt>). N'utilisez pas
<tt>/dev/null</tt>, pour    ne pas qu'il    soit ouvert  de  mani&egrave;re
exclusive. Enlevez  les param&egrave;tres  de vitesse et  de positionnement
des bits du fichier <tt/printcap/.

Cr&eacute;ez un shell-script comme ci-dessous :

<tscreen><verb>
         #!/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
</verb></tscreen>

...ou si vous n'avez pas de param&egrave;tre `if' configur&eacute;... 

<tscreen><verb>
         #!/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
</verb></tscreen>

Donnez-lui    les  droits   de    lecture/&eacute;criture   pour  tout   le
monde. Essayez-le: <tt>/usr/lib/lpd/if &lt;FICHIER</tt>.

<p>

D&eacute;finissez  un  filtre    d'entr&eacute;e   dans   votre     fichier
<tt/printcap/ pour appeler ce script. <tt>:if=/usr/lib/lpd/if:</tt>.

<p>

Utilisez     la  commande     <tt/stty/     pour     configurer  le    port
correctement.  Essayez d'imprimer.  Vous  devriez pouvoir d&eacute;terminer
si le(s) fichier(s) sont bien mis dans le r&eacute;pertoire de spool.  Cela
devrait imprimer, si votre essai manuel du script pr&eacute;c&eacute;dent a
fonctionn&eacute;.   Bien entendu, le mieux  serait de pouvoir se passer du
script d'entr&eacute;e et donc du param&egrave;tre <tt/if/.  <p>

Supposons   donc   que    la  m&eacute;thode  pr&eacute;c&eacute;dente    a
fonctionn&eacute;, et que vous  pensez avoir  correctement configur&eacute;
votre   fichier   printcap.  Ex&eacute;cutez   la    commande <tt>stty   -a
&lt;/dev/ttyS?</tt>.  Si certains param&egrave;tres  ne  sont pas corrects,
v&eacute;rifiez   les constantes du    fichier <tt>termbits.h</tt>.  Si  la
configuration   est   incorrecte,  malgr&eacute;  tous    vos  efforts   de
v&eacute;rification,  n'h&eacute;sitez    pas   &agrave;     installer   un
d&eacute;mon r&eacute;cent.

<sect1>
Imprimantes anciennes et caract&egrave;res perdus
<p>

Certaines  anciennes  imprimantes  s&eacute;ries  ont  des  petits  tampons
m&eacute;moire et g&egrave;rent  mal le contr&ocirc;le  de flux.  Supprimer
le FIFO du  port s&eacute;rie  (16550)  avec <tt/setserial/  (faites croire
&agrave; setserial que c'est un port 8250 et &ccedil;a marchera).

<sect>
Compl&eacute;ments et r&eacute;glages
<p>

Si votre    imprimante est <it/PostScript/, elle   peut  ne  pas &ecirc;tre
capable de traiter du texte pur.  Si tel est le cas,  vous devrez mettre en
place un filtre pour transformer  le texte en <it/PostScript/. Un excellent
freeware  (logiciel libre de tout   droit de distribution et d'utilisation)
appel&eacute; <tt/nenscript/ r&eacute;alise cela tr&egrave;s bien.  Si vous
ne mettez pas en place un tel filtre,  vous devez vous assurer par d'autres
moyens que l'imprimante ne re&ccedil;oit bien que du <it/PostScript/.

<p>

Vous  pouvez &eacute;galement d&eacute;finir  dans   vos fichiers de  login
(<tt>.profile</tt>, par  exemple) ou celui  par d&eacute;faut, une variable
d'environnement    <tt/PRINTER/ d&eacute;finissant l'imprimante    &agrave;
utiliser. Exemple:

<tscreen><verb>
     export PRINTER=lpr0
</verb></tscreen>

Ceci  &eacute;vite  d'avoir &agrave;       sp&eacute;cifier <tt>-Plpr0</tt>
&agrave; chaque fois.

<p>

Il est  possible de  ``r&eacute;utiliser''  une entr&eacute;e printcap.  Si
vous   d&eacute;clarez  votre propre    machine  comme machine   h&ocirc;te
distante, et une autre  imprimante  comme imprimante distante,  vous pouvez
rediriger les  donn&eacute;es   &agrave; imprimer de   l'une  vers l'autre.
Souvenez-vous que  si vous  utilisez  cette technique,  les  donn&eacute;es
passeront   par  chaque   filtre  de  la  cha&icirc;ne   et   seront  mises
successivement dans chaque spool.

<p>

Bien que vous puissiez sp&eacute;cifier  pour une imprimante autant d'alias
que vous le souhaitez,  il semble  que  pour la meilleure  utilisation, les
deux premiers doivent &ecirc;tre identiques et  doivent correspondre au nom
r&eacute;el.   Certains    programmes    n'utiliseront    que    ces   deux
entr&eacute;es. La commande lpc indiquera seulement le premier alias, alors
que les  commandes <tt/lpr/,  <tt/lprm/  et <tt/lpq/  comprennent  tous les
alias.

<p>

Plut&ocirc;t  que de sp&eacute;cifier  une  taille maximum de fichier  pour
l'impression, vous pr&eacute;fereriez sans doute  que les fichiers du spool
ne puissent remplir votre disque, m&ecirc;me temporairement. Pour ce faire,
cr&eacute;ez   un     fichier   appel&eacute;   <tt/minfree/   dans  chaque
r&eacute;pertoire de spool,  contenant, sous forme  d'un nombre de blocs (1
Ko pour  Linux), la quantit&eacute;  minimum  d'espace disque devant rester
pour que  les donn&eacute;es puissent  &ecirc;tre  accept&eacute;es dans le
spool.   Vous    cr&eacute;erez  un      fichier  r&eacute;el   dans     le
r&eacute;pertoire    principal     de      spool   et,       dans    chaque
sous-r&eacute;pertoire, un lien symbolique vers ce fichier.

<sect>
R&eacute;sum&eacute;
<p>

Voici un guide  de  configuration &eacute;tape  par &eacute;tape  pour  une
imprimante    nomm&eacute;e <tt>/dev/lp0</tt>. Vous pouvez l'&eacute;tendre
&agrave; votre guise.  Pour faire ce qui suit,  vous devez &ecirc;tre root.
(NDT:  L'auteur a tout  install&eacute; dans <tt>/usr/spool/lpd</tt>.  J'ai
pr&eacute;f&eacute;r&eacute;     modifier   l&eacute;g&egrave;rement  cette
configuration    en d&eacute;finissant <tt>/usr/spool/lp/lpr0</tt>       et
<tt>/usr/spool/lpd</tt>, comme dans la plupart des distributions)

<itemize>

<item>

V&eacute;rifiez les droits   d'acc&egrave;s et l'emplacement   de <tt/lpr/,
<tt/lprm/, <tt/lpq/,  <tt/lpc/ et <tt/lpd/.   Voir &agrave; ce  propos: Les
programmes importants.

<item>

Cr&eacute;ez le    r&eacute;pertoire  de   spool  pour  votre   imprimante,
appel&eacute;e dans notre exemple <tt/lpr0/:

<tscreen><verb>
         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
</verb></tscreen>

<item>

Cr&eacute;ez un r&eacute;pertoire permettant au d&eacute;mon d'y mettre son
propre fichier de verrouillage <tt>lpd.lock</tt>:

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

<item>

Dans   les      r&eacute;pertoires        <tt>/usr/spool/lp/lpr0</tt>    et
<tt>/usr/spool/lpd</tt>,  cr&eacute;ez les fichier n&eacute;cessaires, avec
les bons droits (Cette  manipulation  n'est pas n&eacute;cessaire avec  les
versions r&eacute;centes du gestionnaire d'impression):

<tscreen><verb>
         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
</verb></tscreen>

<item>

Cr&eacute;ez   le         shell-script   <tt>filtre_entree</tt>    dans  le
r&eacute;pertoire     <tt>/usr/spool/lp/lpr0</tt>.  Utilisez le      filtre
d&eacute;crit pr&eacute;c&eacute;demment. Donnez-lui les bons droits.

<tscreen><verb>
         cd /usr/spool/lp/lpr0
         chmod ug=rwx,o=rx filtre_entree
</verb></tscreen>

<item>

Cr&eacute;ez le fichier  <tt>/etc/printcap</tt>, s'il n'existe pas. Enlevez
les entr&eacute;es  qu'il  contient et ajoutez   une entr&eacute;e de  test
d&eacute;crite  pr&eacute;c&eacute;demment.  Donnez-lui       les    droits
<tt>-rw-r--r--</tt>.

<item>

Editez le fichier <tt>/etc/rc.d/rc.local</tt> ou <tt>rc.multi</tt>. Ajoutez
la ligne  <tt>/usr/sbin/lpd</tt>    &agrave;  la  fin.   Cela lancera    le
d&eacute;mon au boot.  Vous pouvez aussi le lancer &agrave; la main :

<tscreen><verb>
root# /usr/sbin/lpd
</verb></tscreen>

<item>

Effectuez un test d'impression :

<tscreen><verb>
         ls -l | lpr -Plpr0
</verb></tscreen>

<item>

Regardez dans   <tt>/tmp</tt>  et v&eacute;rifiez  la  pr&eacute;sence   du
fichier     <tt>testlp.out</tt>. Il   devrait   contenir    le  listing  du
r&eacute;pertoire dans lequel vous &eacute;tiez.

<item>

Editez <tt>/etc/printcap</tt>.   Dupliquez l'entr&eacute;e <tt/lpr0/.  Vous
avez   alors     2 entr&eacute;es identiques.       Dans la premi&egrave;re
entr&eacute;e,   changez, sur   la premi&egrave;re   ligne  uniquement, les
occurrences de <tt/lpr0/  par <tt/testlp/.  Dans la  seconde entr&eacute;e,
changez <tt>/dev/null</tt>   par le p&eacute;riph&eacute;rique r&eacute;el,
par  exemple <tt>/dev/lp0</tt>. Dans  la  seconde entr&eacute;e, enlevez le
champ <tt/if/ compl&egrave;tement.

<item>

Rebootez le syst&egrave;me   ou    tuez le d&eacute;mon  d'impression    et
relancez-le,   afin      qu'il  reprenne     en    compte   le      fichier
<tt>/etc/printcap</tt> modifi&eacute;.

<item>

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

<tscreen><verb>
         ls -l | lpr -Plpr0
</verb></tscreen>
</itemize>

<sect>
Probl&egrave;mes avec la LaserJet 5M
<p>

<sect1>
PostScript
<p>

Cette  imprimante   peut    poser des  probl&egrave;mes   d'impression   en
<tt/PostScript/.  Si  vous constatez,  apr&egrave;s avoir imprim&eacute; un
document <tt/PostScript/, qu'elle ne  sort  plus les documents  suivants et
qu'elle affiche  ``DATA RECEIVED'' en  permanence, suivez  les conseils qui
suivent.  Merci &agrave; &lt;Patrick.Begou@hmg.inpg.fr&gt;.

<itemize>

<item>

l'imprimante est en  configuration  d'usine avec  le flag  d'impression des
erreurs postscript valid&eacute;.

<item>
Le fichier <tt/printcap/ est tr&egrave;s simple:

<tscreen><verb>
# /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:
</verb></tscreen>

<item>

Le  filtre utilis&eacute; (<tt/filter_court/)  est donn&eacute; ci-dessous.
Il n'accepte que les fichiers <it/ascii/, <it/PostScript/ et <it/PostScript
compress&eacute;/.  Ce  qui est  int&eacute;ressant,  ce sont  les  chaines
d'initialisation en PCL.  En gros:

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

Avec <tt/echo -ne/, Esc c'est  <tt/033/ en octal (<tt/27/ en d&eacute;cimal
)

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

#
# On repond Ok, tout s'est bien passe.
#
rm ${FILE}
exit 0
</verb></tscreen>

</itemize>

<sect1>
Recto-verso
<p>

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'ins&eacute;rer apr&egrave;s la premi&egrave;re ligne...

<tscreen><verb>
%!Ado...
</verb></tscreen>

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

<tscreen>
%%BeginFeature: *Duplex DuplexNoTumble
    &lt;&lt;Duplex true /Tumble false>> setpagedevice
%%EndFeature
</tscreen>

ou, pour valider le recto seul:

<tscreen>
%%BeginFeature: *Duplex None
    &lt;&lt;Duplex false>> setpagedevice
%%EndFeature
</tscreen>

<sect>
Informations concernant ce document
<p>

Sauf changements, les documents HOWTO sont plac&eacute;s sous copyright par
leurs auteurs respectifs.  Les  documents  Linux HOWTO peuvent   &ecirc;tre
reproduits  et distribu&eacute;s   en  tout ou  partie,  par  quelque moyen
physique  que ce soit, sans  l'autorisation de l'auteur. Les traductions et
travaux  d&eacute;riv&eacute;s    sont   &eacute;galement     permis   sans
autorisation expresse.   La  distribution  &agrave;  titre  commercial  est
permise  et  m&ecirc;me encourag&eacute;e; cependant, l'auteur souhaiterait
en &ecirc;tre averti.

<p>

En bref, nous souhaitons que l'information contenue  dans ces document soit
r&eacute;pandue  le  plus largement   possible.  Cependant, nous souhaitons
maintenir le copyright sur ce document, et souhaiterions &ecirc;tre avertis
de toute re-distribution.  Si vous  avez des questions &agrave; ce  propos,
contactez Greg  Hankins, le nouveau coordinateur  des documents Linux HOWTO
&agrave; l'adresse &lt;gregh@cc.gatech.edu&gt;.     Son repr&eacute;sentant
fran&ccedil;ais est Eric Dumas &lt;dumas@freenix.fr,dumas@Linux.EU.Org&gt;.

</article>
