7. Configurer les services d'impression

Contenu de cette section

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.

7.1 Le fichier /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)

Détails sur le champ lp

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.

Détails sur le champ lf

Tout fichier spécifié ici doit exister, sinon le rapport d'erreurs ne se ferait pas.

Détails sur le champ if

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.

Détails sur les champs rm et rp

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.

Détails sur les champs sh et sf

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.

Détail sur le champ mx

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.


Chapitre suivant, Chapitre Précédent

Table des matières de ce chapitre, Table des matières générale

Début du document, Début de ce chapitre