Vous êtes sur la page 1sur 6

Impression

révision 2

Objectifs
Comprendre les filtres et les queues d'impression ;
Savoir gérer les queues;
Connaître les outils d'impression;
Connaître les fichiers de configuration.

Points importants
Sous Linux, les logiciels d'impression évoluent. Du démon 'lpr' hérité d'Unix, en passant
par son amélioration avec 'lprng' puis l'utilisation de CUPS, la philosophie évolue ... mais
la compatibilité des commandes de base est en général assurée.
Il existe d'autres filtres que ceux des outils GNU présentés dans ce chapitre.
Ce chapitre est une (courte) introduction à ce sujet complexe.

1.1 Filtres et ghostscripts

Unix (donc Linux) imprime directement les fichiers en format texte. Pour ceux qui sont
dans un format différent, on utilise des filtres qui les transforme au format PostScript, ce
qui permet de les envoyer directement à une imprimante PostScript.
Comme toutes imprimantes ne supportent pas le langage PostScript, on utilise une
imprimante PostScript 'virtuelle', ghostscript, qui finalement traduit le postscript en
langage PCL.

La version GNU de ghostscript, gs, est une version ancienne de la version commerciale
de l'éditeur Aladdin Software.

L'utilitaire /usr/bin/gs dispose d'une base de données importante de pilotes d'impression


(la plupart des imprimantes récentes, par exemple USB, sont supportées).
Le PostScript est transformé par gs directement en PCL spécifique à ces imprimantes.
La commande gs joue un rôle central pour l'impression sous Linux.

1.2 Imprimantes et queues d'impression

Comme on l'a vu précédemment, les fichiers de type texte ne sont pas traités de la même
façon que, par exemple, les images. Si vous disposez d'une seule imprimante et que vous
l'utilisez uniquement pour imprimer du texte (e.g. mail), vous n'avez pas besoin
nécessairement d'utiliser un filtre.
Vous pouvez définir une queue d'impression directe sans filtre qui sera de ce fait plus
rapide, de même vous pouvez définir pour la même imprimante une queue sur laquelle
vous enverrez les fichiers PostScript.

Page 1/6
Les queues d'impression et les imprimantes sont déclarées dans le fichier /etc/printcap

Voici un exemple de déclaration simple d'une imprimante distante utilisant l'adresse IP


192.168.1.20 avec le nom de queue imp

imprimante du 1er :\
:sd=/var/spool/lpd/lp:\
:mx#0:\
:sh:\
:rm=192.168.1.20:\
:rp=imp:

A noter que le fichier /etc/printcap est souvent généré par les outils graphiques fournis
avec les différentes distributions Linux.

1.3 Outils d'impression

lpr

La commande /usr/bin/lpr est utilisée pour envoyer une demande d'impression à un


imprimante. C'est une version modernisée de la commande Unix lp (line print) utilisée
auparavant.
Il faut bien comprendre que l'on peut associer différentes queues d'impression à une
même imprimante.
Supposons que l'on veuille imprimer un fichier appelé 'ma_lettre', voici deux manières de
l'imprimer.

Envoyer la demande à l'imprimante par défaut

lpr ma_lettre

Envoyer la demande à l'imprimante 'imp'

lpr -Pimp ma_lettre

Voici quelques options de la commande lpr


-P<queue> : envoie la demande à la queue <queue>
-#<nombre> : imprime <nombre> copies
-o <option> : permet de passer une (ou plusieurs) option(s), comme le mode
paysage etc ...

lpq

La commande /usr/bin/lpq permet d'afficher le contenu des queues d'impression.

Page 2/6
Afficher les demandes de la queue par défaut :
lpq

Afficher les demandes de toutes les queues :


lpq -a

Afficher les demandes de la queue 'imp' :


lpq -Pimp

lprm

La commande /usr/bin/lprm permet de détruire des demandes dans les queues


d'impression.
Les autorisations de destruction par utilisateurs sont décrites dans le fichier /
etc/lpd.perms (c.f. une description plus précise plus loin)

Détruire la dernière demande d'impression


lprm

Détruire la dernière demande d'impression de l'utilisateur 'mejdi'


lprm mejdi

Détruire toutes les demandes


lprm -a (ou aussi lprm -)

On peut également faire référence à la demande par son numéro que l'on récupère avec
la commande lpq vue précédemment

De même que pour les commandes précédentes, lprm supporte l'option '-P' qui permet de
faire référence à une autre queue que la queue par défaut.

