Le Linux Printing Usage HOWTO

Mark Komarinski, markk@auratek.com

v1.2.1, 24 Mars 1997
Ce document est une aide à l'impression sous Linux et fournissant des informations pratiques sur des sujets de base. Toute remarque ou commentaire concernant ce HOWTO ou sa traduction peuvent être envoyées à la personne concernée.

1. Introduction

Ce document décrit comment utiliser le système de gestion d'impression fourni avec le système d'exploitation Linux. Ce HOWTO vient en complément du HOWTO Comment imprimer sous Linux (Linux Printing Setup HOWTO) qui traite de l'installation et de la configuration du système d'impression sous Linux. Le contenu de ce HOWTO devrait être d'une égale utilité pour toutes les déclinaisons du système d'exploitation BSD en plus du système d'exploitation Linux.

1.1 Historique du Printing HOWTO

Note de Mark Komarinski markk@auratek.com :

Je voudrais remercier Matt Foster pour son imposant travail de réécriture de ce HOWTO. Je conserve son style et je procède à des ajouts pour garder le tout à jour.

Note de Matt Foster mwf@engr.uark.edu :

Cette version du Linux Printing HOWTO est une complète réécriture de l'original écrit par Grant Taylor grant@god.tufts.edu et Brian McCauley B.A.McCauley@bham.ac.uk. J'ai essayé de conserver le contenu présent dans le HOWTO de Grant et de Brian mais j'ai fortement modifié le style de présentation et la profondeur des notions abordées. Je trouve que cela rend le HOWTO plus complet et plus facile à lire. J'espère seulement que vous en serez d'accord.

1.2 Historique des versions

1.3 Copyrights et Marques déposées

Certains des noms mentionnés dans ce HOWTO font l'objet de copyrights et/ou de marques déposées par certaines personnes et/ou compagnies. Ces noms apparaissent entièrement en majuscules ou débutent par une majuscule dans ce HOWTO.

(c) 1995 Matt Foster (mwf@engr.uark.edu)

(c) 1996-1997 Mark F. Komarinski (markk@auratek.com)

Toutes les traductions, les travaux dérivés ou de compilation incorporant n'importe lequel des documents HOWTO Linux doivent se trouver sous le coup de ce copyright.

Ainsi, vous ne pouvez pas produire un travail dérivé d'un HOWTO et imposer des restrictions additionnelles quant à sa diffusion. Des exceptions à ces règles peuvent être accordées sous certaines conditions ; veuillez contacter le coordinateur des HOWTO Linux à l'adresse donnée plus bas.

En résumé, nous voulons promouvoir la dissémination de ces informations à travers autant de canaux que possible. Cependant, nous souhaitons tout de même conserver le copyright sur les documents HOWTO et souhaiterions être mis au courant de tous les projets de redistribution des HOWTO.

Si vous avez des questions, veuillez contacter Greg Hankins, le coordinateur des HOWTO Linux, à gregh@sunsite.unc.edu. Vous pouvez utiliser finger sur cette adresse pour obtenir un numéro de téléphone et d'autres informations pour la prise de contact.

1.4 Télécharger les HOWTOs Linux sur l'impression

Dans le cas où vous voudriez imprimer une version de ce HOWTO, je vous recommande de télécharger la version PostScript. Elle est formatée d'une manière qui la rend esthétiquement plus attrayante et plus facile à lire. Vous pouvez obtenir la version PostScript depuis l'un des nombreux sites de distribution Linux tel que SunSITE (ou ftp.ibp.fr en France NdT).

1.5 Comment nous contacter

Les questions, commentaires ou corrections concernant ce HOWTO peuvent être envoyés à markk@auratek.com.

1.6 Remerciements

Un grand merci à tous ceux qui ont pris le temps de lire la version alpha de ce HOWTO et de me répondre avec de nombreux commentaires et suggestions dont certains pourront être reconnus dans cette version.

Je voudrais aussi remercier Matt Foster qui a effectué la réécriture originale.

2. Imprimer sous Linux

Cette section décrit comment imprimer des fichiers, examiner la file d'impression, supprimer des travaux de la file d'impression, formater des fichiers avant de les imprimer ainsi que comment configurer votre environnement d'impression.

