Printing-HOWTO
Grant Taylor <
[email protected]>, traduction Jean-
Michel VANSTEENE <
[email protected]>,
<
[email protected]>
12 Novembre 1997
11.. IInnttrroodduuccttiioonn
Le Printing-HOWTO devrait contenir tout ce dont vous avez besoin
pour mettre en place les services d'impression sur votre
systeme Linux. Comme vous vous en doutez peut-etre, ceci est un
tantinet plus complique que le ``simple'' _c_l_i_c du monde _M_i_c_r_o_s_o_f_t
et _A_p_p_l_e, mais en contre-partie, c'est beaucoup plus souple
et certainement plus facile a administrer pour les
grands reseaux.
Ce document est organise de facon a ce que la lecture de la premiere
moitie suffise a la mise en place d'un systeme qui ``tourne''.
Les choses plus obscures voire particulieres sont concentrees
dans la deuxieme moitie. Vous pouvez vous referer a la table des
matiere pour les details.
Depuis la version 3.x, ce document a ete completement reecrit et
un certain nombre d'informations ont ete retirees. La
principale raison est que l'ancien document faisait une soixantaine
de pages et contenait pas mal de parties redondantes voire
inutiles. Ainsi fait, la sanction est tombee: vous trouverez ici
un document sensiblement plus concis. S'il manque une information
qui vous semble importante, nous vous encourageons soit a
parcourir l'ancien HOWTO, soit a nous envoyer un courrier nous
proposant d'ajouter ladite information. L'adresse du site de G.
Taylor est
http://www.picante.com/~gtaylor/pht/.
En vous souhaitant comme a l'accoutumee, moulte satisfaction dans vos
recherches et pleine reussite dans la configuration de votre
imprimante (Note : Desole : ca vouloir dire nous esperer toi
reussir configurer imprimante :-)).
Les HOWTOs francais peuvent etre trouves en France, notamment sur
les sites
ftp.lip6.fr (/pub/linux/french/docs/HOWTO)
ftp.univ-angers.fr (/pub/linux/french/docs/HOWTO)
11..11.. HHiissttoorriiqquuee
Ce document est le troisieme du nom, c'est a dire la
troisieme version completement revue (en esperant que sa structure
se stabilise un peu). L'histoire du PHT peut etre brievement
decrite ainsi :
J'ai commence a ecrire le premier HOWTO en reponse a un
nombre assez consequent de questions qui avaient ete posees dans
comp.os.linux. C'etait en fait une FAQ que j'avais nommee
HOWTO. Cette version etait disponible uniquement en ASCII.
Le PHT a ensuite ete regroupe avec la FAQ de LPD ecrite par
Brian McCauley <
[email protected]>, nous avons continue
ce document de concert pendant a peu pres deux ans. Nous
avons alors ajoute a notre document les travaux de Karl Auer
<
[email protected]>. Cette version du PHT etait disponible en
TeXInfo, PostScript, HTML, ASCII et Info.
Apres avoir un peu laisse le PHT vieillir pendant une bonne annee,
sans avoir pu trouver quelqu'un souhaitant le maintenir, j'ai decide
de le reecrire. Cette version est conforme au ``standard''
Linuxdoc-SGML.
11..22.. CCooppyyrriigghhtt
Ce document est sous Copyright (C) 1996 par Grant Taylor. Vous
pouvez le copier et le distribuer tel quel comme vous le
souhaitez. Par contre aucune modification ne peut etre faite
sans le consentement de l'auteur sauf si vous supprimez du
document toute marque qui lui fait reference, ainsi qu'au
traducteur et a toutes les personnes citees (y compris les
adresses de courrier electronique) et que vous le diffusez en
votre nom. L'auteur (et le traducteur) ne sauraient etre tenus
responsables de propos qui ne sont pas les leurs.
Le coordinateur des HOWTOs est actuellement Greg
Hankins <
[email protected]>. Veuillez quand meme ne pas
encombrer sa boite aux lettres de questions sauf de la plus haute
importance. En France, le coordinateur est Eric
Dumas <
[email protected],
[email protected]>.
22.. QQuu''eesstt--ccee qquuee ll''iimmpprreessssiioonn ssoouuss UUNNIIXX ??
Je me permets de consacrer un petit chapitre au B.A.BA de l'impression
sous UNIX et donc sous Linux. Les gourous trouveront ce chapitre
inutile et je les invite a passer au suivant. Les debutants
trouveront l'information suffisante, je l'espere, pour comprendre
comment les donnees sont vehiculees vers leur chere
imprimante.
La facon la plus simple d'imprimer sous Unix (et donc Linux) est
d'envoyer les donnees directement au pilote de l'imprimante.
ls >/dev/lp0
Cette methode a neanmoins un gros inconvenient : elle ne tire pas
parti des caracteristiques multi-taches du systeme d'exploitation. En
effet vous devrez attendre que le tampon de l'imprimante ait absorbe
toutes les donnees pour pouvoir continuer a travailler.
Une meilleure methode consiste a utiliser un spool
d'impression, dont le role est de collecter les donnees
temporairement dans des fichiers afin de les envoyer, en tache de
fond, a l'imprimante. Lorsque plusieurs fichiers sont soumis, ils
seront imprimes dans l'ordre de soumission (premier entre, premier
sorti). La zone de spool est donc bien une ffiillee. On dit que les
travaux sont dans la ffiillee dd''iimmpprreessssiioonn. Cette methode met
en jeu deux acteurs : le client (_l_p_r) permet a tout utilisateur
de soumettre des travaux d'impression. Le serveur quant a lui
(_l_p_d) les prend en charge en tache de fond. Il recupere les donnees
dans le spool ainsi que des informations qui lui sont necessaires
pour l'impression proprement dite.
Nous verrons dans un chapitre un peu plus loin comment tout cela
interagit. Arretons-nous la pour le moment et penchons-nous deja
sur le plus important: les peripheriques du systeme.
33.. CCoommmmeenntt IImmpprriimmeerr
Si le demon d'impression de votre machine est correctement
configure, vous pouvez lire le _P_r_i_n_t_i_n_g_-_U_s_a_g_e _H_O_W_T_O
<
http://www.loria.fr/services/linux/HOWTOFRENCH/Printing-Usage-
HOWTO/Printing-Usage-HOWTO.html
qui traite plus particulierement de la commande lpr et de la
manipulation des files d'impression.
Si, par contre, vous venez d'installez un nouveau systeme (un qui
marche, quoi...) vous souhaitez certainement configurer les
services d'impression. Restez sur cette chaine :-) ne zappez pas et
allons-y.
33..11.. LLeess ppeerriipphheerriiqquueess dd''iimmpprriimmaanntteess ddaannss llee ssyysstteemmee
Les imprimantes sont souvent rattachees (surtout les imprimantes
personnelles) au port parallele. Elles sont gerees par les
peripheriques de type /dev/lp?.
Si vous disposez d'une imprimante serie, vous utiliserez bien
sur /dev/ttyS? (ou /dev/ttys?), et non pas /dev/lp? ni
/dev/cua?. Le majeur de /dev/ttyS? est 4, celui de /dev/cua? est 5.
33..22.. LLee ppeerriipphheerriiqquuee llpp
33..22..11.. NNooyyaauuxx aanntteerriieeuurrss aa 22..11..3322
Si vous utilisez une imprimante parallele, vous devez disposer d'un
noyau Linux compile avec les gestionnaires de
peripheriques d'impression lp. Verifiez-le a l'aide de la commande
cat /proc/devices
qui doit vous montrer un ou plusieurs peripheriques lp. De plus le
repertoire /dev doit comporter la liste des peripheriques
/dev/lp0, /dev/lp1, ...
Sur un systeme de type XT, LPT1: correspond a /dev/lp0 (majeur
6, mineur 0), alors que sur un AT, LPT1: correspond a /dev/lp1
(majeur 6, mineur 1).
Nom Majeur Mineur Port
lp0 6 0 0x3bc
lp1 6 1 0x378
lp2 6 2 0x278
Le port parallele peut etre gere par le pilote du noyau de deux
manieres. D'une part par polling (scrutation), d'autre part par
interruption. La methode de gestion par interruption est en
theorie plus efficace, puisque le gestionnaire n'est sollicite par
une interruption qu'au moment ou un travail est a effectuer. En
pratique, il semble que ce soit dependant de la machine. Dans
beaucoup de cas, il n'y a pas tant de difference que cela.
Un certain nombre d'utilisateurs se sont plaints que leur
port parallele bidirectionnel n'etait pas detecte lorsqu'ils
utilisent un vieux cable unidirectionnel. Verifiez que le votre est
recent.
Vous ne pourrez pas utiliser les pilotes plip et lp en meme temps.
Vous pouvez cependant charger l'un ou l'autre soit manuellement,
soit par kerneld version 2.x (et noyaux au moins 1.3.x). En
configurant les interruptions avec attention, vous
pourrez theoriquement utilisez plip sur un port et lp sur
l'autre. Quelqu'un l'a fait en modifiant les pilotes... J'attends
avec impatience que quelqu'un me dise comment faire a partir
d'une simple et ingenieuse commande.
Un petit utilitaire appele tunelp vous permet, sous le compte super-
utilisateur, de regler les interruptions d'un
peripherique lp, le mode de fonctionnement du pilote, la frequence de
scrutation, et plein d'autres options...
Avec LILO et LOADLIN, vous pouvez configurer les adresses et
interruptions utilises par le pilote.
Syntaxe: lp=port0[,irq0[,port1[,irq1[,port2[,irq2]]]]]
Par exemple: lp=0x378,0 ou lp=0x278,5,0x378,7 **
(**) le port lp0 en 0x3bc n'est plus utilise sur les PC recents.
Si cette caracteristique est utilisee, vous devez
specifier tous les ports que vous souhaitez utiliser, il n'y a pas
de valeurs par defaut. Vous pouvez invalider un pilote en indiquant
lp=0.
Lorsque le pilote est charge en tant que module (version noyau 2 et
1.3.x), il est egalement possible de specifier les lignes
d'interruption utilisees soit dans le fichier
/etc/conf.modules, soit sur la ligne de commande de insmod en
utilisant la meme syntaxe. Les parametres sont
io=port0,port1,port2 et irq=irq0,irq1,irq2. Lisez les mages de
manuel de insmod pour plus d'information.
Le code source du pilote de port parallele se trouve dans
/usr/src/linux/drivers/char/lp.c.
33..22..22.. ppaarrppoorrtt.. NNooyyaauuxx ppoosstteerriieeuurrss aa 22..11..3322:: llee ppeerriipphheerriiqquuee
Depuis le noyau 2.1.33 (il existe un patch pour la version
2.0.30), le peripherique lp est simplement un client du
nouveau peripherique parport. L'ajout de ce parport corrige
un certain nombre de problemes dont etait affuble lp - il
peut partager le port avec d'autres pilotes, il met dynamiquement en
relation les ports paralleles disponibles avec les numeros de
peripheriques plutot que de forcer une correspondance statique
entre addresse d'entre/sortie et numero de port, ...
Une prochaine version de ce document devrait couvrir le parport
lorsque j'en aurai utilise un, mais en attendant, vous pouvez lire
le fichier Documentation/parport.txt dans les sources du noyau, ou
aller sur le site _p_a_r_p_o_r_t a
http://www.cyberelk.demon.co.uk/parport.html
33..33.. LLeess ppeerriipphheerriiqquueess sseerriiee
Les peripheriques serie utilisables sont appeles
/dev/ttyS? (les peripheriques /dev/cua? sont aussi serie mais
pas utilisables dans ce domaine). L'utilitaire stty permet de
visualiser ou de modifier les caractertiques d'un port donne.
setserial permet de controler et configurer les IRQ et adresses
d'entree/sortie si besoin est. Referez-vous au _S_e_r_i_a_l_-_H_O_W_T_O pour
de plus amples renseignements.
Si vous utilisez une imprimante serie lente avec le controle de
flux, vous constaterez peut-etre que certaines impressions sont
tronquees. Ceci est certainement du au port serie dont le
comportement par defaut est de purger son tampon des
caracteres non transmis dans les 30 secondes apres sa
fermeture. Une imprimante trop lente n'aura pas le temps de le
vider. Le tampon peut contenir 4096 caracteres.
Si la commande cat file > /dev/ttyS2 produit une sortie correcte
pour les fichiers courts et tronquee pour les longs fichiers, vous
etes peut-etre dans ce cas.
Le delai de 30 secondes peut etre ajuste a l'aide du
parametre ``closing_wait'' (attente fermeture) de la commande
setserial (version 2.12 et ulterieure).
Notez que les ports serie sont generalement configures au
demarrage de la machine grace a un appel a setserial dans le fichier
/etc/rc.d/rc.serial. Vous pouvez rajouter toute option necessaire
dans ce fichier.
44.. LLeess iimmpprriimmaanntteess ssuuppppoorrtteeeess
Le noyau Linux supporte quasiment toutes les imprimantes que vous
pouvez physiquement connecter au port serie ou parallele. Il y a
neanmoins des petites choses a savoir, notamment certaines
imprimantes a eviter bien qu'elles puissent
(electriquement parlant) communiquer avec Linux. En premier lieu, il
existe toute une generation d'imprimantes incompatibles
s'appuyant sur le ``Windows Printing System'' et qui repondent au
label ``pour Windows''. Ces imprimantes ne fonctionnent pas avec
Linux. Elles font travailler l'unite centrale pour des taches
normalement laissees au microprocesseur de l'imprimante.
Malheureusement ces taches ne peuvent etre effectuees que par le
pilote du constructeur qui ne tourne que sous Windows.
Conclusion n'achetez pas ce genre d'imprimante pour Linux.
Evidemment, sous Linux, comme d'ailleurs sous tout autre systeme, le
meilleur choix est d'avoir une imprimante PostScript. Presquer
tous les logiciels Unix produisent du _P_o_s_t_S_c_r_i_p_t et bien evidemment
le mieux est d'avoir une imprimante qui le comprend. Cela
simplifie. Malheureusement _P_o_s_t_S_c_r_i_p_t n'est pratiquement pas
disponible en dehors du domaine des imprimantes laser. Et c'est cher.
Rassurez-vous, vous pouvez utiliser toute autre imprimante.
Si vous ne comptez pas avoir de PostScript a imprimer, vous pouvez
connecter une simple imprimante matricielle retrouvee dans votre
grenier. Sinon, comme nous le verrons, il faudra passer par un
logiciel d'interpretation du _P_o_s_t_S_c_r_i_p_t (le plus celebre est le
logiciel gratuit _G_h_o_s_t_S_c_r_i_p_t de _A_l_l_a_d_i_n _s_o_f_t_w_a_r_e). Utilisez
alors une imprimante reconnue par ce logiciel.
Voir
http://www.cs.wisc.edu/~ghost/printer.html pour des
informations mises a jour selon les versions disponibles et les
pilotes en test.
Les imprimantes supportees sont:
Canon BubbleJet BJ10e
Canon BubbleJet BJ200
Canon BubbleJet BJC-210 (4.01) N/B seulement
Canon BubbleJet BJC-240 (3.33, 4.03) N/B seulement
Canon BubbleJet BJC-600
Canon BubbleJet BJC-610 (3.53) 360dpi seulement, N/B & couleur. Voir correctif bjc610.
Canon BubbleJet BJC-4000
Canon BubbleJet BJC-4100 (4.01) pas couleur.
Canon MultiPASS C2500
Canon BJC-240 (5.01)
Canon BJC-70 (5.01)
Canon BubbleJet BJC-800
HP DeskJet (3.33)
HP DeskJet Plus (3.33)
HP DeskJet 500 (3.53)
HP DeskJet Portable (4.01)
HP DeskJet 400 (3.33, 4.03) N/B teste seulement.
HP DeskJet 500C (3.53)
HP DeskJet 540C (3.53)
HP DeskJet 690C (4.03) 1bit/pixel et 32bit/pixel
HP DeskJet 693C (4.03)
HP DeskJet 550C (3.53)
HP DeskJet 560C (3.53)
HP DeskJet 600 (3.53) N/B teste seulement (1bit/pixel or 32bit/pixel)
HP DeskJet 660C (3.53)
HP DeskJet 682C (4.01) Utiliser gamma=0.3
HP DeskJet 683C (3.33, 4.03)
HP DeskJet 693C (4.03) 24bit/pixel
HP DeskJet 850 (3.53) 300dpi
HP DeskJet 870Cse (4.03) (16 ou 32 bits/pixel)
HP DeskJet 850
HP DeskJet 870Cse (4.03)
HP DeskJet 870Cxi (4.03)
HP DeskJet 680 (5.01)
HP DeskJet 500C (3.53)
HP DeskJet 500C (3.53)
HP DeskJet 510 (3.53)
HP DeskJet 520 (3.53)
HP DeskJet 540C (3.53)
HP DeskJet 693C (4.03)
HP DeskJet 600 (3.53)
HP DeskJet 600 (3.53) marges incorrectes
HP DeskJet 870Cse (4.03)
HP LaserJet 5 (4.01) 300dpi ou 600dpi
HP LaserJet 5L (4.03) 300dpi ou 600dpi Marges incorrectes dans GS 3.33. Correct dans GS 4.03.
Oki OL410ex LED printer (4.03) 300dpi ou 600dpi
HP PaintJet XL300
HP DeskJet 600 (3.53) 300dpi OK, 600 dpi tres lent
HP DeskJet 1200C (3.53)
HP DeskJet 1600C (4.03) 24bit/pixel. -dShingling=2 -dDepletion=1 -dPrintQuality=1
Ricoh 4081 laser printer (3.53)
Ricoh 6000 laser printer (3.53)
Epson Stylus Color (3.53)
Epson Stylus Color II (3.53) -r360 -dMicroweave voir devices.txt et GS stcolor FAQ
Epson Stylus 500 (4.03) -r360 or -r720, -dMicroweave voir les notes
d'Alan Williams sur GS. (Ne marche pas avec 3.33.)
Epson Stylus 800 (3.53) -sModel=st800
55.. QQuueell ddeemmoonn dd''iimmpprreessssiioonn ??
Jusque recemment, le choix sous Linux etait simple puisque tout le
monde disposait du seul demon lpd sorti tout droit et presque
tel quel du code BSD Net-2. Aujourd'hui la plupart des
fournisseurs proposent ce logiciel. Mais les choses sont en
train de changer. Les systemes SVR4 tels que Sun Solaris sont
fournis avec un paquetage logiciel d'impression centre sur lpsched.
D'autre part, sous Linux, quelques fournisseurs proposent LPRng,
une implementation beaucoup plus recente et disponible
gratuitement. LPRng est tres facilement administrable notamment
sur des plate-formes importantes et contient du code plus robuste
(moins farfelu??) que lpd.
A l'heure actuelle malgre toutes ces nouveautes, lpd est certainement
ce qui convient le mieux a la plupart des utilisateurs. Meme si ce
n'est pas le fin du fin, il tourne bien une fois configure
et, chose importante, il est tres bien documente dans les
livres sur Unix.
Pour plus d'information sur LPRng, allez voir sur
http://ltpwww.gsfc.nasa.gov/ltpcf/about/unix/Depotdoc/LPRng/.
66.. LL''iimmpprreessssiioonn,, ccoommmmeenntt ccaa mmaarrcchhee
Nous considerons ici que vous utilisez la suite logicielle lpd que
nous decrirons d'ailleurs. Elle est la plus repandue et fonctionne
tres bien.
66..11.. IImmpprreessssiioonn llooccaallee eett iimmpprreessssiioonn ddiissttaannttee
L'impression locale permet aux utilisateurs d'envoyer des
travaux d'impression a l'imprimante directement rattachee a leur
machine.
L'impression distante, par contre, permet de soumettre des
travaux d'impression depuis une machine, a une autre machine
sur le reseau, sur laquelle est connectee une imprimante.
66..22.. DDee qquuooii aavveezz vvoouuss bbeessooiinn
Nous supposons que vous savez editer un fichier texte sous Linux et
que vous avez une bonne comprehension des notions de droits
d'acces et de propriete (chmod, chown).
Nous supposons egalement que votre systeme Linux fonctionne
correctement. En particulier, si vous souhaitez faire de
l'impression distante, que votre reseau fonctionne deja.
Consultez a ce propos les nombreuses documentations disponibles sur
le sujet (comme on dit: RTFM, ce qui en bon francais veut dire
LLBD :-)).
66..33.. LLeess pprrooggrraammmmeess iimmppoorrttaannttss
Le systeme d'impression Unix comprend (au moins) 5 programmes. Ils
doivent se trouver a l'endroit decrit (c'est le mieux) ou dans un
repertoire accessible (avec la variable PATH), appartenir a root
(groupe lp), et avoir les permissions suivantes :
-r-sr-sr-x root lp /usr/bin/lpr
-r-sr-sr-x root lp /usr/bin/lpq
-r-sr-sr-x root lp /usr/bin/lprm
-r-xr-sr-x root lp /usr/sbin/lpc
-rwxr--r-- root lp /usr/sbin/lpd
Les quatre premiers sont utilises pour soumettre, visualiser,
annuler, controler les travaux d'impression. Le dernier est le
demon.
Il existe bien entendu des pages de manuel en ligne pour ces
commandes que vous pourrez consulter pour plus d'information. Le
point important a noter est que les commandes lpr, lpq,
lpc et lprm operent sur une imprimante par defaut nommee lp.
La variable d'environnement PRINTER peut contenir le nom de
l'imprimante que vous avez choisie. La specification du nom d'une
imprimante sur la ligne de commande surchargera ces definitions (les
imprimantes de l'exemple sont hors-ligne):
# echo $PRINTER
(vide)
#
# lpq
waiting for lp to become ready (offline ?)
...
# export PRINTER=mon_imprimante
# lpq
waiting for mon_imprimante to become ready (offline ?)
...
# lpq -Plpr0
waiting for lpr0 to become ready (offline ?)
...
66..33..11.. LLee cclliieenntt eett llee sseerrvveeuurr
Voici ci-dessous les interactions client - demon
_________
+/BlaBla /+
//________//|
/ / +
+----------------+ +----------+ /
| LPR | |= oo |/
+----------------+ +----------+
| Imprimante
| ^
V |
+----------------+ +------------------+
| LPD |------>------>----| LPD |
+----------------+ +------------------+
Soumission d'un requete d'impression
+----------------+
| LPQ |
+----------------+
\
\_______>______
\
+----------------+ \+------------------+
| LPD | | LPD |
+----------------+ +------------------+
Soumission d'une demande d'information
Lorsque le systeme demarre, lpd est charge. Il lit
le fichier /etc/printcap (dont vous trouverez une explication
plus loin) qui decrit les imprimantes connues.
66..33..22.. LLeess ffiicchhiieerrss ssoouummiiss ppaarr llee cclliieenntt
Lorsqu'un programme client soumet un travail d'impression,
il genere deux fichiers qu'il ecrit dans le spool:
+o Un fichier de donnees qui contient une copie des donnees que vous
souhaitez soumettre a l'imprimante. Il s'agit bien d'une copie, ce
qui signifie que toute modification ulterieure de votre fichier
n'alterera pas l'impression.
+o Un fichier de description du travail a effectuer.
66..33..33.. LLaa ccoommmmaannddee llpprr
La commande lpr soumet un travail d'impression. Elle se charge de
mettre les donnees a imprimer dans un fichier dans le spool
d'impression. Ces donnees peuvent provenir soit d'un fichier (les
donnees sont dupliquees et toute modification
ulterieure du fichier d'origine n'affectera pas l'impression), soit
de l'entree standard (stdin). Le demon est averti de
l'existence d'un nouveau fichier et envoie, des que possible, les
donnees vers l'imprimante physique (ou la machine distante).
La taille du spool est bien entendu limitee a la place
disponible sur votre disque dans /usr/spool/ ou a la taille limite
specifiee dans le fichier de configuration printcap. Vous pouvez
neanmoins imprimer un gros fichier en demandant a lpr de ne pas
dupliquer le fichier. Le demon d'impression ira alors chercher
le fichier que vous indiquez dans la ligne de commande et non plus
dans le spool.
66..33..44.. LLaa ccoommmmaannddee llppqq
La commande lpq affiche le contenu du spool, pour une imprimante
donnee. Une des informations importantes fournies est le
numero du travail (job). C'est lui qui pourra servir a annuler
un des travaux soumis, y compris celui en cours d'impression.
Parmi tous les travaux soumis, l'indication ``active'' indique le
travail en cours d'impression (ou que lpd essaie d'envoyer
a l'impression).
66..33..55.. LLaa ccoommmmaannddee llpprrmm
La commande lprm enleve un travail de la file (et donc le fichier
du spool). Vous pouvez soit specifier un numero de job, soit un
tiret permettant de supprimer tous les travaux vous
appartenant. Si vous etes root, tous les travaux sont
supprimes. Pour supprimer les travaux d'un utilisateur,
specifiez son nom.
# lprm 1
dfA001Aa00484 dequeued
cfA001Aa00484 dequeued
#
Le premier fichier contient les donnees a imprimer. Il a ete cree
par lpr. Le deuxieme contient des informations que le demon utilise
pour savoir que faire des donnees (impression locale, distante, ...)
Consultez le manuel en ligne : lpd(8).
66..33..66.. LLaa ccoommmmaannddee llppcc
La commande lpc permet de controler les travaux en cours ainsi
que l'imprimante, et certains aspects de son utilisation. En
particulier, vous pouvez demarrer ou stopper la sortie des travaux
du spool pour l'impression, valider ou invalider une
imprimante, et meme modifier l'ordre d'impression des fichiers.
Les commandes suivantes permettent d'invalider l'impression sur
mon_imprimante, de valider le spool sur ton_imprimante, et de faire
passer le job 37 en debut de file:
lpc down mon_imprimante
lpc enable ton_imprimante
lpc topq 37
lpc peut fonctionner en interactif si aucun parametre ne lui est
passe. Vous pouvez lire les pages du manuel en ligne pour obtenir
des instructions completes. A noter que certaines actions de lpc sont
reservees au super-utilisateur (root).
66..44.. LLeess rreeppeerrttooiirreess iimmppoorrttaannttss
Le repertoire le plus important est le repertoire de spool, dans
lequel les donnees vont etre stockees avant d'etre imprimees.
Typiquement, un systeme sera configure pour avoir un
repertoire de spool par imprimante. Cela rend la gestion plus
facile. Sur mon systeme, par exemple, le repertoire
/usr/spool/lp est le repertoire principal. Sous ce repertoire,
on y trouve le sous-repertoire lpr0, correspondant a la
declaration que j'ai faite dans /etc/printcap pour le repertoire
de spool de mon imprimante.
NDT: Ce qui va suivre decrit une facon de faire pour donner les
bons droits d'acces aux repertoires de spool.
Differentes methodes sont possibles, sachant que, comme sous
Un*x, beaucoup de choses sont possibles dans ce domaine, il
convient de faire attention de ne pas offrir de failles a la
securite de l'ensemble.
Le repertoire de spool doit appartenir a root, et au groupe lp, avec
les droits de lecture/d'ecriture pour utilisateur et groupe, et
lecture seule pour le reste du monde.
chmod ug=rwx,o=rx lpr0
chgrp lp lpr0
drwxrwxr-x 2 root lp 1024 Feb 11 10:51 lpr0/
Un autre repertoire doit egalement etre present : /usr/spool/lpd
avec les memes droits. Vous aurez plus d'informations plus avant
dans ce document.
66..55.. LLeess ffiicchhiieerrss iimmppoorrttaannttss
En dehors des programmes que nous avons deja evoques
precedemment, quatre fichiers doivent se trouver dans chaque
repertoire de spool. Avec les versions recentes des gestionnaires
d'impression, vous n'avez pas a vous soucier de ces fichiers. Ils
sont crees automatiquement s'ils n'existent pas : .seq, errs,
lock et status. Ces fichiers doivent avoir les
droits -rw-rw-r--. Le fichier .seq contient un compteur pour
l'affectation des numeros de jobs. Le fichier status contient le
message devant etre emis par la commande lpc stat. Le
fichier lock est utilise par le demon pour qu'il n'imprime qu'un
fichier a la fois. Le fichier errs contient les erreurs survenues
sur l'imprimante.
Le fichier errs n'est pas obligatoire. De plus, il peut s'appeler
comme vous le souhaitez, pourvu que son nom soit declare dans le
fichier /etc/printcap que nous decrirons dans la suite.
77.. CCoonnffiigguurreerr lleess sseerrvviicceess dd''iimmpprreessssiioonn
La configuration minimale pour un systeme d'impression permet de
mettre des fichiers en file d'impression puis de les imprimer.
Il ne prete aucune attention au fait que votre imprimante puisse
les imprimer (les comprendre meme) et ne vous permettra pas
d'imprimer des choses extraordinaires. Neanmoins, c'est un premier
pas.
77..11.. LLee ffiicchhiieerr //eettcc//pprriinnttccaapp
Le fichier /etc/printcap decrit toutes les imprimantes que votre
systeme doit connaitre. Il peut etre modifie avec votre
editeur prefere, doit appartenir a root et avoir les droits suivants:
-rw-r--r-- 1 root system 164 Oct 25 21:23 /etc/printcap
Le contenu du fichier semble assez incomprehensible a premiere
vue. Il respecte effectivement une syntaxe particuliere
et malgre les apparences, assez simple lorsque l'on connait ! Il
n'y a pas toujours de manuels concernant ce fichier, et cela
complique un peu les choses. Un petit conseil en passant : essayez,
dans la mesure du possible de rendre votre fichier le plus
lisible possible, avec des commentaires. Vous pouvez consulter les
pages du manuel en ligne concernant printcap(5) (ou empressez-vous
de les recuperer si vous ne les avez pas). Plus loin sont
decrits les parametres importants.
Une entree de printcap decrit une imprimante, c'est-a-dire
une correspondance nom logique - imprimante physique, puis decrit la
facon de transmettre les donnees. Par exemple, une entree va decrire
le peripherique physique a utiliser, le repertoire de spool, les
traitements a effectuer sur les donnees avant impression, ou encore
le repertoire dans lequel seront notifiees les erreurs. Vous
pouvez aussi limiter la quantite de donnees pour un job, ou meme
limiter l'acces d'une imprimante a une classe d'utilisateurs.
Vous trouverez dans la partie suivante la description des champs.
Il est tout a fait possible d'avoir plusieurs entrees
decrivant differentes facons d'envoyer des donnees a une
meme imprimante physique. Par exemple, une imprimante physique
peut supporter les formats HP LaserJet et PostScript, en
fonction de la sequence de caracteres envoyee au debut d'un
travail. Vous definirez donc deux entrees, l'une permettant de
traiter le format HP, l'autre le format _P_o_s_t_S_c_r_i_p_t. Les
programmes generant des donnees ``HP'' les enverront a
l'imprimante HP, ceux generant des donnees _P_o_s_t_S_c_r_i_p_t les
enverront a l'imprimante _P_o_s_t_S_c_r_i_p_t. Toutes les deux representent la
meme imprimante physique.
Les programmes qui modifient les donnees avant de les envoyer a
l'imprimante physique sont des filtres.
Exemple d'entree d'un fichier /etc/printcap:
# LOCAL djet500
lp|dj|deskjet:\
:sd=/var/spool/lpd/dj:\
:mx#0:\
:lp=/dev/lp0:\
:sh:
Ceci definit une imprimante dont les noms sont lp (par defaut),
dj et deskjet. Les deux derniers sont des alias de la meme
imprimante. La file (on dit tres souvent le spool, meme en
francais...) de cette imprimante de trouve dans le repertoire
/var/spool/lpd/dj (sd signifie spool directory). Le peripherique
utilise est /dev/lp0. La page d'en-tete est supprimee
(sh) et aucune limite de taille de fichier n'est fixee (mx)
Notez que la meme entree pourrait s'ecrire:
lp|dj|deskjet:sd=/var/spool/lpd/dj:mx#0:lp=/dev/lp0:sh:
mais c'est moins beau.
Vous pouvez consultez la page de manuel de printcap sur
http://www.picante.com/~gtaylor/pht/man/printcap.html. Toutes les
options y sont decrites.
Tous les champs exceptes les noms d'imprimantes sont entoures de deux-
points et reperes par un symbole de deux lettres suivi du signe
egal. Ensuite est indiquee la valeur qui peut etre de type
numerique, booleenne ou chaine de caracteres:
champ type signification
lp string designe le peripherique d'impression
sd string designe le repertoire de spool
lf string designe le fichier de rapport d'erreurs
if string specifie le nom du filtre d'entree
rm string designe le nom d'un site d'impression distant
rp string designe le nom d'une imprimante distante
sh booleen indique s'il faut supprimer les en-tetes
sf booleen indique s'il faut supprimer les sauts de pages
de fin de travaux
mx numerique indique la taille maximum d'un job
(en blocs = 1Ko sous linux)
77..11..11.. DDeettaaiillss ssuurr llee cchhaammpp llpp
Si vous specifiez /dev/null comme
peripherique, tous les traitements se feront, mais tout partira
a la poubelle. Ca semble ridicule, mais cela vous permet par exemple
de tester une configuration. Lisez le chapitre ``Imprimantes qui ne
sont pas de simples peripheriques''. Si vous designez une
imprimante distante avec rp et rm, lp doit contenir :lp=:.
Ne laissez pas ce champ vide en cas d'impression locale, le demon
signalerait une erreur.
77..11..22.. DDeettaaiillss ssuurr llee cchhaammpp llff
Tout fichier specifie ici doit exister, sinon le rapport
d'erreurs ne se ferait pas.
77..11..33.. DDeettaaiillss ssuurr llee cchhaammpp iiff
Les filtres d'entree sont des utilitaires transformant les
donnees qu'il recoivent sur leur entree standard en un format
particulier qu'il sortent sur leur sortie standard. Typiquement, la
conversion texte - _P_o_s_t_S_c_r_i_p_t deja mentionnee.
Si vous specifiez un filtre d'entree, le demon n'envoie
pas directement les donnees au peripherique. Il
execute le filtre en dirigeant les donnes sur son entree standard
et en designant le peripherique de sortie comme sortie standard.
77..11..44.. DDeettaaiillss ssuurr lleess cchhaammppss rrmm eett rrpp
Envoyer des donnees a une imprimante rattachee a une machine
distante est tres simple: il suffit de specifier le nom de
la machine avec rm et le nom de l'imprimante avec rp.
S'assurer que l'entree lp est vide. A noter que les donnees seront
d'abord mises dans le spool local avant d'etre transferees. Meme
si votre imprimante est distante, il faudra egalement un spool local.
77..11..55.. DDeettaaiillss ssuurr lleess cchhaammppss sshh eett ssff
Les bannieres concernent eventuellement les utilisations a
plusieurs personnes. Elles identifient les jobs.
La suppression de ces bannieres vous permet d'economiser du papier.
Par contre la gestion des sauts de page sera plus
interessante, surtout si vous utilisez des traitements de textes qui
formatent toujours des pages pleines. Dans ce cas, pas besoin de
saut de page supplementaire. Vous auriez sinon une page blanche en
fin de chaque travail. Si vous utilisez des listings ou autres
documents, ajouter un saut de page garantit que chaque travail
commancera bien en debut de page.
77..11..66.. DDeettaaiill ssuurr llee cchhaammpp mmxx
Ce champ permet de limiter la taille des donnees pour chaque job. Le
nombre a specifier est en blocs de BUFSIZE (pardon, de 1 Ko) sous
Linux. La valeur 0 rend la taille illimitee, permettant la
soumission de travaux limitee uniquement a la taille du disque.
Notez que la limite concerne la taille des donnees mises en
spool, et non pas les donnees envoyees a l'imprimante
physique. Si la limite est depassee, le fichier est
tronque avec l'emission d'un message disant: lpr: <fichier>: copy
file is too large.
Cela peut etre interessant pour des imprimantes physiques en mode
texte, notamment si des utilisateurs ou des programmes creent
accidentellement des donnees trop volumineuses.
Si vous manquez de memoire de masse, pourquoi n'inventeriez-vous pas
un filtre qui decompresse ce qu'il a a envoyer a l'imprimante
? Vous soumettriez alors des donnees compressees.
88.. LLeess ffiillttrreess
Si avec les explications precedentes, tout marche c'est
formidable, mais en regle general, cela ne suffit pas. Regardez ci-
dessous ce que l'on obtient sur la DeskJet 500, lorsque j'envoie
un fichier texte:
Ceci est la premiere ligne.
Celle-ci est la deuxieme.
Voici la troisieme.
Et alors l'impression d'un fichier _P_o_s_t_S_c_r_i_p_t... Vous obtenez le
listing complet du code _P_o_s_t_S_c_r_i_p_t avec les meme effets
d'escalier. Une horreur.
Il faut donc quelque chose de plus et c'est le role des filtres. Les
plus observateurs d'entre vous auront peut-etre remarque
l'existence des parametres if (input filter) et of (output filter)
dans le fichier printcap. Pour l'instant nous avons besoin de if.
Un filtre est un simple programme executable qui lit les
donnees sur son entree standard et sort le resultat sur sa sortie
standard.
Commencons par ecrire un script que vous appellerez filtre
et qui ajoute des retours chariot avant chaque caractere fin de ligne.
Ceci elimine l'effet d'escalier.
#!/usr/local/bin/perl
# La ligne ci-dessous doit contenir le chemin complet vers perl
# Ce script doit etre executable: chmod 755 filtre
while(<STDIN>){chop $_; print "$_\r\n";};
# Vous pouvez aussi vouloir terminer avec une fin de page: print "\f";
Dans /etc/printcap, l'entree est modifiee en consequence:
lp|dj|deskjet:\
:sd=/var/spool/lpd/dj:\
:mx#0:\
:lp=/dev/lp0:\
:if=/var/spool/lpd/dj/filtre:\
:sh:
Essayez d'ecrire le filtre en shell qui sera plus efficace que de
charger perl. Bon allez, je vous aide un peu:
#!/bin/sh
if [ "$1" = -c ]; then
cat
else
sed -e s/$/^M/
fi
# echo -ne suppose que /bin/sh correspond a bash
echo -ne \\f
Notez que '^M' symbolise le caractere retour-chariot et non pas un
`^' suivi d'un 'M'. Dans emacs, pour saisir ce caractere, entrez la
sequence C-q C-m, alors que sous vi, entrez C-v C-m. Le
test de $1 permet d'invalider l'insertion du retour-chariot par
la commande lpr -l A savoir que lpr genere des parametres qui
sont passes au filtre. Par defaut il passe -w0. Si l'option -l
est donnee, il passe -c. Ce script est traditionnellement nomme
/usr/lib/lpf. Si vous avez plusieurs scripts de la sorte, une
bonne idee consiste a les mettre tous dans un sous-repertoire, par
exemple /usr/lib/lpd.
Il se peut aussi que votre imprimante puisse passer dans un mode
permettant l'ajout de retour-chariots grace a une sequence
d'echappement. Voici un exemple de filtre utilisant la commande
echo -ne pour envoyer cette sequence:
#!/bin/sh
# Filtre pour imprimantes HP, permettant de traiter LF comme CRLF
# La commande echo -ne suppose que /bin/sh correspond a bash
echo -ne \\033&k2G
cat
echo -ne \\f
Vous pouvez compliquer les filtres comme bon vous semble. Le mieux
est d'avoir un filtre qui reconnait le fichier d'entree et le
convertit au bon format pour votre imprimante. Un tel filtre
est appele filtre magique. Ne vous embetez pas a les ecrire
vous-meme, il en existe surement deja un qui vous
convient. Allez voir sur
tsx-11.mit.edu:/pub/linux/sources/usr.bin/magic-filter-x.y.tar.gz.
99.. LLeess ffiicchhiieerrss,, lleeuurr eemmppllaacceemmeenntt eett lleess ddrrooiittss dd''aacccceess
Les differences qui existent entre les nombreuses distributions font
que l'on ne peut ici etre exhaustif. Je pense que beaucoup de gens
utilisent maintenant les distributions type slackware et on peut
raisonnablement s'appuyer sur cet exemple.
Pensez a inclure lpd dans le fichier rc.local apres le demarrage
eventuel de syslogd. Voici les fichiers tels que l'on peut les
trouver:
-r-sr-xr-x 1 root lp 9308 Aug 23 21:45 /usr/bin/lpq*
-r-sr-xr-x 1 root lp 10056 Aug 23 21:45 /usr/bin/lpr*
-r-sr-xr-x 1 root lp 8900 Aug 23 21:45 /usr/bin/lprm*
-r-x------ 1 root lp 1596 Aug 23 21:45 /usr/bin/lptest*
-r-xr-sr-x 1 root lp 17160 Aug 23 21:45 /usr/sbin/lpc*
-rwxr--r-- 1 root lp 34072 Aug 23 21:45 /usr/sbin/lpd*
et pour chaque repertoire de spool:
/usr/spool/lp/lpr0/
total 5
drwxr-xr-x 2 root lp 1024 Feb 12 15:15 ./
drwxr-xr-x 3 root lp 1024 Sep 2 1993 ../
-rw-r----x 1 root lp 4 Feb 12 15:15 .seq
-rw-r--r-- 1 root lp 3 Feb 13 20:46 lock
-rw-rw-r-- 1 root root 27 Feb 12 15:15 status
Ces trois fichiers sont crees par lpr et lpd. Ils peuvent
etre absents si vous ne les avez encore jamais lances. Avec
d'anciennes versions il fallait executer touch sur ces fichiers ou
bien modifier leurs droits. Les bugs concernant ces fichiers ont
maintenant ete corriges dans les versions recentes.
Il est a noter egalement que le groupe d'appartenance etait
daemon avec d'anciennes versions, et est maintenant lp.
Ne soyez pas surpris de trouver des choses legerement
differentes sur votre systeme. D'un autre cote, si quelque chose ne
fonctionne pas, pensez a soupconner ces droits avant d'affoler nos
boites aux lettres (Si vous saviez le nombre de courriers
electroniques recus et dont la solution se trouve la !).
On peut trouver le programme lpr avec ou sans le bit setuid(root). En
fait ce n'est pas si evident que cela. Tout depend des droits
et permissions des repertoires de spool. Autant que je sache, il y a
une totale securite avec lpr, meme si il est setuid(root). Donc, a
la limite, positionnez le bit pour ne pas vous soucier des droits
d'acces au repertoire de spool.
Vous etes libre de mettre les binaires dans les repertoires que
vous voulez, bien qu'ils se trouvent couramment dans /usr/bin ou
/usr/sbin. (lpc et lpd peuvent se trouver par exemple dans
/etc). Certaines commandes etant interessantes pour tout
utilisateur, il est bon de les laisser aux endroits habituels.
Attention toutefois, car les gens qui concoivent les distributions
sont egalement libres de choisir. Pensez a supprimer les
anciennes versions, si vous changez de distribution.
L'emplacement du fichier de verrouillage principal du demon lpd
(lpd.lock), est fixe en dur dans le code. Il se trouve dans
/var/spool/lpd/lpd.lock. Donc, vous devrez prevoir un repertoire
/var/spool/lpd meme si votre repertoire de spool est
different. Les binaires anciens mettaient ce fichier dans
/var/spool/lpd.lock/
Typiquement, chez moi, on trouve
/var/spool/lpd/
drwxr-xr-x 4 root lp 1024 Aug 18 1994 ./
drwxr-xr-x 18 root root 1024 Aug 17 1994 ../
-rw-r--r-- 1 root root 3 Feb 14 20:12 lpd.lock
/var/spool/lp/lpr0
drwxr-xr-x 2 root lp 1024 Feb 12 15:15 ./
drwxr-xr-x 3 root lp 1024 Sep 2 1993 ../
-rw-r----x 1 root lp 4 Feb 12 15:15 .seq*
-rw-r--r-- 1 root root 3 Feb 14 20:12 lock
-rw-rw-r-- 1 root root 27 Feb 12 15:15 status
Etant donne que l'on jongle en permanence entre /usr et /var, il
est clair qu'un lien doit exister entre les deux. Soit vous
definissez vos repertoires dans /usr/spool/... et
definissez le lien /var vers /usr, soit vous mettez tout sous
/var/spool/lpd... et definissez le lien /usr/spool vers /var/spool.
Si vous avez, comme moi, une partition root (/) et une partition
/usr, les deux cas ne sont pas identiques. Dans le premier, vos
fichiers seront stockes dans la partition de root, /var
etant cree sous /, dans l'autre, ce sera dans la partition /usr,
puisque /usr est monte. Vous pouvez aussi avoir un systeme de
fichiers /var reserve.
Le fichier de configuration principal est /etc/printcap. Il existe
aussi, pour l'impression distante, les fichiers /etc/hosts.allow et
/etc/hosts.lpd.
Desormais, le repertoire /etc est le repertoire ou
sont situes les fichiers de configuration. Vous pouvez
choisir de les mettre ailleurs, mais definissez toujours un lien
symbolique de /etc vers vos fichiers. Si votre systeme comporte des
binaires qui vont toujours chercher leur configuration dans /usr/etc
ou /etc/inet, ils sont surement tres anciens et vous gagneriez a
mettre votre systeme a jour.
1100.. OOuu ttrroouuvveerr ddeess ffiillttrreess dd''iimmpprreessssiioonn ??
Pas mal de filtres sont deja rediges et disponibles sur
_S_u_n_s_i_t_e ou _l_i_p_6 dans
/pub/sunsite/linux/system/printing.
1100..11.. LLeess ffiillttrreess mmaaggiiqquueess
Titre: magicfilter
Version: 1.1b
Date-entree: 04APR95
Description: Un filtre d'impression automatique, extensible, parametrable.
Detecte tout type de fichier pour lequel existe un utilitaire
de conversion. Ce filtre est ecrit en C et completement controle'
par un fichier de configuration externe. Cette version
apporte la creation "automagique" de ce fichier
d'apres les logiciels installes sur votre systeme
grace a 'GNU Autoconf'.
Cette version corrige les bogues de la version 1.1/1.1a;
En plus: filtres pour imprimantes PostScript non-ASCII
Auteur: H. Peter Anvin <
[email protected]>
Site-initial: sunsite.unc.edu
53000 /pub/Linux/system/printing/magicfilter-1.1b.tar.gz
licence-copie: GPL
1100..22.. LLeess ffiillttrreess AAPPSS
Titre: apsfilter
Version: 4.9.1
Date-entree: Lundi, 10. Juillet 1995, 21:22:35 MET DST
Description: magicfilter for lpd with auto filetype detection
Mots-cles: lpd magicfilter aps apsfilter
Site-initial: sunsite.unc.edu
/pub/Linux/system/printing/
211KB aps-491.tgz
Platformes: C-Compiler, gs Postscript emulator, pbmutils
Licence-copie: GPL
Les filtres APS se configurent dans l'entree _i_f du fichier
/etc/printcap et convertissent la plupart des types de fichiers
connus (texte, _P_o_s_t_S_c_r_i_p_t, dvi, gif, ...) en commandes
comprehensibles par votre imprimante.
1100..33.. LLeess ffiillttrreess EEZZ--mmaaggiicc
Titre: ez-magic printer filter
Version: 1.0.5
Date-entree: 26 Janvier 1997
Description: ez-magic est un filtre d'impression supportant 8 formats
de fichiers (txt,ps,gif,bmp,pcx,png,jpg,tif).
Il permet l'impression via un reseau (SMB), ou vers une
imprimante locale. Lit depuis un fichier, STDIN ou lpd.
Simple a utiliser et a configurer. Seul un fichier 'script'
est necessaire, pas de multitudes de manuels et pilotes.
Necessite des programmes de conversion (tels que netpbm et
ghostscript). Ecrit en 'bash'. Ajout de nouveaux formats
facile. Preconfigure pour HP DeskJet 870Cse en reseau.
Comparable a apsfilter et autres.
Mots-cles: magic filter, print, graphics, samba, network, smb,
ghostscript, postscript, gif, jpg, simple
Auteur:
[email protected] (Toby Reed)
Maintenu-par:
[email protected] (Toby Reed)
Site-initial:
http://www.eskimo.com/~toby/ez-magic-1.0.5.tar.gz
38 kb ez-magic-1.0.5.tar.gz
Site-secondaire:sunsite.unc.edu /pub/Linux/system/printing
38 kb ez-magic-1.0.5.tar.gz
Licence-copie: Copyright, droits complets de manipulation sauf 1 ou 2
restrictions.
1111.. LLeess llooggiicciieellss dd''iimmpprreessssiioonn
Les logiciels d'impression sont disponibles en France par
exemple sur
ftp://ftp.lip6.fr/pub/linux/sunsite/system/Printing.
1111..11.. GGhhoossttSSccrriipptt
_G_h_o_s_t_S_c_r_i_p_t est un logiciel majeur pour l'impression sous Linux. En
effet la plupart des logiciels generent du _P_o_s_t_S_c_r_i_p_t. Ce
logiciel, gratuit, est capable de convertir le _P_o_s_t_S_c_r_i_p_t en
langage comprehensible par votre imprimante (si le pilote est
disponible). Il joue le role de filtre afin que vous puissiez
considerer votre imprimante comme _P_o_s_t_S_c_r_i_p_t. Ceci vous
simplifie grandement la vie.
_G_h_o_s_t_S_c_r_i_p_t est disponible sous deux formes. Une version commerciale,
appelee _A_l_l_a_d_i_n _G_h_o_s_t_S_c_r_i_p_t, peut etre utilisee librement pour des
besoins prives mais ne doit pas etre distribuee par les
distributions payantes de Linux. Elle est generalement en
avance d'une annee sur la version gratuite.
La version gratuite est sous licence GNU et n'est rien d'autre
qu'une version plus ancienne de _A_l_l_a_d_i_n _G_h_o_s_t_S_c_r_i_p_t.
1111..11..11.. UUttiilliisseerr GGhhoossttSSccrriipptt
gs est le nom de l'executable. gs -help vous donne une aide rapide
sur les parametres disponibles. (La liste des pilotes est la
liste des pilotes compiles avec la version et non la liste complete.)
Quoi que vous fassiez avec gs, il est conseille d'invalider l'acces
aux fichiers (par -dSAFER). En effet _P_o_s_t_S_c_r_i_p_t est un
langage pleinement operationnel et un fichier _P_o_s_t_S_c_r_i_p_t peu
scrupuleux peut endommager vos fichiers et vous donner un terrible
mal de crane..
Exemple de ligne de commande pour un imprimante Stylus 800
gs -dNOPAUSE -sDEVICE=escp2 -sPAPERSIZE=a4 -sOutputFile=/dev/lp1 fichier.ps
1111..11..22.. RReeggllaaggeess
La taille, l'aspect et la situation d'une image sur une page
sont regles par le pilote de l'imprimante dans _G_h_o_s_t_S_c_r_i_p_t. Si
vous trouvez que vos impressions sont tronquees ou mal
cadrees il faudra soit retoucher le code du pilote
(deconseille), soit modifier les fichiers de configuration
(gs_init.ps, gamma.ps)
1111..11..33.. GGaammmmaa,, ttaaiilllleess ddee ppooiinnttss,, ......
Il se peut que vous trouviez vos impressions trop sombres. Ceci
peut arriver si votre imprimante n'a pas une definition suffisante.
Dans ce cas vous devez creer votre propre fonction de transfert.
Pour ceci, creez le fichier gamma.ps dans le repertoire des
librairies de _G_h_o_s_t_S_c_r_i_p_t et appelez le fichier sur la ligne de
commande de gs avant le fichier a imprimer. Pour eclaricir le
resultat, vous devez diminuer les valeurs indiquees.
Notamment si votre pilote utilise l'algorithme de _F_l_o_y_d_-_S_t_e_i_n_b_e_r_g pour
rasteriser les couleurs, des valeurs comprises entre 0.15 et 0.2
sont mieux adaptees.
---8<---- gamma.ps ----8<---
%!
%transfer functions for cyan magenta yellow black
{0.3 exp} {0.3 exp} {0.3 exp} {0.3 exp} setcolortransfer
---8<------------------8<---
Vous pouvez aussi modifier les dominantes de couleurs
(voir le repertoire /examples de _G_h_o_s_t_S_c_r_i_p_t qui contient une page
de test des couleurs).
1122.. LL''iimmpprreessssiioonn aa ddiissttaannccee
Une des caracteristiques de lpd est qu'il supporte l'impression sur
des imprimantes rattachees a d'autres machines que la votre.
Avec, en plus, une combinaison de filtres soignee, vous aurez
un systeme d'impression transparent, reparti et performant.
1122..11.. VVeerrss uunn hhoottee UUnniixx//llppdd
Pour que des machines distantes puissent utiliser
l'imprimante attachee a votre machine, le nom de ces machines
doit etre reference soit dans le fichier /etc/hosts.lpd,
soit dans le fichier /etc/hosts.equiv. Ce sont des fichiers
textes normaux, dans lesquels on indique un nom de machine par
ligne.
Il est preferable de declarer les machines dans /etc/hosts.lpd
qui est specialement reserve a l'impression, le fichier
/etc/hosts.equiv donnant des droits plus etendus.
Vous pouvez restreindre les droits d'acces distants par groupe ou
par utilisateur. Les groupes autorises sont indiques grace
au parametre :rg=: du fichier printcap: rg=admin
restreint l'utilisation aux utilisateurs du groupe
admin. Le parametre booleen :rs=: du meme fichier restreint
l'acces aux utilisateurs ayant un compte sur votre machine.
1122..11..11.. AAvveecc llppdd
Pour imprimer vers une autre machine, vous devez creer une
entree printcap telle que:
# REMOTE djet500
lp|dj|deskjet:\
:sd=/var/spool/lpd/dj:\
:rm=machine.out.there.com:\
:rp=printername:\
:lp=/dev/null:\
:sh:
Vous noterez qu'il doit bien exister un repertoire de spool local
gere par votre lpd local. Les fichiers soumis y seront copies puis
envoyes vers la machine distante.
1122..11..22.. AAvveecc rrllpprr
Vous pouvez utiliser rlpr pour soumettre une impression directement
a la machine distante sans passer par un demon local et toute sa
configuration. C'est particulierement interessant lorsque vous
imprimer rarement et vers differentes imprimantes.
rlpr s'appuie sur TCP/IP. Il n'est pas necessaires que les
imprimantes soient connues explicitement. N'ayant pas besoin de
fichier printcap, il est plus facile a gerer. Il est compatible avec
lpr.
1122..22.. LLaannMMaannaaggeerr oouu SSaammbbaa.. IImmpprriimmeerr vveerrss uunnee iimmpprriimmaannttee aattttaacchheeee
aa WWiinnddoowwss 9955,, NNTT,,
Il existe un mini-document (Printing to Windows HOWTO) qui
decrit ceci tres bien.
Il est possible de rediriger une file lpd vers un service d'impression
SMB grace au programme smbclient
(
http://www.picante.com/~gtaylor/pht/man/smbclient.html). Samba
contient un script (smbprint) qui fait cela. Vous devez mettre un
fichier de configuration pour l'imprimante en question dans
le repertoire de spool et decrire le programme smbprint en tant que
filtre dans /etc/printcap:
lp|remote-smbprinter:\
:lp=/dev/null:sh:\
:sd=/var/spool/lpd/lp:\
:if=/usr/local/sbin/smbprint:
Vous pouvez egalement utiliser le programme smbclient pour
soumettre un fichier directement a un service d'impression SMB sans
impliquer lpd. Lisez la documentation de tous ces programmes pour
plus d'information.
1122..33.. VVeerrss uunnee iimmpprriimmaannttee NNeettWWaarree
La suite logicielle ncpfs contient un utilitaire appele nprint
qui fournit les memes fonctionnalites que smbprint pour NetWare.
Vous pouvez l'obtenir sur
ftp://sunsite.unc.edu/pub/Linux/system/filesystems/ncpfs/. Avec
ncpfs vous pouvez monter des volumes du serveur NetWare sous
Linux. Vous pouvez egalement soumettre des travaux d'impression
vers NetWare ou mettre des travaux d'impression de NetWare en
file sur votre systeme Linux. Vous devez disposer d'un noyaux
1.2.x ou 1.3.54 et ulterieur. ncpfs NNEE fonctionne PPAASS avec un
noyau 1.3.x (x < 54).
Pour que nprint fonctionne via lpd, vous devez ecrire un shell-
script pour diriger stdin sur l'imprimante NetWare. Vous
l'installerez comme un filtre (if) d'une file d'impression
lpd. Vous obtiendrez :
sub2|remote-NWprinter:\
:lp=/dev/null:sh:\
:sd=/var/spool/lpd/sub2:\
:if=/var/spool/lpd/nprint-script:
le script nprint-script ressemble a quelque chose comme :
#! /bin/sh
# Essayez en premier le compte invite (guest)sans mot de passe!
/usr/local/bin/nprint -S net -U name -P passwd -q printq-name -
1122..44.. VVeerrss uunnee iimmpprriimmaannttee EEtthheerrTTaallkk
Le paquetage logiciel netatalk contient l'equivalent de nprint
et smbclient. Referez-vous au Netatalk-HOWTO dans
lequel est bien decrite la procedure d'impression vers et
depuis un reseau _A_p_p_l_e.
1122..55.. VVeerrss uunnee iimmpprriimmaannttee HHPP oouu aauuttrree iimmpprriimmaannttee EEtthheerrnneett
Certaines imprimantes (HP et autres) sont fournies avec une
interface Ethernet que vous pouvez directement adresser pour
soumettre vos travaux d'impression. Conformez-vous au manuel
du constructeur. En general, ces imprimantes font ``tourner''
un lpd et fournissent une ou plusieurs files vers lesquelles vous
pouvez imprimer. Une imprimante HP, par exemple, pourra fonctionner
avec une entree printcap telle que:
lj-5|remote-hplj:\
:lp=/dev/null:sh:\
:sd=/var/spool/lpd/lj-5:\
:rm=printer.name.com:rp=raw:
Les imprimantes LaserJet HP avec une interface JetDirect
ont en general deux files incorporees; l'une ``raw'' accepte le PCL
(et peut-etre le PostScript), l'autre ``text'' accepte l'ascii pur
(et s'arrange pour resoudre d'elle-meme les problemes
d'effets d'escalier).
Dans un environnement dans lequel plusieurs imprimantes ne
supportent pas le _P_o_s_t_S_c_r_i_p_t, il peut etre bon de configurer un
serveur d'impression dedie vers lequel toutes les machines enverront
leurs travaux et sur lequel GhostScript tournera.
1122..66.. VVeerrss dd''aanncciieennnneess HHPP
Certaines anciennes imprimantes HP ne supportent qu'un protocole mal
foutu s'appuyant sur des connexions TCP, notamment les
premiers modeles a base de cartes JetDirect (et quelques JetDirectEx).
Pour imprimer vers de telles imprimantes, vous devez ouvrir une
connexion TCP vers un port dedie (9100) et envoyer votre
impression vers cette connexion. Voici le script Perl correspondant :
#!/usr/bin/perl
# Thanks to Dan McLaughlin for writing the original version of this
# script (And to Jim W. Jones for sitting next to Dan when writing me
# for help ;)
$fileName = @ARGV[0];
open(IN,"$fileName") || die "Can't open file $fileName";
$dpi300 = "\x1B*t300R";
$dosCr = "\x1B&k3G";
$ends = "\x0A";
$port = 9100 unless $port;
$them = "bach.sr.hp.com" unless $them;
$AF_INET = 2;
$SOCK_STREAM = 1;
$SIG{'INT'} = 'dokill';
$sockaddr = 'S n a4 x8';
chop($hostname = `hostname`);
($name,$aliases,$proto) = getprotobyname('tcp');
($name,$aliases,$port) = getservbyname($port,'tcp')
unless $port =~ /^\d+$/;;
($name,$aliases,$type,$len,$thisaddr) =
gethostbyname($hostname);
($name,$aliases,$type,$len,$thataddr) = gethostbyname($them);
$this = pack($sockaddr, $AF_INET, 0, $thisaddr);
$that = pack($sockaddr, $AF_INET, $port, $thataddr);
if (socket(S, $AF_INET, $SOCK_STREAM, $proto)) {
# print "socket ok\n";
}
else {
die $!;
}
# Give the socket an address.
if (bind(S, $this)) {
# print "bind ok\n";
}
else {
die $!;
}
# Call up the server.
if (connect(S,$that)) {
# print "connect ok\n";
}
else {
die $!;
}
# Set socket to be command buffered.
select(S); $| = 1; select(STDOUT);
# print S "@PJL ECHO Hi $hostname! $ends";
# print S "@PJL OPMSG DISPLAY=\"Job $whoami\" $ends";
# print S $dpi300;
# Avoid deadlock by forking.
if($child = fork) {
print S $dosCr;
print S $TimesNewR;
while (<IN>) {
print S;
}
sleep 3;
do dokill();
} else {
while(<S>) {
print;
}
}
sub dokill {
kill 9,$child if $child;
}
1122..77.. LLeess ffiillttrreess dd''eennttrreeee ppoouurr ddeess iimmpprriimmaanntteess ddiissttaanntteess
Une des bizarreries de lpd est que le filtre d'entree (if)
n'est pas execute pour des imprimantes distantes. Si vous
devez absolument passer par un filtre, il vous faudra utiliser
deux files, la premiere redirigeant vers la deuxieme.
Par exemple :
lj-5:remote-hplj:\
:lp=/dev/null:sh:\
:sd=/var/spool/lpd/lj-5:\
:if=/usr/lib/lpd/filter-lj-5:
lj-5-remote:lp=/dev/null:sh:rm=printer.name.com:\
:rp=raw:sd=/var/spool/lpd/lj-5-raw:
et le filtre filter-lj-5 (exemple):
#!/bin/sh
gs <options> -q -dSAFER -sOutputFile=- - | \
lpr -Plj-5-remote -U$5
L'option -U ne fonctionne que si lpr est lance en tant que demon.
Elle positionne correctement le nom du soumissionnaire du
travail dans la deuxieme queue. Il serait d'ailleurs mieux
d'utiliser une methode plus sure pour recuperer ce nom car ce
n'est pas toujours le 5eme parametre.
1122..88.. IImmpprriimmeerr ddeeppuuiiss WWiinnddoowwss
L'impression depuis un client Windows vers un serveur Unix est
directement supporte par SMB en utilisant le paquetage SAMBA (qui
supporte egalement le partage de fichiers du systeme de fichiers
Linux vers les clients Windows).
Samba est fourni avec une documentation complete. Vous pouvez soit
installer un filtre magique sur Linux et imprimer du _P_o_s_t_S_c_r_i_p_t soit
installer un pilote d'imprimante specifique sous Windows et
decrire une file sans filtre. En s'appuyant sur les pilotes
Windows, vous pourrez obtenir de meilleurs resultats, mais c'est un
peu plus complique a administrer si vous avez plusieurs stations
sous Windows. Donc essayez d'abord la premiere solution.
1122..99.. DDeeppuuiiss NNeettwwaarree
Il y a des services NetWare disponibles pour Linux, mais je n'ai
aucune idee si vous pouvez offrir des services d'impression
depuis des client Netware. Des informations sont les bienvenues.
1122..1100.. DDeeppuuiiss uunn AAppppllee
Netatalk permet d'imprimer depuis une station Apple sur EtherTalk.
Voir le Netatalk HOWTO (
http://thehamptons.com/anders/netatalk) pour
de plus amples renseignements.
1122..1111.. IImmpprriimmeerr vveerrss uunn ffaaxx
1122..1111..11.. UUttiilliisseerr uunn mmooddeemm//ffaaxx
Si vous disposez d'un modem/fax, vous pouvez configurer
votre systeme pour envoyer ou recevoir des fax aux
formats _P_o_s_t_S_c_r_i_p_t, dvi, ascii, etc... Vous pourrez meme faire en
sorte que votre courrier electronique soit faxe!
Les modems/Fax supportent les commandes de classe 1 ou 2. Les
modems de classe 1 ont un sous-ensemble de fonctionnalites d'un fax
disons traditionnel (donc, le logiciel doit faire le reste... et le
cout de traitement est parfois critique!)
La classe 1 correspond au standard EIA 578. Les modems de
classe 2 repondent au sandard EIA 592. Vous trouverez dans la
documentation de votre modem a quelle classe il appartient. Ne
confondez pas classe et groupe. Le groupe est generalement le groupe
III.
Les logiciels de fax tournant sous Linux doivent savoir convertir
les donnees recues en un format compatible avec le groupe III pour
la transmission. Comme d'habitude _G_h_o_s_t_s_c_r_i_p_t sait faire ! Le
pilote tiffg3 genere des messages fax encodes au format g3/tiff. Vous
devrez compiler et integrer le pilote si ce n'est deja fait.
Un des logiciels les plus complets sur le sujet, HylaFax est
disponible sur :
ftp.sgi.com:/sgi/fax/?????.src.tar.Z
Il supporte toutes sortes de choses comme les multiples modems
et la diffusion.
mgetty + sendfax est un couple de logiciels, contenant un
getty pour Linux et les modems fax ainsi qu'un logiciel d'envoi de fax
assez simple. Ce paquetage se trouve a:
sunsite.unc.edu:/pub/Linux/system/serial/getty/mgetty+sendfax-1.0.0.tar.gz
Enfin, efax merite d'etre mentionne. C'est un excellent choix
pour Linux. Il supporte les classes 1 et 2.
sunsite.unc.edu:/pub/Linux/apps/serialcomm/fax/efax08a.tar.gz
(Repertoire dans lequel on trouvera egalement
vfax10.tar.z, qfax1.3.tar.gz,
xfax.v1.07s.tar.gz)
1122..1111..22.. UUttiilliisseerr llee sseerrvviiccee dd''iimmpprreessssiioonn ddiissttaanntt
C'est un service experimental vous permettant d'envoyer un courrier
electronique que vous souhaitez imprimer sur un fax distant. Des
formats tels que PostScript sont supportes. Bien que la couverture
geographique de ce service soit tres faible, il est tres
prometteur. Pour plus d'information, referez-
vous au site Web ``Remote Printing WWW Site''
(
http://www.tpc.int/).
1133.. LLeess llooggiicciieellss qquuii ppeerrmmeetttteenntt ddee rreeaalliisseerr ddee bbeelllleess iimmpprreessssiioonnss
Linux sait faire tourner un grand nombre de binaires avec plus ou
moins de reussite: Linux/x86, Linux/Alpha, Linux/Sparc, iBCS,
Windows (Un jour, avec Wine), Mac/68k (avec Executor) et Java.
WordPerfect, traitement de texte commercial tourne bien avec
l'emulation iBCS. La suite Corel Office en Java est egalement
prometteuse...)
En ce qui concerne Linux, les choix sont limites aux logiciels Unix
classiques:
1133..11.. LLeess llaannggaaggeess aa bbaalliisseess
La plupart des langages balises sont bien adaptes aux projets
consequents ou repetitifs pour lesquels vous souhaitez que
l'ordinateur controle la mise en forme pour un resultat homogene.
Vouloir ajouter un bel effet dans un tel langage choquera
certainement.
1133..11..11.. nnrrooffff
C'est l'un des plus anciens langages balises sous Unix. Les pages de
manuel en ligne sont l'exemple le plus connu de pages formattees en
macros nroff; beaucoup de gens ne jurent que par lui... mais sa
syntaxe est quand meme plus compliquee que necessaire; ce n'est
certainement pas le bon choix pour les nouveaux projets.
Il est interessant de savoir que vous pouvez imprimer une page de
manuel directement en PostScript avec groff. La syntaxe est la
suivante: man -t truc | lpr. Le resultat en vaut vraiment la peine.
1133..11..22.. TTeeXX
TeX (et le paquetage de macros LaTeX) est l'un des langages balises
le plus repandu sous Unix. Les travaux techniques sont souvent
rediges en LaTeX parce qu'il simplifie grandement la mise en page et
il est l'un des rares logiciels a traiter correctement et
puissamment les fomules mathematiques. Le format de sortie de TeX
est dvi, et peut etre converti en _P_o_s_t_S_c_r_i_p_t ou PCL (HP) a
l'aide du programme dvips ou dvilj.
1133..11..33.. SSGGMMLL
Il y a au moins un interpreteur de SGML gratuit sous Unix et Linux;
il est la base du systeme de documentation LinuxDoc-SGML. Il
supporte bien entendu d'autres types de documents.
1133..11..44.. HHTTMMLL
Bien connu, il permet d'ecrire des documents simples.
1133..22.. TTrraaiitteemmeennttss ddee tteexxtteess WWYYSSIIWWYYGG
Ca y est! Linux et Unix ne manquent plus de tels traitement de
texte. Il existe plusieurs suites logicielles dont une disponible
gratuitement pour une utilisation personnelle: _S_t_a_r_O_f_f_i_c_e.
1133..22..11.. SSttaarrOOffffiiccee
Une compagnie allemande distribue StarOffice pour Linux. On peut
trouver une version libre de droits sur les serveurs ftp classiques.
Cette version est limitee a un usage personnel. Cette suite
logicielle est tres complete; vous trouverez tout ce dont vous
reviez. Il existe d'ailleurs un mini-HOWTO decrivant ou la
trouver et comment l'lnstaller. La plupart des imprimantes sont
reconnues.
1133..22..22.. LLyyXX
LyX est une interface pour LaTeX assez prometteuse. Rendez-vous sur
la page Web de Lyx a
http://www-
pu.informatik.uni-tuebingen.de/users/ettrich/ pour de plus amples
renseignements.
1133..22..33.. LL''iinntteerrffaaccee uuttiilliissaatteeuurr ''AAnnddrreeww''
Cette interface comprend un editeur WYSIWYG appele ez comportant la
plupart des fonctionnalites de base d'un traitement de texte: HTML,
et MIME pour courrier et forums de discussions (niouzes, si vous
preferez).
1133..22..44.. OOffffrreess ccoommmmeerrcciiaalleess
Caldera et Red Hat vendent des paquetages logiciels
comprenant les applications principales, a savoir un traitement de
texte et un tableur. Caldera vend egalement (a verifier) WABI,
l'emulation Windows de Sun qui permet de faire tourner les
applications de Microsoft bien connues.
Pour plus d'information, consultez les sites de
Caldera (
http://www.caldera.com) et de Red
Hat (
http://www.redhat.com).
D'autres vendeurs peuvent m'envoyer un courrier descriptif de leur
offre.
1144.. LLooggiicciieellss ddee pprree--vviissuuaalliissaattiioonn
Tout ce que vous imprimez peut etre egalement visualise a l'ecran.
Ceci permet dans bien des cas d'economiser du papier.
1144..11.. PPoossttSSccrriipptt
GhostScript possede un pilote X11 utilise par Ghostview
(
http://www.picante.com/~gtaylor/pht/man/ghostview.html). La
derniere version de ce logiciel devrait permettre egalement la
visualisation de fichiers au format PDF.
1144..22.. TTeeXX ddvvii
les fichiers TeX dvi (DeVice Independent - independant du
peripherique) peuvent etre visualises sous X11 a
l'aide de xdvi
(
http://www.picante.com/~gtaylor/pht/man/xdvi.html). Les versions
recentes de xdvi appellent ghostscript pour le rendu de
specificites _P_o_s_t_S_c_r_i_p_t.
Un pilote VT100 (dgvt) existe egalement. Tmview fonctionne sous
Linux avec svgalib, si cela vous suffit.
1144..33.. AAddoobbee PPDDFF
_A_c_r_o_b_a_t _R_e_a_d_e_r d'Adobe est disponible pour Linux. Vous pouvez le
charger depuis
http://www.adobe.com. Vous pouvez egalement utiliser
xpdf, un logiciel gratuit fournit avec les sources. _G_h_o_s_t_S_c_r_i_p_t,
devrait, comme je l'ai dit plus haut, supporter le format pdf.
1155.. LLeess iimmpprriimmaanntteess sseerriiee
Le demon lpd fournit cinq attributs que vous pouvez positionner dans
/etc/printcap afin de controler le port serie sur lequel se trouve
votre imprimante.
br
(numerique) definit le taux de transfert en bauds (appel a ioctl(2))
fc
(num) efface des indicateurs (sgtty.h)
fs
(num) positionne des indicateurs (inverse de `fc')
xc
xs
Pour definir la vitesse du port, la syntaxe est
evidente. Exemple: br .Pp
Les autres parametres a positionner correspondent a un ensemble de
bits, que l'on pourra soit positionner, soit mettre a 0. Pour
effacer des bits, on utilisera les parametres fc et xc, pour les
positionner, fs et xs.
Faites bien attention aux bits que vous selectionnez. Mais au fait
que sont-ils ? Souvenez-vous..., la commande stty. Elle indique de
nombreux parametres caracterisant un tty. La commande stty -a
affiche en clair les parametres du tty, certains d'entre-eux etant
precedes d'un tiret s'ils sont invalides et sans tiret s'ils sont
valides. La commande stty peut etre appliques au port serie
(voir exemple). Ce sont certains de ces parametres (des drapeaux,
des flags, donc des bits) que l'on va manipuler.
# stty -a < /dev/ttyS2
speed 9600 baud; rows 0; columns 0; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>;
eol2 = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W;
lnext = ^V; min = 1; time = 0;
-parenb -parodd cs8 hupcl -cstopb cread -clocal -crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr
-igncr -icrnl ixon -ixoff -iuclc -ixany -imaxbel
-opost -olcuc -ocrnl -onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0
bs0 vt0 ff0
-isig -icanon -iexten -echo -echoe -echok -echonl -noflsh -xcase -tostop
-echoprt -echoctl -echoke
Note: utilisez toujours stty de cette facon (stty <
/dev/ttyS?); cette command utilise en effet l'entree standard).
Vous pouvez utiliser cette commande pour configurer le port de facon a
obtenir une impression correcte. Par exemple, les
differences que l'on peut noter entre le stty ci-dessus et
l'initialisation du port au demarrage de ma machine reside dans
les informations -clocal, -crtscts et ixon. (La configuration de
votre port pourra tres bien etre differente selon la maniere
dont votre imprimante gere le controle de flux).
Votre port etant bien configure, faites : cat fichier > /dev/ttyS?
(? est le numero de votre port) pour imprimer un fichier.
Imprimez par exemple le
fichier /usr/src/linux/include/asm-i386/termbits.h. Vous
y decouvrirez un tas de definitions de constantes et de
structures. Nous allons voir quelles valeurs definies dans ce
fichier vont nous servir pour configurer le port, non plus avec stty,
mais avec les parametres fc, xc, fs et xs du fichier printcap.
Regardez la section commencant par :
/* c_cflag bit meaning */
#define CBAUD 0010017
Elle decrit justement les bits manipulables a l'aide de fc et fs dont
on parlait. On y voit les constantes des vitesses de modulation en
baud, puis des lignes qui nous interessent particulierement : ce
sont les memes parametres que dans la commande stty. Je
sens que vous voyez ou on veut en venir. stty n'est qu'un interface
necessaire au positionnement (ou effacement) de bits.
Vous savez maintenant que chaque parametre affiche par stty
correspond a un bit, et qui ont la valeur 0 lorsqu'il y a un tiret
devant. Notez alors les bits a effacer (ce sera fait avec la
parametre fc) et ceux a positionner (parametre fs). Exemple: `fcfc
semble surcharger le parametre br, donc prenez garde a les
positionner correctement).
Ensuite occupez-vous des bits a positionner. Par exemple s'il faut
positionner les bits cs8, hupcl et cread, regardez les
constantes CS8 (0000060), HUPCL (0002000) et CREAD
(0000200). Pensez a la vitesse de modulation qu'il faut aussi
definir, dans mon cas, ce sera B9600 (0000015). Tous ces bits
ensemble font `0002275'. Indiquez cette valeur au parametre
fs.
Effectuez les meme reglages avec la section suivante
intitulee
/* c_lflag bits */
Dans mon cas je n'ai rien a positionner, j'ai donc simplement a
fournir la valeur xcvotre fichier printcap correctement defini,
essayez d'imprimer. Si quelque chose ne va pas, continuez a lire les
paragraphes suivants.
Souvenez-vous de toujours commencer par les bits que vous souhaitez
voir a 0 (fc et xc), puis de definir seulement apres des
bits a positionner (fs et xs).
La commande cat fonctionne pour le port serie, mais pas lpd
La mise en place de lpd n'est pas traitee ici, mais sachez que si
vous avez des problemes avec la configuration du port
serie, vous pouvez empecher lpd de le configurer en considerant
votre imprimante comme ne presentant pas une interface normale.
Lisez egalement a ce propos le chapitre suivant.
Donnez a votre imprimante le peripherique /dev/null1
(mknod /dev/null1 c 1 3). N'utilisez pas /dev/null, pour ne pas
qu'il soit ouvert de maniere exclusive. Enlevez les parametres
de vitesse et de positionnement des bits du fichier printcap.
Creez un shell-script comme ci-dessous :
#!/bin/sh
echo if: $* >> /var/spool/lpd/results
# /dev/lp est un lien vers /dev/ttyS2 auquel est reliee l'imprimante
exec votre_vieux_filtre $* > /dev/lp
#!/bin/sh
echo if: $* >> /var/spool/lpd/results
cat > /dev/lp
# la commande ``echo -ne'' suppose que /bin/sh correspond a bash
echo -en \\f > /dev/lp
Donnez-lui les droits de lecture/ecriture pour tout le
monde. Essayez-le: /usr/lib/lpd/if <FICHIER.
Definissez un filtre d'entree dans votre fichier printcap
pour appeler ce script. :if=/usr/lib/lpd/if:.
Utilisez la commande stty pour configurer le port
correctement. Essayez d'imprimer. Vous devriez pouvoir determiner
si le(s) fichier(s) sont bien mis dans le repertoire de spool. Cela
devrait imprimer, si votre essai manuel du script precedent a
fonctionne. Bien entendu, le mieux serait de pouvoir se passer du
script d'entree et donc du parametre if.
Supposons donc que la methode precedente a fonctionne, et
que vous pensez avoir correctement configure votre fichier
printcap. Executez la commande stty -a </dev/ttyS?. Si
certains parametres ne sont pas corrects, verifiez les constantes
du fichier termbits.h. Si la configuration est incorrecte,
malgre tous vos efforts de verification, n'hesitez pas a
installer un demon recent.
1155..11.. IImmpprriimmaanntteess aanncciieennnneess eett ccaarraacctteerreess ppeerrdduuss
Certaines anciennes imprimantes series ont des petits tampons
memoire et gerent mal le controle de flux. Supprimer le FIFO du
port serie (16550) avec setserial (faites croire a setserial que
c'est un port 8250 et ca marchera).
1166.. CCoommpplleemmeennttss eett rreeggllaaggeess
Si votre imprimante est _P_o_s_t_S_c_r_i_p_t, elle peut ne pas etre
capable de traiter du texte pur. Si tel est le cas, vous devrez
mettre en place un filtre pour transformer le texte en _P_o_s_t_S_c_r_i_p_t. Un
excellent freeware (logiciel libre de tout droit de distribution et
d'utilisation) appele nenscript realise cela tres bien. Si vous ne
mettez pas en place un tel filtre, vous devez vous assurer par
d'autres moyens que l'imprimante ne recoit bien que du _P_o_s_t_S_c_r_i_p_t.
Vous pouvez egalement definir dans vos fichiers de login
(.profile, par exemple) ou celui par defaut, une variable
d'environnement PRINTER definissant l'imprimante a utiliser.
Exemple:
export PRINTER=lpr0
Ceci evite d'avoir a specifier -Plpr0 a chaque fois.
Il est possible de ``reutiliser'' une entree printcap. Si vous
declarez votre propre machine comme machine hote distante, et
une autre imprimante comme imprimante distante, vous pouvez
rediriger les donnees a imprimer de l'une vers l'autre.
Souvenez-vous que si vous utilisez cette technique, les donnees
passeront par chaque filtre de la chaine et seront mises
successivement dans chaque spool.
Bien que vous puissiez specifier pour une imprimante autant d'alias
que vous le souhaitez, il semble que pour la meilleure
utilisation, les deux premiers doivent etre identiques et doivent
correspondre au nom reel. Certains programmes n'utiliseront
que ces deux entrees. La commande lpc indiquera seulement le
premier alias, alors que les commandes lpr, lprm et lpq
comprennent tous les alias.
Plutot que de specifier une taille maximum de fichier pour
l'impression, vous prefereriez sans doute que les fichiers du spool
ne puissent remplir votre disque, meme temporairement. Pour ce faire,
creez un fichier appele minfree dans chaque repertoire de
spool, contenant, sous forme d'un nombre de blocs (1 Ko pour
Linux), la quantite minimum d'espace disque devant rester pour que
les donnees puissent etre acceptees dans le spool. Vous creerez
un fichier reel dans le repertoire principal de
spool et, dans chaque sous-repertoire, un lien symbolique
vers ce fichier.
1177.. RReessuummee
Voici un guide de configuration etape par etape pour une
imprimante nommee /dev/lp0. Vous pouvez l'etendre a votre guise.
Pour faire ce qui suit, vous devez etre root. (NDT: L'auteur a tout
installe dans /usr/spool/lpd. J'ai prefere modifier legerement
cette configuration en definissant /usr/spool/lp/lpr0 et
/usr/spool/lpd, comme dans la plupart des distributions)
+o Verifiez les droits d'acces et l'emplacement de lpr, lprm,
lpq, lpc et lpd. Voir a ce propos: Les programmes importants.
+o Creez le repertoire de spool pour votre imprimante,
appelee dans notre exemple lpr0:
mkdir /usr/spool/lp /usr/spool/lp/lpr0
chowm root.lp /usr/spool/lp /usr/spool/lp/lpr0
chmod ug=rwx,o=rx /usr/spool/lp /usr/spool/lp/lpr0
+o Creez un repertoire permettant au demon d'y mettre son propre
fichier de verrouillage lpd.lock:
mkdir /usr/spool/lpd
chowm root.lp /usr/spool/lpd
chmod ug=rwx,o=rx /usr/spool/lpd
+o Dans les repertoires /usr/spool/lp/lpr0 et
/usr/spool/lpd, creez les fichier necessaires, avec les bons
droits (Cette manipulation n'est pas necessaire avec les
versions recentes du gestionnaire d'impression):
cd /usr/spool/lp/lpr0
touch .seq errs status lock
chown root.lp .seq errs status lock
chmod ug=rw,o=r errs status
chmod u=rw,go=r lock
chmod u=rw,g=r,o=x .seq
cd /usr/spool/lpd
touch .seq errs status lock
chown root.lp .seq errs status lock
chmod ug=rw,o=r errs status
chmod u=rw,go=r lock
chmod u=rw,g=r,o=x .seq
+o Creez le shell-script filtre_entree dans le
repertoire /usr/spool/lp/lpr0. Utilisez le filtre decrit
precedemment. Donnez-lui les bons droits.
cd /usr/spool/lp/lpr0
chmod ug=rwx,o=rx filtre_entree
+o Creez le fichier /etc/printcap, s'il n'existe pas. Enlevez les
entrees qu'il contient et ajoutez une entree de test decrite
precedemment. Donnez-lui les droits -rw-r--r--.
+o Editez le fichier /etc/rc.d/rc.local ou rc.multi. Ajoutez la ligne
/usr/sbin/lpd a la fin. Cela lancera le demon au boot.
Vous pouvez aussi le lancer a la main :
root# /usr/sbin/lpd
+o Effectuez un test d'impression :
ls -l | lpr -Plpr0
+o Regardez dans /tmp et verifiez la presence du fichier
testlp.out. Il devrait contenir le listing du repertoire
dans lequel vous etiez.
+o Editez /etc/printcap. Dupliquez l'entree lpr0. Vous avez
alors 2 entrees identiques. Dans la premiere entree,
changez, sur la premiere ligne uniquement, les occurrences de
lpr0 par testlp. Dans la seconde entree, changez /dev/null par
le peripherique reel, par exemple /dev/lp0. Dans la seconde
entree, enlevez le champ if completement.
+o Rebootez le systeme ou tuez le demon d'impression et
relancez-le, afin qu'il reprenne en compte le
fichier /etc/printcap modifie.
+o Refaites un test d'impression - Allumez votre imprimante. Cela
devrait imprimer!
ls -l | lpr -Plpr0
1188.. PPrroobblleemmeess aavveecc llaa LLaasseerrJJeett 55MM
1188..11.. PPoossttSSccrriipptt
Cette imprimante peut poser des problemes d'impression en
PostScript. Si vous constatez, apres avoir imprime un document
PostScript, qu'elle ne sort plus les documents suivants et qu'elle
affiche ``DATA RECEIVED'' en permanence, suivez les conseils qui
suivent. Merci a <
[email protected]>.
+o l'imprimante est en configuration d'usine avec le flag
d'impression des erreurs postscript valide.
+o Le fichier printcap est tres simple:
# /etc/printcap
#
# This file can be edited with the printtool in the control-panel.
laser5M|lp:\
:lp=/dev/lp2:\
:sh:\
:sd=/var/spool/lpd/laser5M:\
:lf=/var/spool/lpd/laser5M/erreurs:\
:if=/var/spool/lpd/laser5M/filter_court:
+o Le filtre utilise (filter_court) est donne ci-dessous. Il
n'accepte que les fichiers _a_s_c_i_i, _P_o_s_t_S_c_r_i_p_t et _P_o_s_t_S_c_r_i_p_t
_c_o_m_p_r_e_s_s_e. Ce qui est interessant, ce sont les chaines
d'initialisation en PCL. En gros:
\033%-12345X passage en mode PCL (d'apres l'ingenieur de MDS)
\033E reinitialisation de l'imprimante les \n
semblent indispensables dans le filtre.
Avec echo -ne, Esc c'est 033 en octal (27 en decimal )
#!/bin/sh
#
# Filtre d'impression gerant l'ascii, le postscript et le postscript
# compresse pour une laserjet 5M. A declarer comme filtre "if" dans
# /etc/printcap.
# Reinitialise l'imprimante entre chaque impression postscript pour
# eviter les erreurs sur timeout.
#
# Version 0.1 P. BEGOU 8/97 (
[email protected])
#
# recuperation des donnees dans un fichier temporaire
#
FILE=/tmp/laser5M.$$
cat - > ${FILE}
#
# Scrutation du type de fichier
#
filetype=`file $FILE| cut -d":" -f2`
case $filetype in
*PostScript*)
(echo -ne "\033%-12345X\n"; cat ${FILE}; echo -ne "\033%-12345X\033E\033%-12345X\n")
echo " $FILE postscript" >&2
;;
*text*|*script*)
(echo -ne "\033%-12345X\n"; /usr/bin/nenscript -s -2rG -p- ${FILE};
echo -ne "\033%-12345X\033E\033%-12345X\n")
echo " $FILE texte" >&2
;;
*compress*)
# verifions qu'il s'agit bien de postscript.
resu=`zcat ${FILE} |head -1|grep "^%!"|wc -l`
if [ ${resu} -eq 1 ]
then
(echo -ne "\033%-12345X\n"; zcat ${FILE}; echo -ne "\033%-12345X\033E\033%-12345X\n")
echo " $FILE compresse" >&2
else
echo " $FILE compresse non reconnu" >&2
fi
;;
*)
echo " $FILE non reconnu" >&2
;;
esac
#
# On repond Ok, tout s'est bien passe.
#
rm ${FILE}
exit 0
1188..22.. RReeccttoo--vveerrssoo
Voici comment configurer, par logiciel, le passage en mode recto-
seulement ou recto-verso aussi bien pour de l'ascii que du PostScript.
Il suffit d'inserer apres la premiere ligne...
%!Ado...
%%BeginFeature: *Duplex DuplexNoTumble <<Duplex true /Tumble false>>
setpagedevice %%EndFeature
ou, pour valider le recto seul:
%%BeginFeature: *Duplex None <<Duplex false>> setpagedevice %%EndFea-
ture
1199.. IInnffoorrmmaattiioonnss ccoonncceerrnnaanntt ccee ddooccuummeenntt
Sauf changements, les documents HOWTO sont places sous copyright par
leurs auteurs respectifs. Les documents Linux HOWTO peuvent etre
reproduits et distribues en tout ou partie, par quelque moyen
physique que ce soit, sans l'autorisation de l'auteur. Les
traductions et travaux derives sont egalement permis sans
autorisation expresse. La distribution a titre commercial est
permise et meme encouragee; cependant, l'auteur souhaiterait en etre
averti.
En bref, nous souhaitons que l'information contenue dans ces document
soit repandue le plus largement possible. Cependant, nous
souhaitons maintenir le copyright sur ce document, et souhaiterions
etre avertis de toute re-distribution. Si vous avez des questions a
ce propos, contactez Greg Hankins, le nouveau coordinateur des
documents Linux HOWTO a l'adresse <
[email protected]>. Son
representant francais est Eric Dumas
<
[email protected],
[email protected]>.