Il existe plusieurs systèmes de gestion des imprimantes : LPR (BSD), System V, CUPS, LPRnG, etc. On présente ici le système traditionnel LPR de BSD.
Le système d'impression fonctionne de la façon suivante (en simplifiant)
Ce système est décrit par le fichier /etc/printcap
.
Voici un extrait du fichier /etc/printcap
, concernant
une imprimante nommée lp
lp
est le nom
conventionnel de l'imprimante par défaut
reliée au port parallèle /dev/lp0
.
lp|Imprimante sur port parallèle:\
:lp=/dev/lp0:\
:sd=/var/spool/lpd/lp:\
:lf=/var/log/lp-errs:\
:mx=0:\
:sh:
Après le nom de l'imprimante et sa description, on trouve différents champs. Ici :
lp
: le périphérique sd
: spool directory, le répertoire qui contient
la file d'attentelf
: le log file qui enregistre les messages
d'erreurs concernant cette imprimantemx
: maximum size, taille maximum des fichiers
à imprimer (ici, non limitée).sh
: suppress header, indicateur optionnel qui
évite d'imprimer une page de garde pour chaque travail.
lpd
et lpc
Pour imprimer l'utilisateur emploie la commande lpr
, ou
a2ps
, ou enscript
, etc.
Le système d'impression est lancé par le démon lpd
qui gère
les files d'attentes, et lance les traitements quand les périphériques
sont disponibles.
La commande lpc
permet de contrôler le fonctionnement du
système d'impression :
lpc enable
file'' autorise
l'ajout de nouveaux travaux dans une file d'impressionlpc disable
file'' l'interditlpc stop
file'' arrête les impressions
d'une file d'attente, mais n'interdit pas d'y ajouter des
travauxlpc start
file'' relance les impressions
d'une file d'attente.lpc abort
file'' arrête l'impression en
cours, et bloque les impressions (comme pour stop
).
De nos jours la plupart des logiciels utilisent une version de PostScript
Marque déposée d'Adobeou une autre comme langage pour les sorties sur imprimantes.
Les imprimantes courantes (et bon marché) ne reconnaissent pas ce langage, mais seulement des codes de bas niveau comme PCL (HP), ESC (epson) etc.
On utilise donc des programmes de conversion, appelés filtres d'impressions pour traduire les fichiers PostScript en codes spécifiques de l'imprimante. En intégrant ceci dans le système d'impression, on transformera donc n'importe quelle imprimante (ou presque) en imprimante PostScript virtuelle.
Ce n'est pas très compliqué à faire : il suffit d'ajouter un
champ if
qui précise l'emplacement du filtre. Exemple :
bureau302ps|Imprimante PostScriptifiée Bureau302:\
:lp=/dev/lp0:\
:sd=/var/spool/lpd/bureau302ps:\
:if=/usr/local/bin/filtre-postscript:\
:lf=/var/log/lp-errs:\
:sh:
et bien sûr il faut réaliser (ou se procurer) le programme de
filtrage.
Exemple : un filtre simpliste pour LaserJet 4
#!/bin/bash
gs -sDEVICE=$MODE -r300x300 \
-q -dNOPAUSE -dBATCH -dSAFER \
-sOutputFile=-
En réalité, on préfère plutôt faire des filtres magiques qui commencent par détecter le type du document reçu (texte ordinaire, PostScript, DVI, HTML, image, etc.) et lancent un programme de conversion/formattage adapté à la situation.
Pour imprimer sur une imprimante qui est reliée à une autre machine, on indique deux clauses
rm
(remote machine), le nom de la machine qui
support l'imprimanterp
(remote printer), le nom de l'imprimante sur cette
machine.
bureau302|Imprimante distante:\
:rm=pc302a:\
:rp=bureau302ps:\
:sd=/var/spool/lpd/bureau302:
Pour que ça marche, il faut que la machine qui possède l'imprimante
autorise les impressions venant de telle autre machine. Il suffit
de donner les noms dans /etc/lpd.conf
.