2.1 Historique de l'impression sous Linux

Le système d'impression de Linux, le gestionnaire lp, est un portage du code source écrit par the Regents of the University of California pour la version BSD du système d'exploitation UNIX.

2.2 Imprimer un fichier en utilisant lpr

La manière la plus simple, et de loin, d'imprimer un fichier sous le système d'exploitation Linux est de l'envoyer directement sur le périphérique d'impression. Une façon de le faire est d'utiliser la commande cat. En tant qu'utilisateur root, on peut faire quelque chose du genre :


# cat thesis.txt > /dev/lp

Dans le cas présent, /dev/lp est un lien symbolique vers le périphérique d'impression réel, que ce soit une imprimante matricielle ou laser, un logiciel de mise en page ou un traceur. (Cf ln(1) pour plus d'information sur les liens symboliques.)

Pour des raisons de sécurité, seulement l'utilisateur root et les utilisateurs dans le même groupe que le démon d'impression sont autorisés à écrire directement sur l'imprimante. C'est pourquoi des commandes telles que lpr, lprm et lpq doivent être utilisées pour accéder à l'imprimante.

De ce fait, les utilisateurs doivent utiliser lpr pour imprimer un fichier. La commande lpr prend en charge tout le travail initial nécessaire à l'impression du fichier puis passe le contrôle à un autre programme, lpd, le démon d'impression. Celui-ci dit alors à l'imprimante comment imprimer le fichier.

Quand lpr est exécuté, il commence par copier le fichier spécifié vers un répertoire particulier (le répertoire spool) où le fichier demeure jusqu'à ce que lpd l'ait imprimé. Une fois que lpd est prévenu de l'existence d'un fichier à imprimer, il va produire une copie de lui-même (ce que nous programmeurs appelons forking). Cette copie imprimera alors notre fichier alors que l'original attend d'autres requêtes d'impression. Cela permet à de multiples travaux d'être intégrés à la queue au même instant.

La syntaxe de lpr(1) est très familière :


$ lpr [ options ] [ nom_du_fichier ... ]

