Nous considérons ici que vous utilisez la suite logicielle lpd
que nous décrirons d'ailleurs. Elle est la plus répandue et
fonctionne très bien.
L'impression locale permet aux utilisateurs d'envoyer des travaux d'impression à l'imprimante directement rattachée à leur machine.
L'impression distante, par contre, permet de soumettre des travaux d'impression depuis une machine, à une autre machine sur le réseau, sur laquelle est connectée une imprimante.
Nous supposons que vous savez éditer un fichier texte sous Linux et
que vous avez une bonne compréhension des notions de droits
d'accès et de propriété (chmod
, chown
).
Nous supposons également que votre système Linux fonctionne correctement. En particulier, si vous souhaitez faire de l'impression distante, que votre réseau fonctionne déjà.
Consultez à ce propos les nombreuses documentations disponibles sur
le sujet (comme on dit: RTFM, ce qui en bon francais veut dire LLBD
:-)
).
Le système d'impression Unix comprend (au moins) 5 programmes. Ils doivent se trouver à l'endroit décrit (c'est le mieux) ou dans un répertoire accessible (avec la variable PATH), appartenir à 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 utilisés pour soumettre, visualiser, annuler, contrôler les travaux d'impression. Le dernier est le démon.
Il existe bien entendu des pages de manuel en ligne pour ces commandes que
vous pourrez consulter pour plus d'information. Le point important
à noter est que les commandes lpr
, lpq
,
lpc
et lprm
opèrent sur une imprimante par
défaut nommée lp
. La variable d'environnement
PRINTER
peut contenir le nom de l'imprimante que vous avez
choisie. La spécification du nom d'une imprimante sur la ligne de
commande surchargera ces définitions (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 ?)
...
Voici ci-dessous les interactions client - démon
_________
+/BlaBla /+
//________//|
/ / +
+----------------+ +----------+ /
| LPR | |= oo |/
+----------------+ +----------+
| Imprimante
| ^
V |
+----------------+ +------------------+
| LPD |------>------>----| LPD |
+----------------+ +------------------+
Soumission d'un requete d'impression
+----------------+
| LPQ |
+----------------+
\
\_______>______
\
+----------------+ \+------------------+
| LPD | | LPD |
+----------------+ +------------------+
Soumission d'une demande d'information
Lorsque le système démarre, lpd
est
chargé. Il lit le fichier /etc/printcap
(dont vous
trouverez une explication plus loin) qui décrit les imprimantes
connues.
Lorsqu'un programme client soumet un travail d'impression, il génère deux fichiers qu'il écrit dans le spool:
La commande lpr
soumet un travail d'impression. Elle se charge de
mettre les données à imprimer dans un fichier dans le spool
d'impression. Ces données peuvent provenir soit d'un fichier (les
données sont dupliquées et toute modification
ultérieure du fichier d'origine n'affectera pas l'impression), soit
de l'entrée standard (stdin). Le démon est averti de
l'existence d'un nouveau fichier et envoie, dès que possible, les
données vers l'imprimante physique (ou la machine distante).
La taille du spool est bien entendu limitée à la place
disponible sur votre disque dans /usr/spool/
ou à la taille limite
spécifiée dans le fichier de configuration printcap
. Vous pouvez
néanmoins imprimer un gros fichier en demandant à lpr
de
ne pas dupliquer le fichier. Le démon d'impression ira alors
chercher le fichier que vous indiquez dans la ligne de commande et non plus
dans le spool.
La commande lpq
affiche le contenu du spool, pour une imprimante
donnée. Une des informations importantes fournies est le
numéro du travail (job). C'est lui qui pourra servir à
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 à
l'impression).
La commande lprm
enlève un travail de la file (et donc le
fichier du spool). Vous pouvez soit spécifier un numéro de
job, soit un tiret permettant de supprimer tous les travaux vous
appartenant. Si vous êtes root, tous les travaux sont
supprimés. Pour supprimer les travaux d'un utilisateur,
spécifiez son nom.
# lprm 1
dfA001Aa00484 dequeued
cfA001Aa00484 dequeued
#
Le premier fichier contient les données à imprimer. Il a
été créé par lpr
. Le deuxième
contient des informations que le démon utilise pour savoir que faire
des données (impression locale, distante, ...) Consultez le manuel
en ligne : lpd(8)
.
La commande lpc
permet de contrôler les travaux en cours
ainsi que l'imprimante, et certains aspects de son utilisation. En
particulier, vous pouvez démarrer ou stopper la sortie des travaux
du spool pour l'impression, valider ou invalider une imprimante, et
même 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 début de file:
lpc down mon_imprimante
lpc enable ton_imprimante
lpc topq 37
lpc
peut fonctionner en interactif si aucun paramètre ne
lui est passé. Vous pouvez lire les pages du manuel en ligne pour
obtenir des instructions complètes. A noter que certaines actions de
lpc
sont réservées au super-utilisateur (root).
Le répertoire le plus important est le répertoire de spool,
dans lequel les données vont être stockées avant
d'être imprimées. Typiquement, un système sera
configuré pour avoir un répertoire de spool par
imprimante. Cela rend la gestion plus facile. Sur mon système, par
exemple, le répertoire /usr/spool/lp
est le
répertoire principal. Sous ce répertoire, on y trouve le
sous-répertoire lpr0
, correspondant à la
déclaration que j'ai faite dans /etc/printcap
pour le
répertoire de spool de mon imprimante.
NDT: Ce qui va suivre décrit une façon de faire pour donner les bons droits d'accès aux répertoires de spool. Différentes méthodes sont possibles, sachant que, comme sous Un*x, beaucoup de choses sont possibles dans ce domaine, il convient de faire attention de ne pas offrir de failles à la sécurité de l'ensemble.
Le répertoire de spool doit appartenir à root
, et au
groupe lp
, avec les droits de lecture/d'écriture 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 répertoire doit également être présent
: /usr/spool/lpd
avec les mêmes droits. Vous aurez plus
d'informations plus avant dans ce document.
En dehors des programmes que nous avons déjà
évoqués précédemment, quatre fichiers doivent
se trouver dans chaque répertoire de spool. Avec les versions
récentes des gestionnaires d'impression, vous n'avez pas à
vous soucier de ces fichiers. Ils sont créés 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 numéros de jobs. Le fichier status
contient
le message devant être émis par la commande lpc
stat
. Le fichier lock
est utilisé par le démon
pour qu'il n'imprime qu'un fichier à 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 déclaré dans
le fichier /etc/printcap
que nous décrirons dans la suite.