6.8. Configuration de l'imprimante

Le sous-système d'impression de Linux est emprunté à un autre système Unix célèbre, BSD. Les commandes utilisateurs sont donc les mêmes, et son fonctionnement repose sur les mêmes principes. En général, les imprimantes sont connectées au port parallèle de l'ordinateur (sauf les imprimantes professionnelles, qui disposent d'une interface réseau). Il est donc nécessaire que la configuration du port parallèle soit correcte. Dans la suite, nous supposerons que l'imprimante est connectée sur le port /dev/lp0 (premier port parallèle, soit l'équivalent de LPT1 sous DOS).

6.8.1. Filtres d'impression

Il est possible d'envoyer directement un fichier à imprimer à l'imprimante, en le recopiant directement sur le fichier spécial de périphérique de l'imprimante. Cette technique peut parfaitement convenir pour un fichier texte simple, mais elle pose quelques problèmes. Premièrement, elle ne fonctionne qu'avec des fichiers que l'imprimante peut comprendre, donc des fichiers contenant des instructions qui lui sont spécifiques. Mais le problème le plus important est sans doute le fait que cette technique n'est pas utilisable lorsque plusieurs programmes ou plusieurs utilisateurs désirent envoyer un fichier en même temps à l'imprimante.

Le sous-système d'impression utilise donc un mécanisme de files d'attente pour les impressions (« spool » en anglais). Tous les travaux d'impression soumis sont placés dans une file d'attente, et attendent leur tour pour être envoyés à l'imprimante associée à cette file. Une fois que l'impression est terminée, les travaux sont supprimés de la file. Ainsi, un seul programme accède à l'imprimante : le sous-système d'impression. Notez qu'il est possible de définir plusieurs files d'attentes sur une même imprimante, selon la nature du travail à effectuer. Par exemple, une file peut se charger des documents textes, et une autre des documents graphiques. Bien entendu, le sous-système d'impression contrôle tous les accès à l'imprimante et assure qu'un seul document est en cours d'impression à chaque instant.

D'autre part, le sous-système d'impression donne la possibilité de spécifier la nature des fichiers à imprimer, afin de les traduire dans un langage compréhensible par l'imprimante. Ce travail de conversion est réalisé par un ensemble de programmes que l'on appelle les filtres. Un filtre n'est en fait rien d'autre qu'un programme qui reçoit un fichier en entrée et qui fournit la traduction de ce fichier dans un autre format en sortie. Les distributions Linux sont fournies avec un certain nombre de filtres qui permettent de gérer la plupart des formats de fichiers utilisés.

Parmi ces formats de fichiers, il en est un qui est plus important que les autres : PostScript. PostScript est un langage de description de pages inventé par Adobe, et que nombre d'imprimantes laser comprennent. En fait, il s'agit d'un véritable langage de programmation, qui permet de programmer les périphériques dont la vocation est d'afficher ou d'imprimer des documents. Techniquement parlant, PostScript permet d'obtenir une qualité d'impression irréprochable, car c'est l'imprimante elle-même qui « dessine » la page à imprimer. Le problème est que toutes les imprimantes ne comprennent pas forcément le langage PostScript, notamment les imprimantes à jet d'encre. Pour ces imprimantes, il faut donc un filtre particulier, capable de convertir le PostScript dans le langage graphique de l'imprimante. Linux utilise pour cela un « interpréteur PostScript ». Un interpréteur PostScript est un programme capable de comprendre les fichiers PostScript et de les convertir dans le format compris par l'imprimante. L'interpréteur couramment utilisé sous Linux est GhostScript, parce que c'est un logiciel libre (cependant, la version courante est toujours commerciale). Il est également capable d'afficher les fichiers PostScript sous XWindow, et de gérer la plupart des imprimantes du marché.

La plupart des autres filtres ont donc pour vocation de convertir un fichier en PostScript. L'avantage de cette technique est que toutes les imprimantes apparaissent comme étant des imprimantes PostScript pour les programmes désirant imprimer. Ainsi, leur programmation est beaucoup plus simple, puisqu'ils n'ont qu'un seul format à gérer. Bon nombre d'applications génèrent directement des fichiers PostScript, qui sont donc envoyés directement à GhostScript pour l'impression définitive.

Figure 6-3. Filtres d'impression et imprimantes PostScript

Comme on le voit, pour Linux, le langage d'impression universel est le langage PostScript. Bien entendu, cela est idéal si l'on dispose effectivement d'une imprimante PostScript, mais même dans le cas contraire, les impressions se font parfaitement grâce à GhostScript.

6.8.2. Commandes d'impression

La commande d'impression sous Linux est la commande lpr (abréviation de l'anglais « Laser PRinter »). Cette commande est très simple à utiliser, comme le montre la syntaxe suivante :

lpr fichier
fichier est le nom du fichier à imprimer. Cette commande se contente de placer le fichier à imprimer dans un répertoire affecté à la file d'attente des travaux d'impression. Le travail d'impression est ensuite effectué par le démon lpd, qui fait passer chaque fichier à imprimer à travers la série de filtres pour le convertir dans le langage de l'imprimante, puis qui alimente l'imprimante.

La liste des travaux d'impression en attente peut être consultée avec la commande lpq. Chaque travail en attente porte un numéro, grâce auquel on peut le manipuler. Entre autres opérations, il est possible de l'abandonner à l'aide de la commande lprm.

Enfin, pour consulter et contrôler l'état des files d'impression, on peut utiliser la commande lpc. Cette commande peut prendre des options en ligne de commande afin de préciser l'opération à effectuer. Par exemple, l'option status permet d'obtenir l'état de chacune des files d'impression. Les autres options permettent d'arrêter le travail en cours, de le suspendre, de désactiver l'imprimante pour les travaux suivants, et inversement de relancer les travaux d'impression sur cette file.

6.8.3. Configuration des files d'impression

Les distributions modernes fournissent toutes un outil permettant d'effectuer la configuration du sous-système d'impression. Il est évidemment recommandé d'utiliser ces outils, car le résultat est assuré et la vie en est d'autant plus facile. De plus, les distributions peuvent fournir des filtres complémentaires que seuls ces outils connaissent et sont capables d'installer. Toutefois, il est bon de savoir quels sont les mécanismes mis en œuvre lors de l'impression d'un document. Nous allons donc nous y intéresser brièvement dans ce paragraphe.

Le démon lpd utilise le fichier de configuration /etc/printcap pour déterminer l'ensemble des files d'impression existantes et quel filtres doivent être utilisés. Chaque file est décrite par une ligne et une seule de ce fichier. Ces lignes sont constituées de divers champs, séparés par des deux points (':'). Comme ces lignes peuvent être relativement longues, elles peuvent être réparties sur plusieurs lignes physiques en plaçant le caractère d'échappement '\' à la fin de chaque ligne, sauf la dernière.

Le premier champ de la description d'une file d'attente est une liste des noms sous lesquels cette file sera connue. Les différents noms sont écrits les uns à la suite des autres, séparés par une barre verticale (caractère '|').

Les champs suivants décrivent l'imprimante à utiliser, ainsi que les options générales de la file d'attente. Ces champs utilisent tous la même syntaxe :

option = valeur

Il existe un grand nombre d'options, nombre d'entre elles sont facultatives. Cependant, il est impératif que le démon lpd puisse trouver l'imprimante à utiliser. Par conséquent, il faut lui fournir au moins l'une des deux série d'options suivantes :

Le démon lpd doit également connaître le répertoire dans lequel les travaux en attente seront stockés (répertoire dit de « spool »). Ce répertoire peut être défini avec l'option sd.

D'autres options peuvent être utiles, comme sh (cette option ne prend pas de valeur), qui permet de supprimer la page de garde au début de chaque impression, et mx, qui permet de spécifier la taille maximale des travaux d'impression soumis. Cette dernière option permet de fixer des quotas d'impression selon la taille des documents, afin de donner la possibilité aux autres documents d'être imprimés. Cette option utilise une syntaxe particulière :

mx#taille
taille est la taille maximale autorisée, exprimée en kilo-octets. Le fait de spécifier une taille nulle permet de supprimer ce contrôle.

L'exemple ci-dessous correspond à la définition d'une file d'attente locale élémentaire :

ascii|lp:lp=/dev/lp:sd=/var/spool/lpd/ascii:mx#0:sh

Comme vous pouvez le constater, il n'y a aucune spécification des filtres d'impression à utiliser dans cet exemple. Les travaux sont donc directement envoyés à l'impression, sans traduction préalable. Il est donc nécessaire qu'ils soient déjà au format de l'imprimante. Si l'on veut utiliser des filtres d'impression, il faut utiliser l'une des options if, cf, df, gf, nf, rf, tf ou vf. Chacune de ces options permet de spécifier la ligne de commande d'un filtre d'impression spécifique. Le choix du filtre utilisé pour un travail d'impression est effectué lors de l'appel à la commande lpr, à l'aide d'une option en ligne de commande. Le filtre if est le filtre par défaut, il n'y a donc besoin d'aucune option pour l'utiliser. Les autres filtres peuvent être sélectionnés respectivement avec les options -c, -d, -g, -n, -f, -t et -v.

Comme on le voit, le sous-système d'impression ne reconnaît pas automatiquement le format de fichier utilisé. D'autre part, le nombre de filtres utilisables est limité à 8, ce qui peut ne pas suffire étant donné la prolifération des formats de fichiers. Pour résoudre ce problème, les distributions utilisent souvent un filtre générique (utilisé en tant que filtre par défaut) qui, lui, est capable de reconnaître le format du fichier à imprimer et de le diriger vers un autre filtre ou une série de filtres. Comme on l'a vu ci-dessus, l'ultime filtre utilisé est en général l'interpréteur GhostScript. Ainsi, il n'y a plus de limite sur le nombre de filtres utilisables, et les filtres sont sélectionnés automatiquement en fonction de la nature du document à imprimer. Malheureusement, ces filtres évolués ne sont pas standards, et chaque distribution est susceptible de fournir sa propre version. C'est pour cette raison qu'il est recommandé d'utiliser les programmes de configuration fournis par ces distributions pour installer l'imprimante.