Si un nom de fichier n'est pas spécifié, lpr attend une entrée en provenance de l'entrée standard (généralement le clavier ou le résultat d'un autre programme). Cela permet à l'utilisateur de rediriger la sortie d'une commande vers le gestionnaire d'impression. Ainsi :


$ cat thesis.txt | lpr

ou

$ pr -l60 thesis.txt | lpr

La commande lpr accepte de nombreux arguments sur la ligne de commande qui permettent à l'utilisateur de contrôler son fonctionnement. Certains de ces arguments les plus utilisés sont :

Un exemple d'utilisation de lpr pourrait être du genre :

$ lpr -#2 -sP dj thesis.txt

Cette commande créera un lien symbolique vers le fichier thesis.txt dans le répertoire spool pour l'imprimante appelée dj, où il sera traité par lpd. Il imprimera alors une seconde copie de thesis.txt.

Pour une liste de toutes les options que lpr reconnaîtra, voyez lpr(1).

2.3 Voir la file d'impression avec lpq

Pour voir le contenu de la file d'impression, utilisez la commande lpq. Employée sans arguments, elle renvoie le contenu de la file d'impression de l'imprimante par défaut.

La sortie retournée par lpq peut être utile à plus d'un titre.


$ lpq
lp is ready and printing
Rank   Owner      Job  Files                            Total Size
active mwf        31   thesis.txt                       682048 bytes

2.4 Annuler un travail d'impression en utilisant lprm

Une autre fonctionnalité utile de tout système d'impression est la possibilité d'annuler un travail qui a été préalablement envoyé dans la file. Pour ce faire, utilisez lprm.


$ lprm -

La commande ci-dessus annule tous les travaux d'impression qui appartiennent à l'utilisateur qui a employé la commande. Un travail d'impression en particulier peut être annulé en se munissant en premier lieu du numéro de travail tel que mentionné par lpq puis en donnant ce numéro à lprm. Par exemple :


$ lprm 31

annulerait le travail 31 (thesis.txt) de l'imprimante par défaut.

2.5 Contrôler le programme lpd avec lpc.

Le programme lpc(8) est utilisé pour contrôler les imprimantes que lpd dessert. Vous pouvez activer ou désactiver une imprimante ou ses files d'impression, réorganiser les travaux à l'intérieur d'une file, et obtenir un rapport d'état sur les imprimantes ou leurs files. Lpc est le plus souvent utilisé dans une configuration où de multiples imprimantes sont raccordées à la même machine.


$ lpc

La commande ci-dessus lancera le programme lpc. Par défaut, vous entrez alors en mode interactif et vous pouvez commencer à envoyer des commandes. L'autre option est d'employer une commande lpc sur la ligne de commande.


$ lpc status all

Une liste de toutes les commandes disponibles se trouve dans les pages man de lpd mais voici quelques unes des commandes majeures dont vous allez avoir besoin. Toutes les commandes où figure option acceptent soit un nom d'imprimante particulier (lp, print, etc) ou le mot-clé all qui désigne toutes les imprimantes.

2.6 Le programme printtool sous RedHat.

Juste quelques mots sur l'étonnant programme printtool de RedHat. Il semble être en mesure de faire tout ce qu'un filtre magique ferait. RedHat installe déjà la plupart des programmes nécessaires au filtrage. Voici comment j'ai configuré mon imprimante sous RH 4.0 avec une HP LJ 4L connectée à mon port parallèle.

Comme si vous remplissiez un fichier /etc/printcap à la main, vous pouvez avoir de multiples définitions d'imprimante pour chacune de vos imprimantes réelles. Une pour chaque taille de papier, pour les différentes résolutions, etc.

3. Imprimer des fichiers

Cette section de l'impression des types de fichiers que vous allez rencontrer dans une configuration Linux.

3.1 Impression des fichiers graphiques

L'impression de fichiers graphiques sur une imprimante dépend généralement du type de graphiques que vous utilisez et du type d'imprimante sur lequel vous voulez imprimer. Les imprimantes matricielles sont hors de question du fait de leurs différences de traitement des graphismes. La meilleure chose à faire dans cette situation est de voir si votre imprimante est compatible avec une Epson ou une IBM ProPrinter et d'alors convertir le fichier graphique en PostScript avant d'utiliser Ghostscript (voir la section suivante) pour l'impression du graphisme.

Si vous avez une imprimante laser, les choses sont plus simples car nombre d'entre elles sont compatibles avec PCL. Cela vous donne alors plusieurs alternatives. Certains programmes peuvent fournir une sortie directement en PCL. Si ce n'est pas le cas, des programmes tels que NetPBM peuvent convertir vers PCL. La dernière possibilité est d'utiliser ghostscript (voir section suivante).

Votre meilleure possibilité consiste à installer des packages tels que NetPBM et Ghostscript puis d'installer un filtre magique qui traitera les fichiers graphiques automagiquement.

3.2 Impression des fichiers PostScript

Imprimer des fichiers PostScript sur uen imprimante qui dispose d'un interpréteur PostScript est simple : il suffit d'utiliser lpr et l'imprimante s'occupera des détails pour vous. Pour ceux parmi nous qui ne disposent pas d'imprimantes possédant des fonctionnalités PostScript, nous devons faire appel à d'autres moyens. Heureusement, il y a des programmes disponibles à même de comprendre PostScript et de le traduire en un langage que la plupart des imprimantes comprendront. Ghostscript est probablement le plus connu des programmes de ce type.

La responsabilité de Ghostscript est de convertir toutes les descriptions d'un fichier PostScript en des commandes que l'imprimante comprendra. Pour imprimer un fichier PostScript en utilisant Ghostscript, vous pourriez faire quelque chose du genre :


$ gs -dSAFER -dNOPAUSE -sDEVICE=deskjet -sOutputFile=\|lpr thesis.ps

Remarquez que dans l'exemple ci-dessus, on envoie par le tube la sortie de Ghostscript vers la commande lpr en utilisant l'option -sOutputFile.

Ghsostview est une interface de Ghostscript pour le système X Window. Il vous permet de prévisualiser un fichier PostScript avant de l'imprimer. Ghostview et Ghostscript peuvent tous deux être téléchargés de SunSITE par exemple.

3.3 Impression des fichiers PDF

Adobe a diffusé un lecteur Acrobat pour Linux et il est disponible sur la home page d'Adobe. Son prédécesseur, xpdf, est aussi disponible. Tous deux devraient imprimer sur un périphérique PostScript.

3.4 Impression des fichiers TeX

Une des manières les plus faciles d'imprimer des fichiers TeX est de les convertir en PostScript puis de les imprimer par l'intermédiaire de Ghostscript. Pour ce faire, vous devez d'abord les covertir en DVI (pour DeVice Independent). Vous pouvez le faire avec la commande tex(1). Ensuite vous convertissez le fichier DVI en PostScript avec dvips. Tout ceci ressemblera à ce qui suit une fois tapé :


$ tex thesis.tex
$ dvips thesis.dvi

Maintenant, vous êtes prêt à imprimer le fichier PostScript résultant en suivant les indications écrites plus haut.

3.5 Impression des fichiers formatés après troff


$ groff -Tascii thesis.tr | lpr

ou, si vous préférez :

$ groff thesis.tr > thesis.ps

suivi de l'impression du fichier PostScript comme indiqué ci-dessus.

3.6 Impression des pages man


$ man man | col -b | lpr

Les pages man contiennent des données prédormatées par troff, c'est pourquoi nous devons enlever toute surbrillance ou soulignement, etc. Le programme col fait cela très bien et comme nous envoyons les données par le tube, le programme man n'utilisera pas more.

4. Divers

Cette section couvre les sujets qui n'avaient pas leur place ailleurs.

4.1 Formatage avant impression

Comme la plupart des fichiers ASCII ne sont pas formatés pour l'impression, il est utile de les formater préalablement d'une façon ou d'une autre avant de les imprimer pour de bon. On peut, par exemple, mettre un titre et des numéros de page, régler les marges, les espacements, l'indentation ou l'imprimer dans plusieurs colonnes. Une manière courante de faire cela est d'utiliser un préprocesseur d'impression tel que pr.


$ pr +4 -d -h"Ph.D. Thesis, 2nd Draft" -l60 thesis.txt | lpr

Dans l'exemple ci-dessus, pr prendrait le fichier thesis.txt, en sauterait les trois premières pages (+4), réglerait la longueur des pages à soixante lignes (-l60), introduirait un double espacement (-d) et ajouterait la phrase "Ph.D. Thesis, 2nd Draft" en haut de chaque page (-h). Lpr enverrait alors dans la file d'impression la sortie de pr. Pour plus d'informations sur pr, voir sa page man.

4.2 Les variables d'environnement PRINTER

Toutes ces commandes du système d'impression de Linux acceptent l'option -P. cette option permet à l'utilisateur de spécifier quelle imprimante utiliser pour la sortie. Si l'utilisateur ne spécifie l'imprimante à utiliser, l'imprimante par défaut sera alors utilisée comme périphérique de sortie.

Plutôt que d'avoir à spécifier l'imprimante à utiliser à chaque fois que vous imprimez, vous pouvez affecter à la variable d'environnement PRINTER le nom de l'imprimante que vous voulez utiliser. Cela se fait de différentes manières selon le shell utilisé. Ainsi pour bash :


$ PRINTER="printer_name"; export PRINTER

et pour csh, cela donne :

% setenv PRINTER "printer_name"

Ces commandes peuvent être placées dans vos scripts de connexion (.profile pour bash, .cshrc pour csh) ou tapées sur la ligne de commande. Cf bash(1) et csh(1) pour plus d'informations sur les variables d'environnement.

5. Foire Aux Questions

Q1. Comment éviter l'effet marche d'escalier ?

R1. L'effet marche d'escalier est dû à la façon dont certaines imprimantes attendent les fins de ligne. Certaines imprimantes veulent des lignes terminées par une séquence retour chariot/fin de ligne (comme sous DOS) plutôt que la séquence fin de ligne utilisée par les systèmes type UNIX. La manière la plus simple de régler ce problème est de voir si votre imprimante est en mesure de basculer d'un mode à l'autre, que ce soit par la manipulation d'un interrupteur DIP ou en envoyant une séquence d'échappement au début de chaque travail d'impression. Dans le dernier cas, vous pouvez utiliser un filtre magique voir Q2).

Une solution rapide est d'utiliser un filtre sur la ligne de commande comme dans :


$ cat thesis.txt | todos | lpr

Q2. Qu'est-ce qu'un filtre ?

R2. Un filtre est un programme qui lit l'entrée standard (stdin), traite d'une certaine manière cette entrée et écrit sur la sortie standard (stdout). Les filtres sont utilisés dans de nombreux cas tels que le traitement de textes.

Q3. Qu'est-ce qu'un filtre magique ?

R3. Un filtre magique est un filtre qui réalise un traitement en fonction du type de fichier. Par exemple, si le fichier est un fichier texte simple, il l'imprimera en utilisant les méthodes traditionnelles. Si c'est un fichier PostScript, ou d'un autre format, il l'imprimera en utilisant une autre méthode (ghostscript). Deux exemples en sont magicfilter et APSfilter. Une limitation de ce style de programme est que les programmes appropriés doivent être installés avant l'installation du filtre.

La raison en est que quand magicfilter s'installe, il recherche dans votre système des programmes spécifiques (comme ghostscript qui, s'il le trouve, lui permettra de traiter les fichier PostScript) et se construit alors sur la base du résultat de ses recherches. Pour pouvoir traiter tous les fichiers à imprimer, vous devrez probablement avoir installé l'un de ces programmes :

