La configuration minimale pour un système d'impression permet de mettre des fichiers en file d'impression puis de les imprimer. Il ne prête aucune attention au fait que votre imprimante puisse les imprimer (les comprendre même) et ne vous permettra pas d'imprimer des choses extraordinaires. Néanmoins, c'est un premier pas.
/etc/printcap
Le fichier /etc/printcap
décrit toutes les imprimantes que
votre système doit connaître. Il peut être
modifié avec votre éditeur préféré, doit
appartenir à 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 incompréhensible à
première vue. Il respecte effectivement une syntaxe
particulière et malgré les apparences, assez simple lorsque
l'on connaît ! Il n'y a pas toujours de manuels concernant ce
fichier, et cela complique un peu les choses. Un petit conseil en passant
: essayez, dans la mesure du possible de rendre votre fichier le plus
lisible possible, avec des commentaires. Vous pouvez consulter les pages
du manuel en ligne concernant printcap(5)
(ou empressez-vous de
les récupérer si vous ne les avez pas). Plus loin sont
décrits les paramètres importants.
Une entrée de printcap
décrit une imprimante,
c'est-à-dire une correspondance nom logique - imprimante physique,
puis décrit la façon de transmettre les données. Par
exemple, une entrée va décrire le périphérique
physique à utiliser, le répertoire de spool, les traitements
à effectuer sur les données avant impression, ou encore le
répertoire dans lequel seront notifiées les erreurs. Vous
pouvez aussi limiter la quantité de données pour un job, ou
même limiter l'accès d'une imprimante à une classe
d'utilisateurs. Vous trouverez dans la partie suivante la description des
champs.
Il est tout à fait possible d'avoir plusieurs entrées décrivant différentes façons d'envoyer des données à une même imprimante physique. Par exemple, une imprimante physique peut supporter les formats HP LaserJet et PostScript, en fonction de la séquence de caractères envoyée au début d'un travail. Vous définirez donc deux entrées, l'une permettant de traiter le format HP, l'autre le format PostScript. Les programmes générant des données ``HP'' les enverront à l'imprimante HP, ceux générant des données PostScript les enverront à l'imprimante PostScript. Toutes les deux représentent la même imprimante physique.
Les programmes qui modifient les données avant de les envoyer à l'imprimante physique sont des filtres.
Exemple d'entrée d'un fichier /etc/printcap
:
# LOCAL djet500
lp|dj|deskjet:\
:sd=/var/spool/lpd/dj:\
:mx#0:\
:lp=/dev/lp0:\
:sh:
Ceci définit une imprimante dont les noms sont lp
(par
défaut), dj
et deskjet
. Les deux derniers sont
des alias de la même imprimante. La file (on dit très souvent
le spool, même en français...) de cette imprimante de trouve
dans le répertoire /var/spool/lpd/dj
(sd
signifie
spool directory). Le périphérique utilisé est
/dev/lp0
. La page d'en-tête est supprimée
(sh
) et aucune limite de taille de fichier n'est fixée
(mx
)
Notez que la même entrée pourrait s'écrire:
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 décrites.
Tous les champs exceptés les noms d'imprimantes sont entourés de deux-points et repérés par un symbole de deux lettres suivi du signe égal. Ensuite est indiquée la valeur qui peut être de type numérique, booléenne ou chaîne de caractères:
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)
Si vous spécifiez /dev/null
comme
périphérique, tous les traitements se feront, mais tout
partira à la poubelle. Ca semble ridicule, mais cela vous permet par
exemple de tester une configuration. Lisez le chapitre ``Imprimantes qui
ne sont pas de simples périphériques''. Si vous
désignez une imprimante distante avec rp
et rm
,
lp
doit contenir :lp=:
.
Ne laissez pas ce champ vide en cas d'impression locale, le démon signalerait une erreur.
Tout fichier spécifié ici doit exister, sinon le rapport d'erreurs ne se ferait pas.
Les filtres d'entrée sont des utilitaires transformant les données qu'il reçoivent sur leur entrée standard en un format particulier qu'il sortent sur leur sortie standard. Typiquement, la conversion texte - PostScript déjà mentionnée.
Si vous spécifiez un filtre d'entrée, le démon n'envoie pas directement les données au périphérique. Il exécute le filtre en dirigeant les donnés sur son entrée standard et en désignant le périphérique de sortie comme sortie standard.
Envoyer des données à une imprimante rattachée
à une machine distante est très simple: il suffit de
spécifier le nom de la machine avec rm
et le nom de
l'imprimante avec rp
. S'assurer que l'entrée lp
est vide. A noter que les données seront d'abord mises dans le spool
local avant d'être transférées. Même si votre
imprimante est distante, il faudra également un spool local.
Les bannières concernent éventuellement les utilisations à plusieurs personnes. Elles identifient les jobs.
La suppression de ces bannières vous permet d'économiser du papier. Par contre la gestion des sauts de page sera plus intéressante, surtout si vous utilisez des traitements de textes qui formatent toujours des pages pleines. Dans ce cas, pas besoin de saut de page supplémentaire. Vous auriez sinon une page blanche en fin de chaque travail. Si vous utilisez des listings ou autres documents, ajouter un saut de page garantit que chaque travail commancera bien en début de page.
Ce champ permet de limiter la taille des données pour chaque job. Le
nombre à spécifier est en blocs de BUFSIZE
(pardon,
de 1 Ko) sous Linux. La valeur 0 rend la taille illimitée,
permettant la soumission de travaux limitée uniquement à la
taille du disque. Notez que la limite concerne la taille des
données mises en spool, et non pas les données
envoyées à l'imprimante physique. Si la limite est
dépassée, le fichier est tronqué avec
l'émission d'un message disant: lpr: <fichier>: copy file
is too large
.
Cela peut être intéressant pour des imprimantes physiques en mode texte, notamment si des utilisateurs ou des programmes créent accidentellement des données trop volumineuses.
Si vous manquez de mémoire de masse, pourquoi n'inventeriez-vous pas un filtre qui décompresse ce qu'il a à envoyer à l'imprimante ? Vous soumettriez alors des données compressées.