lpc

La commande /usr/sbin/lpc (Line Printer Control) permet de contrôler les queues


d'impression ainsi que les imprimantes.
Elle permet de rendre les queues indisponibles (problème grave, la queue n'accepte plus
les demandes), mais aussi de suspendre l'envoi effectif des demandes à la queue mais
de les accepter (problème temporaire).
lpc est une commande de configuration normalement réservée à l'administrateur (les
droits sont aussi gérés dans /etc/lpd.perms) , elle fonctionne de deux manières : soit en
mode interactif avec un interpréteur de commandes, soit en mode classique direct. .

Page 3/6
Quelques options de la commande lpc :
status : donne l'état de la queue
enable/disable : rend disponible/indisponible la queue
start/stop/restart : concerne plutôt les imprimantes

1.4 Fichiers de configuration

/etc/princap

Ce fichier décrit toutes les imprimantes (distantes ou locales) et les queues associées
pouvant être utilisées par le système.

La queue d'impression par défaut peut être définie dans la variable d'environnement
réservée LPDEST (ou PRINTER).
Si aucune imprimante par défaut n'est définie, c'est la première du fichier /etc/printcap qui
est utilisée.

Voici quelques indication sur la syntaxe à employer pour ce fichier :


rm (remote host) : l'adresse (ou le nom) de l'imprimante distante
mx : taille maximale du fichier (zéro pour illimité )
rp (remote print) : le nom de la queue
sd (spool directory) : nom du répertoire de spool
lp (line printer) : nom du périphérique utilisé (e.g. /dev/lp0 pour le port parallèle)
if (input filter) : nom du filtre à employer

A noter que le filtrage (décrit par le mot clef 'if') se fait sur l'hôte distant.

Classiquement, lorsque l'on modifie ce fichier il faut relancer le démon 'lpd'

/etc/lpd.conf

C'est un fichier destiné à l'administrateur qui permet de spécifier des options globales
pour les impressions : niveau de priorité, répertoire temporaire ...

/etc/lpd.perms

Ce fichier permet de contrôler les permissions accordées aux utilisateurs pour l'utilisation
des commandes lpc, lpq et lprm vues précédemment .

Il est possible en particulier de permettre à des utilisateurs de détruire leurs demandes par
la commande suivante

ACCEPT SERVICE=M SAMEUSER SAMEHOST

Cela signifie que le même utilisateur venant de la machine depuis laquelle la demande a
été effectuée peut détruire sa demande

Page 4/6
Le fichier fonctionne sur le même modèle que pour le filtrage de paquets. Le fichier est lu
en séquence jusqu'à trouver une règle correspondante. Les règles plus générales se
trouvent donc en fin de fichier.

# Accepter que 'root' sur le serveur puisse détruire


ACCEPT SERVICE=M SERVER REMOTEUSER=root
# Refuser le service à tous les autres
REJECT SERVICE=M
# Toutes les autres opérations sont autorisées
DEFAULT ACCEPT

Un autre exemple pour le contrôle de l'utilisation de la commande 'lpc' uniquement par


'root' sur le serveur, autoriser tous les utilisateurs à obtenir des informations sur le serveur,
son statut et son printcap, et refuser les autres opérations de contrôle

# Accpeter le contrôle pour 'root'


ACCEPT SERVICE=C SERVER REMOTEUSER=root
# Accepter lpd, status et printcap pour tous
ACCEPT SERVICE=C LPC=lpd,status,printcap
# Toutes les autres opérations de contrôle sont refusées
REJECT SERVICE=C

/etc/hosts.lpd et /etc/hosts.equiv

Ces fichiers étaient utilisés par l'ensemble de commandes d'origine de lpr. Ils ne sont plus
utilisés en pratique car ils présentent un trou de sécurité potentiel. Ils sont remplacés dans
LPRng par des entrées dans le fichier /etc/lpd.perms vu précédemment.

Pour mémoire, le fichier /etc/hosts.lpd devait contenir la liste des machines autorisées à
accéder au service d'impression. Il fallait les déclarer également dans le fichier /
etc/host.equiv (qui sert également pour les commandes distantes de type rsh ou ssh)

1.5 Exercices

Mots clefs
gs
ghostscript

Page 5/6
/usr/bin/lp
/usr/bin/lprm
/usr/bin/lpq
/usr/bin/lpc
/etc/printcap
/etc/lpd.conf
/etc/lpd.perms
/usr/bin/printtool
LPRng

Page 6/6