Q4. Qu'en est-il du Windows Printing System ? Marchera-t-il sous Linux ?

R4. Peut-être. Les imprimantes qui n'acceptent que les commandes WPS ne marcheront pas sous Linux. Les imprimantes qui acceptent les commandes WPS et d'autres commandes (comme la Canon BJC 610) fonctionneront du moment qu'elles auront été configurées en un mode autre que WPS. D'autres imprimantes, telles que certaines HP DeskJet 820Cxi/Cse, ne fonctionneront pas sous Linux. Cela dit, on peut utiliser Linux comme serveur d'impression pour des machines sous Win95 (cf Samba) puisque Win95 dispose de pilotes pour ces imprimantes.

Q5. Qu'est-ce donc que ce système de pacotille ? Je ne peux pas imprimer plus de 6 pages sans obtenir un message d'erreur "fichier trop gros" ("file too large").

R5. Une des options du fichier /etc/printcap a rapport avec la taille maximale d'un fichier d'impression. Par défaut, elle est de 1000 blocs disque (environ 500k?). Pour les fichiers PostScript ou assimilés, cela vous autorise 6 à 8 pages avec des graphismes. Assurez vous d'avoir ajouté la ligne suivante dans la définition de l'imprimante: mx=0

La principale raison de cet état de fait est d'essayer d'empêcher le remplissage du répertoire spool. Il y a une autre manière d'y remédier, en forçant lpr à créer un lien symbolique du répertoire spool vers le fichier à imprimer. Mais vous devez vous rappeler d'ajouter l'option -s à lpr à chaque fois.

6. Dépannage

Cette section détaille quelques uns des problèmes les plus communs en matière d'impression.

Si votre imprimante ne fonctionne pas:

Répondre à ces questions pourrait vous fournir une solution.

Envoyez vos suggestions pour cette rubrique à markk@auratek.com.

7. Références

Ici prennent placent les références aux documents sur le système d'impression sous Linux. J'ai essayé de garder cette rubrique aussi pointue que possible. Si vous trouvez que j'ai oublié un document d'importance, n'hésitez pas à me contacter.

Avant de poster votre question sur un newsgroup d'USENET, assurez vous des choses suivantes:

Si la réponse à l'une des questions ci-dessus est oui, réfélchissez à deux fois avant de poster votre question. Et si finalement vous la postez, assayez d'y inclure des informations pertinentes. N'écrivez pas quelque chose du genre "J'ai des problèmes avec lpr, aidez-moi." Ce type de message sera tout simplement ignoré par la majorité des personnes. Pensez également à inclure la version du noyau que vous utilisez, comment l'erreur est apparue ainsi que les éventuels messages d'erreur fournis par le système.

Pages de manuel

Newsgroups d'USENET