diff options
-rwxr-xr-x | fr_FR.ISO8859-1/books/handbook/printing/chapter.sgml | 2909 |
1 files changed, 2889 insertions, 20 deletions
diff --git a/fr_FR.ISO8859-1/books/handbook/printing/chapter.sgml b/fr_FR.ISO8859-1/books/handbook/printing/chapter.sgml index 48d49ce572..feab2ec28a 100755 --- a/fr_FR.ISO8859-1/books/handbook/printing/chapter.sgml +++ b/fr_FR.ISO8859-1/books/handbook/printing/chapter.sgml @@ -1712,52 +1712,2875 @@ $%&'()*+,-./01234567 </sect1> <sect1 id="printing-advanced"> - <title>Advanced Printer Setup ** Traduction en Cours **</title> - <para></para> + <title>Configuration avancée de l'imprimante</title> + + <para>Cette section décrit les filtres à utiliser + pour imprimer des fichiers au formatage particulier, des pages + d'en-tête, pour imprimer en réseau, et pour + restreindre et comptabiliser l'utilisation de + l'imprimante.</para> <sect2 id="printing-advanced-filter-intro"> - <title>Filters</title> + <title>Les filtres</title> + + <indexterm> + <primary>imprimer</primary> + <secondary>filtres</secondary> + </indexterm> + + <para>Bien que <application>LPD</application> gère les + protocoles réseaux, les files d'attente, le + contrôle d'accès et d'autres aspects de + l'impression, la plus grande partie du + <emphasis>véritable</emphasis> travail intervient dans + les <emphasis>filtres</emphasis>. Les filtres sont des + programmes qui communiquent avec l'imprimante et gèrent + ses dépendances matérielles ainsi que ses + besoins particuliers. Dans la configuration simple de + l'imprimante, nous avons installé un filtre texte + simple— un filtre particulièrement basique qui + devrait fonctionner avec la plupart des imprimantes (voir la + section <link linkend="printing-textfilter">Installer le + filtre texte</link>).</para> + + <para>Toutefois, afin de profiter de la conversion de format, de + la comptabilisation de l'utilisation de l'imprimante, de + particularités matérielles, et ainsi de suite, + il vous faut comprendre le fonctionnement des filtres. En + dernier ressort, il incombera au filtre de gérer ces + aspects. Et la mauvaise nouvelle, c'est que la plupart du + temps, c'est <emphasis>vous</emphasis> qui devrez produire ces + filtres vous-même. La bonne nouvelle, c'est que + beaucoup existent déjà et que, sinon, ils sont + en général assez faciles à + écrire.</para> + + <para>Par ailleurs, il en est un livré avec &os;, + <filename>/usr/libexec/lpr/lpf</filename>, qui fonctionne avec + beaucoup d'imprimantes capables d'imprimer du texte brut. (Il + gère les retours arrière et les tabulations dans + le fichier, effectue une comptabilisation, mais c'est à + peu près tout). Vous trouverez également + d'autres filtres et composants de filtres dans le catalogue + des logiciels portés de &os;.</para> + + <para>Voici ce que vous trouverez dans cette section:</para> + + <itemizedlist> + <listitem> + <para>La section + <link linkend="printing-advanced-filters">Fonctionnement + des filtres</link> tâche de donner une vue + générale du rôle des filtres dans le + processus d'impression. Il vous faut lire cette section + pour comprendre ce qui se passe <quote>sous le + capot</quote> lorsque <application>LPD</application> + utilise des filtres. Cette connaissance vous permettra + d'anticiper et de résoudre les problèmes que + vous pourriez rencontrer quand vous installerez de plus en + plus de filtres pour chacune de vos imprimantes.</para> + </listitem> + + <listitem> + <para><application>LPD</application> s'attend à ce + que toutes les imprimantes sachent imprimer du texte brut + par défaut. Cela pose un problème pour les + imprimantes &postscript; (ou les imprimantes basées + sur un autre langage) qui ne peut pas imprimer du texte + brut directement. La section <link + linkend="printing-advanced-if-conversion">Gérer les + travaux d'impression de texte brut sur des imprimantes + &postscript;</link> vous indique la marche à suivre + pour résoudre ce problème. Vous devrez lire + cette section si vous avez une imprimante + &postscript;.</para> + </listitem> + + <listitem> + <para>&postscript; est un format de sortie courant pour + beaucoup d'applications. Certaines personnes + écrivent même du code &postscript; + directement. Malheureusement, les imprimantes + &postscript; sont onéreuses. La section <link + linkend="printing-advanced-ps">Emuler du &postscript; sur + les imprimantes non-&postscript;</link> vous indiquera + comment modifier un filtre texte pour qu'une imprimante + <emphasis>non-&postscript;</emphasis> accepte et imprime + du &postscript;. Vous devrez lire cette section si vous + ne disposez pas d'une imprimante &postscript;.</para> + </listitem> + + <listitem> + <para>La section + <link linkend="printing-advanced-convfilters">Filtres de + conversion</link> vous apprendra à automatiser la + conversion de formats de fichiers spécifiques, + comme des graphiques ou des données de composition, + en formats compréhensibles par l'imprimante. + Après avoir lu cette section, vous serez en mesure + de configurer vos imprimantes de telle sorte que vos + utilisateurs pourront entrer la commande <command>lpr + -t</command> pour imprimer du troff, ou <command>lpr + -d</command> pour imprimer le format DVI produit par + &tex;, ou <command>lpr -v</command> pour imprimer des + images en mode point, etc. Nous recommandons la lecture + de cette section.</para> + </listitem> + + <listitem> + <para>La section <link + linkend="printing-advanced-of">Filtres de sortie</link> + révèle tout d'une fonctionnalité peu + utilisée de <application>LPD</application>: les + filtres de sortie. A moins que vous n'imprimiez des pages + d'en-têtes (voir la section <link + linkend="printing-advanced-header-pages">Pages + d'en-tête</link>), vous pouvez probablement + complètement ignorer cette section.</para> + </listitem> + + <listitem> + <para>La section <link linkend="printing-advanced-lpf">lpf: + un filtre texte</link> détaille + <command>lpf</command>, un filtre texte destiné aux + imprimantes en ligne (et aux imprimantes laser se + comportant comme telles) plutôt complet + malgré sa simplicité, et livré avec + &os;. Si vous avez besoin de mettre rapidement en place + la comptabilisation de l'utilisation de l'imprimante pour + du texte brut, ou si vous avez une imprimante qui fume + lorsqu'elle voit passer des caractères de retour + arrière, vous devez vraiment penser à + <command>lpf</command>.</para> + </listitem> + </itemizedlist> + + <note> + <para>Une copie des différents scripts + présentés ci-dessous se trouve dans le + répertoire <filename + class="directory">/usr/share/examples/printing</filename>. + </para> + </note> + <sect3 id="printing-advanced-filters"> - <title>How Filters Work</title> - <para></para> + <title>Fonctionnement des filtres</title> + + <para>Comme expliqué précédemment, un + filtre est un programme exécutable lancé par + <application>LPD</application> pour gérer la partie + de la communication avec l'imprimante qui est + dépendante du périphérique.</para> + + <para>Lorsque <application>LPD</application> veut imprimer un + fichier d'un travail d'impression, il lance un programme de + filtre. Il redirige l'entrée standard du filtre sur + le fichier à imprimer, sa sortie standard vers + l'imprimante, et l'erreur standard vers le fichier journal + des erreurs (spécifié dans le paramètre + <literal>lf</literal> du fichier + <filename>/etc/printcap</filename>, ou + <filename>/dev/console</filename> par défaut).</para> + + <indexterm> + <primary><command>troff</command></primary> + </indexterm> + + <para>Le filtre lancé par + <application>LPD</application> ainsi que les + paramètres qui lui sont donnés + dépendent de ce qui est placé dans le fichier + <filename>/etc/printcap</filename> et des paramètres + que l'utilisateur a passé sur la ligne de commande + &man.lpr.1; pour ce travail d'impression. Par exemple, si + l'utilisateur a entré <command>lpr -t</command>, + <application>LPD</application> aurait lancé le filtre + troff, précisé par la paramètre + <literal>tf</literal> pour l'imprimante de destination. Si + l'utilisateur veut imprimer du texte brut, il lancerait le + filtre <literal>if</literal> (c'est vrai la plupart du + temps: lisez la section <link + linkend="printing-advanced-of">Filtres de sortie</link> pour + plus de détails).</para> + + <para>Il existe trois types de filtres que vous pouvez + spécifier dans + <filename>/etc/printcap</filename>:</para> + + <itemizedlist> + <listitem> + <para>Le <emphasis>filtre texte</emphasis>, + confusément appelé <emphasis>filtre + d'entrée</emphasis> dans la documentation + <application>LPD</application>, gère l'impression + de texte classique. Considérez-le comme le + filtre par défaut. + <application>LPD</application> s'attend à ce que + toutes les imprimantes sachent imprimer du texte brut + par défaut, et c'est au filtre texte de s'assurer + que les retours arrière, tabulations et autres + caractères spéciaux ne trompent pas + l'imprimante. Si vous êtes dans un environnement + où il vous faut rendre compte de l'utilisation de + l'imprimante, le filtre texte doit également + comptabiliser les pages imprimées, + généralement en comptant le nombre de + lignes imprimées et en le comparant avec le + nombre de lignes par page supporté par + l'imprimante. Le filtre texte est exécuté + avec la liste de paramètres suivante:</para> + + <cmdsynopsis> + <command>nom_du_filtre</command> + <arg>-c</arg> + <arg choice="plain">-w + <replaceable>largeur</replaceable></arg> + <arg choice="plain">-l + <replaceable>hauteur</replaceable></arg> + <arg choice="plain">-i + <replaceable>indentation</replaceable></arg> + <arg choice="plain">-n + <replaceable>utilisateur</replaceable></arg> + <arg choice="plain">-h + <replaceable>machine</replaceable></arg> + <arg + choice="plain"><replaceable>fichier_comptabilité</replaceable></arg> + </cmdsynopsis> + + <para>où<para> + + <variablelist> + <varlistentry> + <term><option>-c</option></term> + + <listitem> + <para>apparaît si le travail d'impression est + lancé par la commande <command>lpr + -l</command></para> + </listitem> + </varlistentry> + + <varlistentry> + <term><replaceable>largeur</replaceable></term> + + <listitem> + <para>est la valeur du paramètre + <literal>pw</literal> (<quote>page width</quote>, + pour <quote>largeur de page</quote>) + spécifié dans + <filename>/etc/printcap</filename>, et + possédant la valeur par défaut + 132.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term><replaceable>hauteur</replaceable></term> + + <listitem> + <para>est la valeur du paramètre + <literal>pl</literal> (<quote>page length</quote>, + pour <quote>hauteur de page</quote>), par + défaut: 66.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term><replaceable>indentation</replaceable></term> + + <listitem> + <para>est le nombre d'indentations + inséré par <command>lpr + -i</command>, par défaut: 0.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term><replaceable>utilisateur</replaceable></term> + + <listitem> + <para>est le nom du compte de l'utilisateur + imprimant le fichier.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term><replaceable>machine</replaceable></term> + + <listitem> + <para>est le nom de la machine depuis + laquelle le travail d'impression a + été soumis.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term><replaceable>fichier_comptabilité</replaceable></term> + + <listitem> + <para>est le nom du fichier de comptabilisation + spécifié par le paramètre + <literal>af</literal>.</para> + </listitem> + </varlistentry> + </variablelist> + </listitem> + + <indexterm> + <primary>imprimer</primary> + <secondary>filtres</secondary> + </indexterm> + + <listitem> + <para>Un <emphasis>filtre de conversion</emphasis> + convertit un format de fichier spécifique en un + autre que l'imprimante saura imprimer sur papier. Par + exemple, des données de composition ditroff ne + peuvent être imprimées directement, mais il + vous est possible d'installer un filtre de conversion + ditroff afin de convertir ces données ditroff en + une forme que l'imprimante sait ingérer et + imprimer. La section <link + linkend="printing-advanced-convfilters">Filtres de + conversion</link> vous dira tout sur ce sujet. Les + filtres de conversion doivent également tenir des + statistiques, si vous avez besoin de comptabiliser les + impressions. Les filtres de conversion sont + lancés avec les paramètres + suivants:</para> + + <cmdsynopsis> + <command>nom-du-filtre</command> + <arg choice="plain">-x + <replaceable>largeur-en-pixels</replaceable></arg> + <arg choice="plain">-y + <replaceable>hauteur-en-pixels</replaceable></arg> + <arg choice="plain">-n + <replaceable>login</replaceable></arg> + <arg choice="plain">-h + <replaceable>hôte</replaceable></arg> + <arg + choice="plain"><replaceable>fichier_comptabilité</replaceable></arg> + </cmdsynopsis> + + <para>où + <replaceable>largeur-en-pixels</replaceable> est la + valeur du paramètre <literal>px</literal> (0 par + défaut) et + <replaceable>hauteur-en-pixels</replaceable> est la + valeur du paramètre <literal>py</literal> (0 par + défaut).</para> + </listitem> + + <listitem> + <para>Le <emphasis>filtre de sortie</emphasis> n'est + utilisé que s'il n'y a pas de filtre texte, ou si + les pages d'en-tête ont été + activées. D'après notre + expérience, les filtres de sortie sont rarement + employés. La section <link + linkend="printing-advanced-of">Filtres de sortie</link> + les détaillera. Un filtre de sortie ne prend que + deux paramètres:</para> + + <cmdsynopsis> + <command>nom-du-filtre</command> + <arg choice="plain">-w + <replaceable>largeur</replaceable></arg> + <arg choice="plain">-l + <replaceable>hauteur</replaceable></arg> + </cmdsynopsis> + + <para>qui sont identiques aux paramètres + <option>-w</option> et <option>-l</option> des filtres + textes.</para> + </listitem> + </itemizedlist> + + <para>Les filtres doivent également + <emphasis>retourner</emphasis> avec le code de retour + suivant:</para> + + <variablelist> + <varlistentry> + <term>exit 0</term> + + <listitem> + <para>Si le filtre a imprimé avec succès + le fichier.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term>exit 1</term> + + <listitem> + <para>Si le filtre n'a pu imprimer le fichier, mais + désire que <application>LPD</application> + essaie de l'imprimer à nouveau. + <application>LPD</application> relancera un filtre + s'il retourne avec ce code.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term>exit 2</term> + + <listitem> + <para>Si le filtre n'a pu imprimer le fichier et ne veut + pas que <application>LPD</application> retente + l'impression. <application>LPD</application> + rejettera le fichier.</para> + </listitem> + </varlistentry> + </variablelist> + + <para>Le filtre texte livré avec &os;, + <filename>/usr/libexec/lpr/lpf</filename>, tire parti des + paramètres de largeur et hauteur de page pour savoir + quand envoyer une instruction de saut de page et comment + comptabiliser l'utilisation de l'imprimante. Il utilise les + paramètres nom d'utilisateur, nom de machine, et + fichier de comptabilisation pour enregistrer les + entrées concernant la consommation.</para> + + <para>Si vous recherchez des filtres, prenez garde à ce + qu'ils soient compatibles avec LPD. Si c'est le cas, ils + doivent se conformer à la liste de paramètres + décrite ci-dessus. Si vous songez à + écrire des filtres à usage + général, alors faites en sorte qu'ils se + conforment à ces mêmes listes de + paramètres et de codes de retour.</para> </sect3> <sect3 id="printing-advanced-if-conversion"> - <title>Accommodating Plain Text Jobs on &postscript; Printers</title> - <para></para> + <title>Gérer les travaux d'impression de texte brut sur + des imprimantes &postscript;</title> + + <indexterm><primary>travaux d'impression</primary></indexterm> + + <para>Si vous êtes l'unique utilisateur de votre + ordinateur et de votre imprimante &postscript; (ou + basée sur un autre langage), et que vous promettez de + ne jamais envoyer de texte brut à votre imprimante et + de ne jamais utiliser les fonctionnalités des divers + programmes qui voudraient lui en envoyer, alors vous pouvez + tout à fait passer cette section l'esprit + tranquille.</para> + + <para>Toutefois, si vous désirez envoyer du + &postscript; et du texte brut à l'imprimante, alors + vous êtes instamment priés de compléter + la configuration de votre imprimante. Pour ce faire, nous + chargerons le filtre texte de détecter si le travail + d'impression est du texte brut ou du &postscript;. Tous les + travaux d'impression &postscript; doivent débuter par + <literal>%!</literal> (en ce qui concerne les autres + langages, référez-vous à la + documentation de l'imprimante). Si ces deux + caractères sont les deux premiers du travail + d'impression, il s'agit de &postscript; et le reste du + travail d'impression peut être passé + directement à l'imprimante. Dans le cas contraire, + alors le filtre convertit le texte en &postscript; et + imprime le résultat.</para> + + <para>Comment procéder?</para> + + <indexterm> + <primary>imprimantes</primary> + <secondary>série</secondary> + </indexterm> + + <para>Si vous disposez d'une imprimante série, une + bonne façon de faire est d'installer + <command>lprps</command>. Il s'agit d'un filtre + d'impression &postscript; qui assure une communication en + duplex avec l'imprimante. Il met à jour le fichier + d'état de l'imprimante avec des informations + détaillées que cette dernière lui + fournit, de sorte que les utilisateurs et les + administrateurs puissent connaître + précisément l'état de l'imprimante (par + exemple <errorname>niveau de toner bas</errorname> ou + <errorname>bourrage papier</errorname>). Mais plus + important encore, il inclut un programme nommé + <command>psif</command> qui détecte si le travail + d'impression qui vient d'arriver est du texte brut et lance + <command>textps</command> (un autre programme fourni avec + <command>lprps</command>) pour le convertir en &postscript;. + Il utilise alors <command>lprps</command> pour envoyer le + travail d'impression à l'imprimante.</para> + + <para><command>lprps</command> fait partie du catalogue des + logiciels portés &os; (lisez la section <link + linkend="ports">Le catalogue des logiciels + portés</link>). Vous pouvez installer un des deux + logiciels portés <filename + role="package">print/lprps-a4</filename> et <filename + role="package">print/lprps-letter</filename> en fonction du + format de papier utilisé. Après avoir + installé <command>lprps</command>, précisez + simplement le chemin vers le programme + <command>psif</command> qui fait partie de + <command>lprps</command>. Si vous avez installé + <command>lprps</command> en recourant au catalogue des + logiciels portés, placez les valeurs suivantes pour + l'entrée de l'imprimante série &postscript; + dans <filename>/etc/printcap</filename>:</para> + + <programlisting>:if=/usr/local/libexec/psif:</programlisting> + + <para>Vous devrez également renseigner le + paramètre <literal>rw</literal> qui indique à + <application>LPD</application> de requérir + l'imprimante en mode lecture/écriture.</para> + + <para>Si vous disposez d'une imprimante &postscript; + parallèle (et ne pouvez donc pas utiliser la + communication en duplex avec l'imprimante dont a besoin + <command>lprps</command>), vous pouvez recourir à la + procédure suivante en tant que filtre texte:</para> + + <programlisting>#!/bin/sh +# +# psif - Imprime du PostScript ou du texte brut sur une imprimante PostScript +# Version script; CECI N'EST PAS la version fournie avec lprps +# Fichier /usr/local/libexec/psif +# + +IFS="" read -r first_line +first_two_chars=`expr "$first_line" : '\(..\)'` + +if [ "$first_two_chars" = "%!" ]; then + # + # Travail PostScript, l'imprimer. + # + echo "$first_line" && cat && printf "\004" && exit 0 + exit 2 +else + # + # Texte brut, le convertir, puis l'imprimer. + # + ( echo "$first_line"; cat ) | /usr/local/bin/textps && printf "\004" && exit 0 + exit 2 +fi</programlisting> + + <para>Dans la procédure ci-dessus, + <command>textps</command> est un programme que nous avons + installé séparément pour convertir du + texte en &postscript;. Vous pouvez recourir à + n'importe quel programme texte-vers-&postscript;, selon + votre désir. Le catalogue des logiciels + portés de &os; (voir la section <link + linkend="ports">Le catalogue des logiciels + portés</link>) comprend un programme de conversion + texte-vers-&postscript; complet nommée + <literal>a2ps</literal>, qui pourrait vous + intéresser.</para> </sect3> <sect3 id="printing-advanced-ps"> - <title>Simulating &postscript; on Non &postscript; Printers</title> - <para></para> + <title>Emuler du &postscript; sur les imprimantes + non-&postscript;</title> + + <indexterm> + <primary>PostScript</primary> + <secondary>émulation</secondary> + </indexterm> + <indexterm> + <primary>Ghostscript</primary> + </indexterm> + + <para>&postscript; est le standard <emphasis>de + fait</emphasis> pour l'impression et la composition de haute + qualité. Cependant, &postscript; est un standard + <emphasis>onéreux</emphasis>. Heureusement, Aladdin + Enterprises propose un succédané gratuit de + &postscript; nommé + <application>Ghostscript</application> qui fonctionne sous + &os;. <application>Ghostscript</application> peut lire la + majorité des fichiers &postscript; et peut produire + leurs pages sur une diversité de + périphériques, incluant beaucoup de marques + d'imprimantes non-&postscript;. En installant + <application>Ghostscript</application> et en recourant + à un filtre texte spécial, vous pouvez obtenir + de votre imprimante non-&postscript; qu'elle se comporte + comme une véritable imprimante &postscript;.</para> + + <para><application>Ghostscript</application> fait partie du + catalogue des logiciels portés, de nombreuses + versions sont disponibles, la version la plus couramment + utilisée est <filename + role="package">print/ghostscript-gpl</filename>.</para> + + <para>Pour émuler du &postscript;, il nous faut faire + en sorte que le filtre texte détecte s'il imprime un + fichier &postscript;. Si ce n'est pas le cas, alors le + filtre doit passer le fichier directement à + l'imprimante; sinon il recourra à + <application>Ghostscript</application> pour tout d'abord le + convertir dans un format que l'imprimante saura + interpréter.</para> + + <para>Voici un exemple: la procédure suivante est un + filtre texte pour les imprimantes Hewlett Packard Deskjet + 500. Pour d'autres modèles, changez le + paramètre <option>-sDEVICE</option> de la commande + <command>gs</command> + (<application>Ghostscript</application>). (Entrez + <command>gs -h</command> pour obtenir une liste des + périphériques reconnus par l'installation + actuelle de <application>Ghostscript</application>).</para> + + <programlisting>#!/bin/sh +# +# ifhp - Imprime du PostScript émulé par Ghostscript sur une DeskJet 500 +# Fichier /usr/local/libexec/ifhp + +# +# Traite LF comme CR+LF (pour éviter l'"effet d'escalier" sur les +# imprimantes HP/PCL): +# +printf "\033&k2G" || exit 2 + +# +# Lit les deux premiers caractères du fichier +# +IFS="" read -r first_line +first_two_chars=`expr "$first_line" : '\(..\)'` + +if [ "$first_two_chars" = "%!" ]; then + # + # Si c'est du PostScript; utiliser Ghostscript pour le convertir et l'imprimer + # + /usr/local/bin/gs -dSAFER -dNOPAUSE -q -sDEVICE=djet500 \ + -sOutputFile=- - && exit 0 +else + # + # Texte brut ou HP/PCL, donc impression directe; effectuer un + # saut de page à la fin pour éjecter la dernière page. + # + echo "$first_line" && cat && printf "\033&l0H" && +exit 0 +fi + +exit 2</programlisting> + + <para>Pour finir, vous devez communiquer à + <application>LPD</application> le filtre utilisé en + positionnant le paramètre + <literal>if</literal>:</para> + + <programlisting>:if=/usr/local/libexec/ifhp:</programlisting> + + <para>Voilà. Vous pouvez entrer <command>lpr + <replaceable>texte.simple</replaceable></command> et + <filename>lpr + <replaceable>peuimporte.ps</replaceable></filename>, et + chacune des deux commandes devrait imprimer avec + succès.</para> </sect3> <sect3 id="printing-advanced-convfilters"> - <title>Conversion Filters</title> - <para></para> + <title>Filtres de conversion</title> + + <para>Après avoir mené à bien la + configuration basique décrite à la section + <link linkend="printing-simple">Configuration simple de + l'imprimante</link>, la première chose que vous + souhaiterez probablement faire sera d'installer des filtres + de conversion pour vos formats de fichiers favoris (le + simple texte ASCII mis à part).</para> + + <sect4> + <title>Pourquoi installer des filtres de conversion?</title> + <indexterm> + <primary>&tex;</primary> + <secondary>imprimer des fichiers DVI</secondary> + </indexterm> + + <para>Les filtres de conversion facilitent l'impression de + différentes sortes de fichiers. Par exemple, + supposons que nous travaillions énormément + avec le système de composition &tex;, et que nous + ayons une imprimante &postscript;. Chaque fois que nous + générerons un fichier DVI à partir de + &tex;, nous ne pouvons l'imprimer directement avant + d'avoir converti ce fichier DVI en &postscript;. La + séquence de commandes serait la suivante:</para> + + <screen>&prompt.user; <userinput>dvips <replaceable>seaweed-analysis.dvi</replaceable></userinput> +&prompt.user; <userinput>lpr <replaceable>seaweed-analysis.ps</replaceable></userinput></screen> + + <para>En installant un filtre de conversion pour fichiers + DVI, nous pouvons à chaque fois nous passer de + l'étape de conversion manuelle en chargeant + <application>LPD</application> de le faire à notre + place. Maintenant, à chaque fois que nous avons un + fichier DVI, nous ne sommes plus qu'à un pas de + l'impression:</para> + + <screen>&prompt.user; <userinput>lpr -d <replaceable>seaweed-analysis.dvi</replaceable></userinput></screen> + + <para>Nous faisons en sorte que + <application>LPD</application> se charge de la conversion + du fichier DVI à notre place en positionnant + l'option <option>-d</option>. La section <link + linkend="printing-lpr-options-format">Options de + conversion et de formatage</link> donne la liste des + options de conversion.</para> + + <para>Pour chacune des options de conversion que vous voulez + faire accepter par une imprimante, installez un + <emphasis>filtre de conversion</emphasis> et indiquez son + chemin d'accès dans + <filename>/etc/printcap</filename>. Un filtre de + conversion ressemble au filtre texte de notre + configuration de base (voir la section <link + linkend="printing-textfilter">Installer le filtre + texte</link>), à ceci près qu'au lieu + d'imprimer du texte brut, le filtre convertit le fichier + en un format compréhensible par + l'imprimante.</para> + </sect4> + + <sect4> + <title>Quels filtres de conversion dois-je + installer?</title> + + <para>Vous devez installer les filtres de conversion que + vous vous attendez à utiliser. Si vous imprimez + beaucoup de données DVI, alors un filtre de + conversion DVI est dans la logique des choses. Si vous + devez imprimer beaucoup de troff, alors vous aurez + sûrement besoin d'un filtre troff.</para> + + <para>Le tableau suivant récapitule les filtres avec + lesquels <application>LPD</application> fonctionne, leurs + paramètres <filename>/etc/printcap</filename>, et + comment les invoquer avec la + <command>lpr</command>:</para> + + <informaltable frame="none" pgwide="1"> + <tgroup cols="3"> + <thead> + <row> + <entry>Type de fichier</entry> + <entry>paramètre <filename>/etc/printcap</filename> + </entry> + <entry>option <command>lpr</command></entry> + </row> + </thead> + + <tbody> + <row> + <entry>cifplot</entry> + <entry><literal>cf</literal></entry> + <entry><option>-c</option></entry> + </row> + + <row> + <entry>DVI</entry> + <entry><literal>df</literal></entry> + <entry><option>-d</option></entry> + </row> + + <row> + <entry>plot</entry> + <entry><literal>gf</literal></entry> + <entry><option>-g</option></entry> + </row> + + <row> + <entry>ditroff</entry> + <entry><literal>nf</literal></entry> + <entry><option>-n</option></entry> + </row> + + <row> + <entry>code FORTRAN</entry> + <entry><literal>rf</literal></entry> + <entry><option>-f</option></entry> + </row> + + <row> + <entry>troff</entry> + <entry><literal>tf</literal></entry> + <entry><option>-f</option></entry> + </row> + + <row> + <entry>image en mode point</entry> + <entry><literal>vf</literal></entry> + <entry><option>-v</option></entry> + </row> + + <row> + <entry>texte brut</entry> + <entry><literal>if</literal></entry> + <entry>aucune, <option>-p</option>, or + <option>-l</option></entry> + </row> + </tbody> + </tgroup> + </informaltable> + + <para>Dans notre exemple, utiliser <command>lpr -d</command> + veut dire que l'imprimante a besoin du paramètre + <literal>df</literal> dans l'entrée + <filename>/etc/printcap</filename> la concernant.</para> + + <indexterm><primary>FORTRAN</primary></indexterm> + <para>Aussi fortement que certains puissent s'en émouvoir, + des formats comme le code FORTRAN ou le plot sont probablement + obsolètes. Sur votre site, vous pouvez attribuer de + nouvelles significations à ces options ou à toute + autre option de formatage en installant simplement des filtres personnalisés. Par exemple, + supposons que vous aimeriez imprimer des fichiers Printerleaf + directement (fichiers issus du programme de publication assistée par ordinateur Interleaf), + mais jamais de fichiers plot. Vous pourriez alors installer un + filtre de conversion Printerleaf sous le paramètre + <literal>gf</literal> et ensuite informer vos + utilisateurs que <command>lpr -g</command> veut dire + <quote>imprimer des fichiers Printerleaf</quote>.</para> + </sect4> + + <sect4> + <title>Installer des filtres de conversion</title> + + <para>Etant donné que les filtres de conversion sont des + applications qui ne font pas partie du système &os; + de base, vous devriez les installer dans + <filename>/usr/local</filename>. Le répertoire + <filename class="directory">/usr/local/libexec</filename> est une destination + de choix, car ce sont des programmes spécialisés + que seul <application>LPD</application> lancera; les + utilisateurs ordinaires ne devraient jamais avoir à + les lancer.</para> + + <para>Pour activer un filtre de conversion, précisez son + chemin d'accès dans le paramètre relatif à + l'imprimante de destination dans + <filename>/etc/printcap</filename>.</para> + + <para>Dans notre exemple, nous allons ajouter le filtre de + conversion DVI pour l'imprimante nommée + <literal>bamboo</literal>. Revoici le fichier + <filename>/etc/printcap</filename> d'exemple, avec le nouveau + paramètre <literal>df</literal> pour l'imprimante + <literal>bamboo</literal>:</para> + + <programlisting># +# /etc/printcap pour la machine rose - ajout du filtre df pour bamboo +# +rattan|line|diablo|lp|Diablo 630 Line Printer:\ + :sh:sd=/var/spool/lpd/rattan:\ + :lp=/dev/lpt0:\ + :if=/usr/local/libexec/if-simple: + +bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\ + :sh:sd=/var/spool/lpd/bamboo:\ + :lp=/dev/ttyd5:ms#-parenb cs8 clocal crtscts:rw:\ + :if=/usr/local/libexec/psif:\ + :df=/usr/local/libexec/psdf:</programlisting> + + <para>Le filtre DVI est une procédure nommée + <filename>/usr/local/libexec/psdf</filename>. En voici le + contenu:</para> + + <programlisting>#!/bin/sh +# +# psdf - filtre DVI vers imprimante PostScript +# Fichier /usr/local/libexec/psdf +# +# Appelé par lpd quand l'utilisateur lance lpr -d +# +exec /usr/local/bin/dvips -f | /usr/local/libexec/lprps "$@"</programlisting> + + <para>Cette procédure lance <command>dvips</command> en mode filtre (cela + correspond au paramètre <option>-f</option>) sur + l'entrée standard, qui est le travail d'impression + à exécuter. Ensuite, elle lance le filtre pour imprimante + &postscript; <command>lprps</command> (voir la section + <link linkend="printing-advanced-if-conversion">Gérer les + travaux d'impression de texte brut sur des imprimantes + &postscript;</link>) avec les paramètres que + <application>LPD</application> lui a passés. + Le programme <command>lprps</command> utilisera ces paramètres pour + comptabiliser les pages imprimées.</para> + </sect4> + + <sect4> + <title>Exemples de filtre de conversion + supplémentaires</title> + + <para>Il n'existe pas de procédure figée pour l'installation + des filtres de conversion, des exemples fonctionnels sont + présentés dans cette section. Inspirez-vous de ces + exemples pour créer vos propres filtres. Utilisez les + tels quels s'il s'avèrent adéquats.</para> + + <para>Cet exemple présente un filtre de conversion d'image + en mode point (en fait un fichier GIF) pour une imprimante + Hewlett-Packard LaserJet III-Si:</para> + + <programlisting>#!/bin/sh +# +# hpvf - Convertit des fichiers GIF en HP/PCL, puis les imprime +# Fichier /usr/local/libexec/hpvf + +PATH=/usr/X11R6/bin:$PATH; export PATH +giftopnm | ppmtopgm | pgmtopbm | pbmtolj -resolution 300 \ + && exit 0 \ + || exit 2</programlisting> + + <para>Son fonctionnement est le suivant: il convertit le fichier + GIF en un format portable universel, puis en format + portable en niveau de gris, et ensuite + en bitmap portable, qu'il convertit enfin + en données compatibles LaserJet/PCL.</para> + + <para>Voici le <filename>/etc/printcap</filename> comportant une + entrée pour une imprimante recourant au filtre + ci-dessus:</para> + + <programlisting># +# /etc/printcap pour la machine orchid +# +teak|hp|laserjet|Hewlett Packard LaserJet 3Si:\ + :lp=/dev/lpt0:sh:sd=/var/spool/lpd/teak:mx#0:\ + :if=/usr/local/libexec/hpif:\ + :vf=/usr/local/libexec/hpvf:</programlisting> + + <para>La procédure suivante est un filtre de conversion de + données troff du système de composition groff pour + l'imprimante &postscript; <literal>bamboo</literal>:</para> + + <programlisting>#!/bin/sh +# +# pstf - Convertit des données troff de groff en PS, puis imprime. +# Fichier /usr/local/libexec/pstf +# +exec grops | /usr/local/libexec/lprps "$@"</programlisting> + + <para>La procédure ci-dessus emploie de nouveau + <command>lprps</command> pour gérer la communication + avec l'imprimante. S'il s'agissait d'une imprimante sur port + parallèle, nous utiliserions plutôt la procédure + suivante:</para> + + <programlisting>#!/bin/sh +# +# pstf - Convertit des données troff de groff en PS, puis imprime. +# Fichier /usr/local/libexec/pstf +# +exec grops</programlisting> + + <para>C'est tout. Voici l'entrée qu'il faut ajouter dans + <filename>/etc/printcap</filename> pour activer le filtre:</para> + + <programlisting>:tf=/usr/local/libexec/pstf:</programlisting> + + <para>Voici un exemple qui pourrait faire rougir les vieux briscards + de FORTRAN. C'est un filtre de code FORTRAN pour toute + imprimante sachant imprimer du texte brut. Nous l'installerons + pour l'imprimante <literal>teak</literal>:</para> + + <programlisting>#!/bin/sh +# +# hprf - filtre texte FORTRAN pour LaserJet 3si: +# Fichier /usr/local/libexec/hprf +# + +printf "\033&k2G" && fpr && printf "\033&l0H" && + exit 0 +exit 2</programlisting> + + <para>Et nous ajouterons cette ligne dans + <filename>/etc/printcap</filename> pour l'imprimante + <literal>teak</literal> afin d'activer le filtre:</para> + + <programlisting>:rf=/usr/local/libexec/hprf:</programlisting> + + <para>Voici un dernier exemple, quelque peu complexe. Nous allons + ajouter un filtre DVI pour l'imprimante LaserJet + <literal>teak</literal> présentée ci-dessus. Tout + d'abord, la partie facile: mettre à jour + <filename>/etc/printcap</filename> avec l'emplacement du + filtre DVI:</para> + + <programlisting>:df=/usr/local/libexec/hpdf:</programlisting> + + <para>Et maintenant, la partie difficile: écrire le filtre. + Pour cela, nous avons besoin d'un programme de conversion + DVI-vers-LaserJet/PCL. Le catalogue des logiciels portés + (voyez la section <link linkend="ports">Le catalogue des logiciels + portés</link>) en possède un: <filename + role="package">print/dvi2xx</filename>. + Installer ce logiciel porté nous fournira le programme + dont nous avons besoin, <command>dvilj2p</command>, qui + convertit le DVI en code compatible LaserJet IIp, LaserJet III et + LaserJet 2000.</para> + + <para>L'utilitaire <command>dvilj2p</command> rend le filtre + <command>hpdf</command> assez complexe, parce que + <command>dvilj2p</command> ne sait pas lire l'entrée + standard. Il lui faut un nom de fichier. Pire encore, le nom du fichier doit se terminer par + <filename>.dvi</filename>, ce qui rend l'utilisation de + <filename>/dev/fd/0</filename> pour l'entrée standard + problématique. Nous pouvons contourner cette + difficulté en créant un lien symbolique temporaire + (se terminant par <filename>.dvi</filename>) pointant vers + <filename>/dev/fd/0</filename>, obligeant ainsi + <command>dvilj2p</command> à lire l'entrée + standard.</para> + + <para>Le seul petit accroc restant est que nous ne pouvons pas + utiliser <filename>/tmp</filename> pour le lien temporaire. Les + liens symboliques ont pour propriétaire l'utilisateur et le + group <username>bin</username>. Le filtre est lancé sous + l'utilisateur <username>daemon</username>. Et le bit <quote>sticky</quote> est + positionné sur le répertoire + <filename>/tmp</filename>. Le filtre peut créer le lien, + mais il ne pourra pas nettoyer lorsqu'il aura fini et supprimer + ce lien puisqu'il appartient à un utilisateur + différent.</para> + + <para>Au lieu de ça, le filtre créera le lien dans + le répertoire courant, qui est le répertoire + de la file d'attente des travaux d'impression (précisé par le paramètre + <literal>sd</literal> dans <filename>/etc/printcap</filename>). + C'est l'endroit idéal pour faire travailler les filtres, + particulièrement parce qu'il y a (parfois) plus d'espace + disque libre dans ce répertoire que + sous <filename>/tmp</filename>.</para> + + <para>Voici, enfin, le filtre:</para> + + <programlisting>#!/bin/sh +# +# hpdf - Imprime des données DVI sur une imprimante HP/PCL +# Fichier /usr/local/libexec/hpdf + +PATH=/usr/local/bin:$PATH; export PATH + +# +# Définit une fonction de nettoyage de nos fichiers temporaires. Ils prennent place +# dans le répertoire courant, qui sera le répertoire +# de file d'attente +# de l'imprimante. +# +cleanup() { + rm -f hpdf$$.dvi +} + +# +# Définit une fonction de gestion des erreurs fatales: affiche le message +# d'erreur et retourne 2. Ce code d'erreur de 2 indique à LPD +# de ne pas essayer de réimprimer le travail d'impression +# +fatal() { + echo "$@" 1>&2 + cleanup + exit 2 +} + +# +# Si l'utilisateur enlève le travail d'impression, LPD envoie SIGINT, donc +# il faut capturer le signal SIGINT +# (et quelques autres signaux) pour nettoyer après notre passage. +# +trap cleanup 1 2 15 + +# +# Assurons-nous qu'il n'y ait pas conflit ce nom avec des fichiers existants. +# +cleanup + +# +# Lien du fichier DVI vers l'entrée standard (fichier à imprimer). +# +ln -s /dev/fd/0 hpdf$$.dvi || fatal "Cannot symlink /dev/fd/0" + +# +# Conversion LF = CR+LF +# +printf "\033&k2G" || fatal "Cannot initialize printer" + +# +# Conversion et impression. Le code de retour de dvilj2p ne semble +# pas fiable: ignorons-le. +# +dvilj2p -M1 -q -e- dfhp$$.dvi + +# +# Nettoyage et sortie de la procédure +# +cleanup +exit 0</programlisting> + + </sect4> + + <sect4 id="printing-advanced-autoconv"> + <title>Conversion automatique: une alternative aux filtres de + conversion</title> + + <para>Tous ces filtres de conversion apportent beaucoup à + votre environnement d'impression, mais nécessitent que + l'utilisateur précise (dans la ligne de commande + &man.lpr.1;) lequel utiliser. Si vos utilisateurs ne sont pas + particulièrement versés en informatique, + préciser une option de filtre sera problématique. Mais ce + qui s'avère pire encore est qu'une option de filtre mal + choisie peut lancer un filtre sur un type de fichier erroné + et causer l'impression de centaines de pages.</para> + + <para>Plutôt que d'installer quelque filtre de conversion + que ce soit, vous préférerez sans doute laisser + le filtre texte (puisque c'est le filtre par défaut) + déterminer le type de fichier qu'on lui a demandé + d'imprimer et lancer automatiquement le filtre de conversion + approprié. Des outils comme <command>file</command> + peuvent s'avérer utiles dans ce cas. Bien entendu, il sera + difficile d'établir les différences entre + <emphasis>certains</emphasis> types de fichiers—et vous + pouvez toujours, bien sûr, fournir des filtres de conversion + uniquement pour eux.</para> + + <indexterm><primary>apsfilter</primary></indexterm> + <indexterm> + <primary>imprimer</primary> + <secondary>filtres</secondary> + <tertiary>apsfilter</tertiary> + </indexterm> + + <para>Le catalogue des logiciels portés &os; contient un + filtre texte, nommé <command>apsfilter</command> + (<filename role="package">print/apsfilter</filename>), qui + sait effectuer la conversion automatique. Il peut + reconnaître le texte brut, le &postscript; les + fichiers DVI et quasiment n'importe quelle sorte de + fichier, effectuer les conversions appropriées et + imprimer.</para> + </sect4> </sect3> <sect3 id="printing-advanced-of"> - <title>Output Filters</title> - <para></para> + <title>Filtres de sortie</title> + + <para>Le gestionnaire d'impression + <application>LPD</application> reconnaît un autre + type de filtre dont nous n'avons pas + encore discuté: le filtre de sortie. Un filtre de + sortie est destiné à l'impression de texte brut + seulement, comme le filtre texte, mais avec de nombreuses + simplifications. Si vous utilisez un filtre de sortie mais pas + de filtre texte, alors:</para> + + <itemizedlist> + <listitem> + <para><application>LPD</application> lance un filtre de sortie + une seule fois par travail d'impression, au lieu d'une fois + pour chacun des fichiers du travail d'impression.</para> + </listitem> + + <listitem> + <para><application>LPD</application> ne fournit rien pour + permettre au filtre de sortie de + repérer le début ou la fin des fichiers du + travail d'impression.</para> + </listitem> + + <listitem> + <para><application>LPD</application> ne passe pas le nom de + l'utilisateur ou le nom de la machine au filtre, qui n'est + donc pas prévu pour effectuer la + comptabilisation de l'impression. En fait, il ne + reçoit que deux paramètres:</para> + + <cmdsynopsis> + <command>nom-du-filtre</command> + <arg choice="plain">-w<replaceable>largeur</replaceable></arg> + <arg choice="plain">-l<replaceable>hauteur</replaceable></arg> + </cmdsynopsis> + + <para>Où <replaceable>largeur</replaceable> provient du + paramètre <literal>pw</literal> et + <replaceable>hauteur</replaceable> du paramètre + <literal>pl</literal> de l'entrée + <filename>/etc/printcap</filename> pour l'imprimante en + question.</para> + </listitem> + </itemizedlist> + + <para>Ne vous laissez pas séduire par la simplicité + d'un filtre de sortie. Si vous désirez que chaque fichier + d'un travail d'impression commence sur une page différente, + un filtre de sortie <emphasis>ne conviendra pas</emphasis>. + Utilisez un filtre texte (également appelé filtre + d'entrée); voir la section <link + linkend="printing-textfilter">Installer le filtre texte</link>. De + plus, le filtre de sortie se révèle en fait + <emphasis>plus complexe</emphasis> en ce sens qu'il doit examiner + le flux d'octets qui lui est envoyé pour y rechercher + des caractères spéciaux et qu'il + doit s'envoyer à lui-même des signaux comme s'ils + provenaient de <application>LPD</application>.</para> + + <para>Toutefois, un filtre de sortie s'avère + <emphasis>nécessaire</emphasis> si vous désirez des + pages d'en-tête et avez besoin d'envoyer des séquences + d'échappement ou d'autres chaînes d'initialisation + afin de pouvoir imprimer la page d'en-tête. (Mais il est + également <emphasis>futile</emphasis> si vous voulez imputer + les pages d'en-tête au compte de l'utilisateur, puisque + <application>LPD</application> ne livre pas d'information + sur l'utilisateur ou la machine au filtre de sortie).</para> + + <para>Sur une seule imprimante, <application>LPD</application> + permet à la fois un filtre de sortie et des filtres texte ou + autres. Dans de tels cas, <application>LPD</application> ne lancera + le filtre de sortie que pour imprimer la page d'en-tête + (consultez la section <link + linkend="printing-advanced-header-pages">Pages + d'en-tête</link>). <application>LPD</application> attend + alors que le filtre de sortie <emphasis>s'arrête + par lui-même</emphasis> en envoyant deux octets au filtre: ASCII 031 suivi + d'ASCII 001. Lorsqu'un filtre de sortie lit ces deux octets + (031,001), il devrait s'arrêter en s'envoyant à + lui-même un <literal>SIGSTOP</literal>. Lorsque + <application>LPD</application> a fini d'exécuter les + autres filtres, il relance le filtre de sortie en lui envoyant + un <literal>SIGCONT</literal>.</para> + + <para>S'il y a un filtre de sortie mais <emphasis>aucun</emphasis> + filtre texte et que <application>LPD</application> s'occupe + d'un travail d'impression concernant du texte brut, alors + <application>LPD</application> utilise le filtre de sortie pour + réaliser ce travail d'impression. Comme exposé + plus haut, le filtre de sortie imprimera chacun des travaux + d'impression séquentiellement sans que des sauts de page + ou autres formes d'avancement du + papier ne surviennent, et ce n'est vraisemblablement + <emphasis>pas</emphasis> ce que vous désirez. Dans + presque tous les cas, il vous faut un filtre texte.</para> + + <para>Le programme <command>lpf</command>, que nous avons + présenté précédemment comme un filtre texte, peut + également fonctionner en tant que filtre de sortie. Si + vous avez besoin d'un filtre de sortie vite-fait-bien-fait mais + ne voulez pas écrire le code d'examen d'octets et d'envoi + de signal, essayez <command>lpf</command>. Vous pouvez + également inclure <command>lpf</command> dans une procédure + pour prendre en charge tout code d'initialisation qui pourrait + être requis par l'imprimante.</para> </sect3> <sect3 id="printing-advanced-lpf"> - <title><command>lpf</command>: a Text Filter</title> - <para></para> + <title><command>lpf</command>: un filtre texte</title> + + <para>Le programme <filename>/usr/libexec/lpr/lpf</filename> qui + est fourni avec la distribution binaire &os; est un filtre texte + (un filtre d'entrée) qui sait indenter la sortie (un + travail d'impression soumis avec <command>lpr -i</command>), + laisse passer les caractères littéraux (travail + d'impression soumis avec <command>lpr -l</command>), ajuste la + position d'impression des retours arrière et des + tabulations dans le travail d'impression, et comptabilise les + pages imprimées. Il peut également servir + de filtre de sortie.</para> + + <para>Le filtre <command>lpf</command> convient à de nombreux + environnements d'impression. Et bien qu'il ne puisse pas envoyer de + séquences d'initialisation à une imprimante, il est + aisé d'écrire une procédure pour effectuer + l'initialisation nécessaire et ensuite exécuter + <command>lpf</command>.</para> + + <indexterm><primary>page accounting</primary></indexterm> + <indexterm> + <primary>accounting</primary> + <secondary>imprimante</secondary> + </indexterm> + + <para>Afin que <command>lpf</command> mène à bien la + comptabilisation des pages, il faut que des valeurs correctes + soient indiquées pour les paramètres + <literal>pw</literal> et <literal>pl</literal> dans le fichier + <filename>/etc/printcap</filename>. Il utilise ces valeurs pour + déterminer combien de texte peut être imprimé + sur une page et combien de pages ont été + imprimées dans le travail d'impression d'un utilisateur. + Pour plus d'informations sur la comptabilisation de l'impression, + lisez la section + <link linkend="printing-advanced-acct">Comptabiliser l'utilisation + de l'imprimante</link>.</para> </sect3> + </sect2> + + <sect2 id="printing-advanced-header-pages"> + <title>Pages d'en-tête</title> + + <para>Si vous avez <emphasis>beaucoup</emphasis> d'utilisateurs, et + que tous utilisent des imprimantes diverses, alors vous allez + certainement envisager les <emphasis>pages + d'en-tête</emphasis> comme un mal nécessaire.</para> + + <indexterm> + <primary>bannières</primary> + <see>pages d'en-tête</see> + </indexterm> + <indexterm><primary>pages d'en-tête</primary></indexterm> + + <para>Les pages d'en-tête, également appelées + <emphasis>bannières</emphasis> ou + <emphasis>burst page</emphasis>, identifient à qui + appartiennent les travaux d'impression après qu'ils + aient été imprimés. Elles sont en + général imprimées en caractères de + grande taille et en gras, peuvent comporter des bordures + décorées, de sorte qu'elles contrastent dans + une pile d'impressions avec les véritables documents formant + les travaux d'impression des utilisateurs. Elles leur permettent + de retrouver facilement leurs travaux d'impression. + L'inconvénient majeur d'une page d'en-tête est qu'elle + représente une page supplémentaire à + imprimer pour chacun des travaux d'impression, son utilité + éphémère ne dépasse pas quelques + minutes, et elle termine au recyclage du papier ou dans une corbeille. + (Notez que une page d'en-tête est liée à chaque + travail d'impression et non à chaque fichier dans un travail + d'impression: il se pourrait donc que le gâchis de papier ne + soit pas si grand.)</para> + + <para>Le système <application>LPD</application> peut fournir + des pages d'en-tête automatiquement pour vos impressions + <emphasis>si</emphasis> votre imprimante sait imprimer directement du texte + brut. Si vous disposez d'une imprimante &postscript;, + il vous faudra un programme externe pour générer la + page d'en-tête; lisez la section <link + linkend="printing-advanced-header-pages-ps">Les pages d'en-tête + sur les imprimantes &postscript;</link>.</para> + + <sect3 id="printing-advanced-header-pages-enabling"> + <title>Activer les pages d'en-tête</title> + + <para>Dans la section <link linkend="printing-simple">Configuration + simple de l'imprimante</link>, nous avons désactivé + les pages d'en-tête en positionnant le paramètre + <literal>sh</literal> (ce qui signifie <quote>suppress + header</quote>, soit <quote>suppression des + en-têtes</quote>) dans <filename>/etc/printcap</filename>. + Pour activer les pages d'en-tête sur une imprimante, il + suffit d'enlever ce paramètre + <literal>sh</literal>.</para> + + <para>Cela semble trop facile, n'est-ce pas?</para> + + <para>C'est vrai. Il se <emphasis>pourrait</emphasis> que vous + ayez à fournir un filtre de sortie pour envoyer des + chaînes d'initialisation à l'imprimante. Voici + un exemple de filtre sortie pour les imprimantes Hewlett-Packard + compatibles-PCL:</para> + + <programlisting>#!/bin/sh +# +# hpof - filtre de sortie pour les imprimantes Hewlett Packard compatibles PCL +# Fichier /usr/local/libexec/hpof + +printf "\033&k2G" || exit 2 +exec /usr/libexec/lpr/lpf</programlisting> + + <para>Spécifiez le chemin d'accès au filtre de + sortie avec le paramètre <literal>of</literal>. Lisez + la section <link linkend="printing-advanced-of">Filtres de + sortie</link> pour plus de détails.</para> + + <para>Voici un fichier <filename>/etc/printcap</filename> + d'exemple pour l'imprimante <literal>teak</literal> que nous + avons présentée plus haut; nous avons activé + les pages d'en-tête et ajouté le fichier de sortie + ci-dessus:</para> + + <programlisting># +# /etc/printcap pour la machine orchid +# +teak|hp|laserjet|Hewlett Packard LaserJet 3Si:\ + :lp=/dev/lpt0:sd=/var/spool/lpd/teak:mx#0:\ + :if=/usr/local/libexec/hpif:\ + :vf=/usr/local/libexec/hpvf:\ + :of=/usr/local/libexec/hpof:</programlisting> + + <para>Désormais, lorsque les utilisateurs lancent des + travaux d'impression avec <literal>teak</literal>, ils obtiennent + une page d'en-tête avec chaque travail d'impression. Si + vos utilisateurs désirent perdre du temps à + rechercher leurs impressions, ils peuvent omettre la page + d'en-tête en soumettant le travail d'impression avec la + commande <command>lpr -h</command>; lisez la section + <link linkend="printing-lpr-options-misc">Options des pages + d'en-tête</link> pour connaître plus d'options + &man.lpr.1;.</para> + + <note> + <para><application>LPD</application> imprime un + caractère de saut de page après une + page d'en-tête. Si votre imprimante utilise un + autre caractère ou séquence de + caractères différente pour éjecter une page, + précisez-le avec le paramètre + <literal>ff</literal> dans + <filename>/etc/printcap</filename>.</para> + </note> + </sect3> + + <sect3 id="printing-advanced-header-pages-controlling"> + <title>Contrôle des pages d'en-tête</title> + + <para>Une fois les pages d'en-tête activées, + <application>LPD</application> produira un <emphasis>en-tête + long</emphasis>, c'est à dire une page entière de + grands caractères identifiant l'utilisateur, le nom + de la machine et le travail d'impression. Voici un exemple + (<username>kelly</username> a lancé le travail d'impression nommé + <quote>outline</quote> depuis la machine <hostid>rose</hostid>):</para> + + <programlisting> k ll ll + k l l + k l l + k k eeee l l y y + k k e e l l y y + k k eeeeee l l y y + kk k e l l y y + k k e e l l y yy + k k eeee lll lll yyy y + y + y y + yyyy + + + ll + t l i + t l + oooo u u ttttt l ii n nnn eeee + o o u u t l i nn n e e + o o u u t l i n n eeeeee + o o u u t l i n n e + o o u uu t t l i n n e e + oooo uuu u tt lll iii n n eeee + + + + + + + + + + r rrr oooo ssss eeee + rr r o o s s e e + r o o ss eeeeee + r o o ss e + r o o s s e e + r oooo ssss eeee + + + + + + + + Job: outline + Date: Sun Sep 17 11:04:58 1995</programlisting> + + <para><application>LPD</application> ajoute un saut de page + à ce texte de sorte que le travail d'impression commence + sur une nouvelle page (à moins que <literal>sf</literal> + (supprimer les sauts de page) ne soit dans l'entrée correspondant + à l'imprimante dans <filename>/etc/printcap</filename>).</para> + + <para>Si vous préférez, <application>LPD</application> peut + générer des <emphasis>en-tête courts</emphasis>; ajoutez + le paramètre <literal>sb</literal> (en-tête court) dans le + fichier <filename>/etc/printcap</filename>. La + page d'en-tête ressemblera à ceci:</para> + + <programlisting>rose:kelly Job: outline Date: Sun Sep 17 11:07:51 1995</programlisting> + + <para>Par défaut également, + <application>LPD</application> imprime d'abord la page + d'en-tête, puis le travail d'impression. Pour inverser ce + comportement, placez le paramètre <literal>hl</literal> + (en-tête à la fin) dans <filename>/etc/printcap</filename>.</para> + </sect3> + + <sect3 id="printing-advanced-header-pages-accounting"> + <title>Comptabiliser les pages d'en-tête</title> + + <para>Utiliser les pages d'en-tête fournies par + <application>LPD</application> provoque un comportement + particulier lorsqu'il s'agit de comptabiliser l'utilisation de + l'imprimante: les pages d'en-tête doivent être + <emphasis>gratuites</emphasis>.</para> + + <para>Pourquoi?</para> + + <para>Parce que le filtre de sortie est le seul programme externe + pouvant tenir les comptes qui aura le contrôle lors de + l'impression de la page d'en-tête, et qu'aucune + information sur <emphasis>l'utilisateur ou le nom + de la machine</emphasis> ne lui est donnée ni aucun + fichier de comptabilisation, par conséquent il ne sait + pas à qui attribuer le coût de l'utilisation + de l'imprimante. Il ne suffit pas non plus de + simplement <quote>ajouter une page</quote> au filtre + texte ou un quelconque filtre de conversion (qui, eux, + possèdent des informations sur l'utilisateur et la + machine) puisque les utilisateurs peuvent supprimer les + pages d'en-tête avec <command>lpr -h</command>. Ils + pourraient toujours se voir imputer des pages d'en-tête + qu'ils n'auraient pas imprimées. En somme, + <command>lpr -h</command> demeurera l'option favorite des + utilisateurs soucieux de l'environnement, mais vous ne pouvez + aucunement les inciter à l'utiliser.</para> + + <para>Il ne <emphasis>suffit pas non plus</emphasis> de + laisser chacun des filtres générer ses propres + pages d'en-tête (ce qui permettrait de savoir à + qui imputer les coûts). Si les utilisateurs + désiraient omettre les pages d'en-tête avec + <command>lpr -h</command>, ils les obtiendraient quand + même et le coût leur serait attribué puisque + <application>LPD</application> ne donne aucun renseignement sur + l'emploi de l'option <option>-h</option> à aucun des + filtres.</para> + + <para>Alors, quelles sont les options à votre disposition?</para> + + <para>Vous pouvez:</para> + + <itemizedlist> + <listitem> + <para>Accepter le comportement de + <application>LPD</application> et la gratuité des pages + d'en-tête.</para> + </listitem> + + <listitem> + <para>Installer une alternative à + <application>LPD</application>, comme + <application>LPRng</application>. La section + <link linkend="printing-lpd-alternatives">Alternatives au + gestionnaire d'impression standard</link> en + dit plus au sujet des autres gestionnaires + d'impression qui peuvent être + substitués à + <application>LPD</application>.</para> + </listitem> + + <listitem> + <para>Ecrire un filtre de sortie + <emphasis>intelligent</emphasis>. Normalement, un filtre de + sortie n'est pas censé faire plus que d'initialiser + une imprimante ou exécuter une conversion simple de + caractères. Il convient aux pages d'en-tête + et aux travaux d'impression de texte brut (lorsqu'il n'y + a aucun filtre (d'entrée) texte). Mais, s'il + existe un filtre texte pour les travaux d'impression de texte, alors <application>LPD</application> ne lancera + le filtre de sortie que pour les pages d'en-tête. Le + filtre de sortie peut également analyser le texte + de la page d'en-tête généré par + <application>LPD</application> pour déterminer quels + sont l'utilisateur et la machine à qui il faut + attribuer le coût de cette page d'en-tête. Le + seul autre problème avec cette méthode est + que le filtre de sortie ne sait toujours pas quel fichier + de comptabilisation utiliser (le nom du fichier + spécifié par le paramètre + <literal>af</literal> ne lui est pas fourni), mais si vous + disposez d'un fichier de comptabilisation bien + identifié, vous pouvez le coder en dur dans le + filtre de sortie. Afin de faciliter l'étape d'analyse, + utilisez le paramètre <literal>sh</literal> + (en-tête courte) dans <filename>/etc/printcap</filename>. D'un + autre côté, tout cela pourrait bien + représenter beaucoup de dérangement, et les + utilisateurs apprécieront certainement davantage + l'administrateur généreux qui propose la + gratuité des pages d'en-tête.</para> + </listitem> + </itemizedlist> + </sect3> + + <sect3 id="printing-advanced-header-pages-ps"> + <title>Les pages d'en-tête sur les imprimantes + &postscript;</title> + + <para>Comme décrit précédemment, + <application>LPD</application> est en mesure de + générer des pages d'en-tête texte convenant + pour de nombreuses d'imprimantes. Bien entendu, &postscript; + ne peut pas imprimer du texte directement, donc la + fonctionnalité de page d'en-tête offerte par + <application>LPD</application> est inutilisable ou presque.</para> + + <para>Une solution manifeste est de faire générer + la page d'en-tête par tous les filtres de conversion et + le filtre texte. Les filtres devraient employer les + paramètres utilisateur et nom de machine pour + générer une page d'en-tête convenable. + L'inconvénient de cette méthode est que les + utilisateurs obtiendront toujours une page d'en-tête, + même s'ils soumettent leurs travaux d'impression avec + <command>lpr -h</command>.</para> + + <para>Examinons cette méthode. La procédure ci-dessous prend + trois paramètres (le nom de l'utilisateur, le nom + de la machine et celui du travail d'impression) et + réalise une page d'en-tête simple en &postscript;:</para> + + <programlisting>#!/bin/sh +# +# make-ps-header - génére une page d'en-tête PostScript sur la sortie standard +# Fichier /usr/local/libexec/make-ps-header +# + +# +# Ce sont des unités PostScript (72 par pouce). A modifier pour A4 ou +# tout autre format papier employé: +# +page_width=612 +page_height=792 +border=72 + +# +# Vérification des paramètres +# +if [ $# -ne 3 ]; then + echo "Usage: `basename $0` <user> <host> <job>" 1>&2 + exit 1 +fi + +# +# Mémorisation des paramètres, pour la lisibilité du PostScript, plus bas. +# +user=$1 +host=$2 +job=$3 +date=`date` + +# +# Envoi du code PostScript sur stdout. +# +exec cat <<EOF +%!PS + +% +% Assurons-nous qu'il n'y a pas d'interférence avec le travail +% utilisateur qui suivra +% +save + +% +% Applique une grosse bordure désagréable autour +% du bord de la page. +% +$border $border moveto +$page_width $border 2 mul sub 0 rlineto +0 $page_height $border 2 mul sub rlineto +currentscreen 3 -1 roll pop 100 3 1 roll setscreen +$border 2 mul $page_width sub 0 rlineto closepath +0.8 setgray 10 setlinewidth stroke 0 setgray + +% +% Affiche le nom de l'utilisateur, de façon jolie, grande et proéminente +% +/Helvetica-Bold findfont 64 scalefont setfont +$page_width ($user) stringwidth pop sub 2 div $page_height 200 sub moveto +($user) show + +% +% Maintenant, les détails ennuyant: +% +/Helvetica findfont 14 scalefont setfont +/y 200 def +[ (Job:) (Host:) (Date:) ] { +200 y moveto show /y y 18 sub def } +forall + +/Helvetica-Bold findfont 14 scalefont setfont +/y 200 def +[ ($job) ($host) ($date) ] { + 270 y moveto show /y y 18 sub def +} forall + +% +% C'est tout +% +restore +showpage +EOF</programlisting> + + <para>Désormais, chacun des filtres de conversion et le + filtre texte peuvent appeler cette procédure pour d'abord + générer la page d'en-tête, et ensuite imprimer + le travail d'impression de l'utilisateur. Voici le filtre + de conversion DVI déjà mentionné plus + haut dans ce document, modifié afin de + générer une page d'en-tête:</para> + + <programlisting>#!/bin/sh +# +# psdf - filtre DVI vers imprimante PostScript +# Fichier /usr/local/libexec/psdf +# +# Appelé par lpd quand l'utilisateur lance lpr -d +# + +orig_args="$@" + +fail() { + echo "$@" 1>&2 + exit 2 +} + +while getopts "x:y:n:h:" option; do + case $option in + x|y) ;; # Ignore + n) login=$OPTARG ;; + h) host=$OPTARG ;; + *) echo "LPD started `basename $0` wrong." 1>&2 + exit 2 + ;; + esac +done + +[ "$login" ] || fail "Pas de nom d'utilisateur" +[ "$host" ] || fail "PAs de nom de machine" + +( /usr/local/libexec/make-ps-header $login $host "DVI File" + /usr/local/bin/dvips -f ) | eval /usr/local/libexec/lprps $orig_args</programlisting> + + <para>Observez que le filtre doit analyser la liste des + paramètres pour déterminer le nom de l'utilisateur et + celui de la machine. L'analyse menée par les autres + filtres de conversion est identique. Toutefois, le filtre + texte réclame un ensemble de paramètres + légèrement différent (voyez la section + <link linkend="printing-advanced-filters">Fonctionnement + des filtres</link>).</para> + + <para>Comme précédemment exposé, cette solution, + quoique relativement simple, invalide l'option de + <quote>suppression de page d'en-tête</quote> (l'option + <option>-h</option>) de <command>lpr</command>. Si les + utilisateurs désiraient épargner la vie d'un + arbre (ou économiser quelques centimes, si vous faites + payer les pages d'en-tête), ils ne seraient pas en + mesure de le faire, puisque chaque filtre va imprimer une page + d'en-tête avec chaque travail d'impression.</para> + + <para>Pour permettre aux utilisateurs de désactiver les + pages d'en-tête en fonction du travail d'impression, + il vous faudra recourir à l'une + des astuces de la section <link + linkend="printing-advanced-header-pages-accounting">Comptabiliser + les pages d'en-tête</link>: écrire un filtre de + sortie qui analyse la page d'en-tête + générée par LPD et produit une version + &postscript;. Si l'utilisateur soumet le travail d'impression + avec <command>lpr -h</command> alors ni + <application>LPD</application> ni votre filtre de sortie ne + généreront de page d'en-tête. Sinon, votre + filtre de sortie lira le texte en provenance de <application>LPD</application> + et enverra la page d'en-tête &postscript; appropriée + à l'imprimante.</para> + + <para>Si vous disposez d'une imprimante &postscript; sur une + interface série, vous pouvez utiliser + <command>lprps</command>, qui est livré avec un filtre + de sortie, <command>psof</command>, qui réalise ce que + nous venons d'exposer ci-dessus. Notez que + <command>psof</command> n'assume pas la tenue de comptes pour + les pages d'en-tête.</para> + </sect3> + </sect2> <sect2 id="printing-advanced-network-printers"> - <title>Networked Printing</title> + <title>Imprimer via un réseau</title> + + <indexterm> + <primary>imprimantes</primary> + <secondary>réseau</secondary> + </indexterm> + <indexterm><primary>impression réseau</primary></indexterm> + + <para>&os; gère l'impression via un réseau: c'est + à dire en envoyant les travaux d'impression à des + imprimantes distantes. L'impression via un réseau + désigne deux choses différentes:</para> + + <itemizedlist> + <listitem> + <para>Accéder à une imprimante connectée + à une machine distante. Vous installez une imprimante + disposant d'une interface conventionnelle, série ou + parallèle, sur une machine. Puis vous configurez + <application>LPD</application> pour permettre l'accès + à l'imprimante depuis d'autres machines du + réseau. La section <link + linkend="printing-advanced-network-rm">Imprimantes + installées sur des machines distantes</link> en + détaillera la mise en œuvre.</para> + </listitem> + + <listitem> + <para>Accéder à une imprimante directement + connectée au réseau. L'imprimante dispose d'une + interface réseau en plus (ou à la place) + d'interfaces plus conventionnelles, série ou + parallèle. Une imprimante de ce genre peut fonctionner + ainsi:</para> + + <itemizedlist> + <listitem> + <para>Elle peut comprendre le protocole <application>LPD</application> + et sait même gérer une file d'attente de travaux + d'impression provenant de machines distantes. En ce cas, + elle se comporte comme une machine normale qui + exécuterait <application>LPD</application>. Suivez + la même procédure que celle exposée + à la section <link + linkend="printing-advanced-network-rm">Imprimantes + installées sur des machines distantes</link> afin + de configurer une imprimante de ce genre.</para> + </listitem> + + <listitem> + <para>Elle peut savoir gérer un flux de données au + travers d'une connexion réseau. Dans ce cas, vous + pouvez <quote>attacher</quote> l'imprimante à l'une + des machines du réseau en la rendant responsable + de la gestion de la file d'impression et de l'envoi des + travaux d'impression à l'imprimante. La section + <link linkend="printing-advanced-network-net-if">Imprimantes + avec des interfaces utilisant des flux réseau</link> + donne quelque indications sur l'installation d'imprimantes de ce + type.</para> + </listitem> + </itemizedlist> + </listitem> + </itemizedlist> <sect3 id="printing-advanced-network-rm"> - <title>Printers Installed on Remote Hosts</title> - <para></para> + <title>Imprimantes installées sur des machines + distantes</title> + + <para>Le gestionnaire d'impression <application>LPD</application> + dispose des fonctions pour gérer l'envoi des travaux d'impression à + d'autres machines exécutant également + <application>LPD</application> (ou un système qui lui + est compatible). Cette fonctionnalité vous permet + d'installer une imprimante sur une machine, puis de + la rendre accessible depuis les autres + machines. Cela fonctionne également avec les imprimantes + disposant d'interfaces réseau comprenant le protocole + <application>LPD</application>.</para> + + <para>Pour activer ce type d'impression à distance, installez + d'abord une imprimante sur une machine, qui sera + <emphasis>la machine d'impression</emphasis>, en suivant les + instructions de configuration basique décrites à la + section <link linkend="printing-simple">Configuration simple de + l'imprimante</link>. Réalisez toute étape de + la <link linkend="printing-advanced">configuration avancée + de l'imprimante</link> dont vous pourriez avoir besoin. Veillez à + tester + l'imprimante et vérifiez qu'elle fonctionne avec les + paramètres de <application>LPD</application> que vous avez + activés. Assurez-vous également que + <emphasis>la machine locale</emphasis> est autorisée à + utiliser le service <application>LPD</application> sur + <emphasis>la machine distante</emphasis> (lisez la section + <link linkend="printing-advanced-restricting-remote">Restreindre + les impressions à distance</link>).</para> + + <indexterm> + <primary>imprimantes</primary> + <secondary>réseau</secondary> + </indexterm> + + <indexterm><primary>impression en réseau</primary></indexterm> + + <para>Si vous utilisez une imprimante avec une interface + réseau qui est compatible avec + <application>LPD</application>, alors <emphasis>la machine + d'impression</emphasis> dans le texte ci-dessous est + l'imprimante elle-même, et le <emphasis>nom de + l'imprimante</emphasis> est le nom que vous avez + paramétré pour l'imprimante. Lisez la documentation + livrée avec votre imprimante ou l'interface + réseau-imprimante.</para> + + <tip> + <para>Si vous utilisez une Hewlett Packard Laserjet, alors le + nom d'imprimante <literal>text</literal> réalisera + la conversion LF en CRLF automatiquement, de sorte que vous + n'aurez pas besoin de la procédure <filename>hpif</filename>.</para> + </tip> + + <para>Ensuite, sur les autres machines pour lesquelles vous + désirez autoriser l'accès à l'imprimante, + créez une ligne dans leur + <filename>/etc/printcap</filename> avec les paramètres + suivants:</para> + + <orderedlist> + <listitem> + <para>Nommez cette entrée comme vous le voulez. Par + souci de simplicité, cependant, vous + préférerez certainement employer les + mêmes nom et alias que ceux utilisés sur + la machine de d'impression.</para> + </listitem> + + <listitem> + <para>Laissez le paramètre <literal>lp</literal> + non-renseigné, + de manière explicite (<literal>:lp=:</literal>).</para> + </listitem> + + <listitem> + <para>Créez un répertoire de file d'impression et + indiquez son chemin d'accès dans le paramètre + <literal>sd</literal>. C'est là où + <application>LPD</application> entreposera les travaux + d'impression avant leur envoi vers la machine + d'impression.</para> + </listitem> + + <listitem> + <para>Indiquez le nom de la machine d'impression avec le paramètre + <literal>rm</literal>.</para> + </listitem> + + <listitem> + <para>Placez le nom de l'imprimante sur <emphasis>la + machine d'impression</emphasis> dans le paramètre + <literal>rp</literal>.</para> + </listitem> + </orderedlist> + + <para>C'est tout. Il n'est pas nécessaire de préciser + la liste des filtres de conversion, les dimensions de la page, + ou quoique ce soit d'autre dans le fichier + <filename>/etc/printcap</filename>.</para> + + <para>Voici un exemple. La machine <hostid>rose</hostid> dispose + de deux imprimantes, <literal>bamboo</literal> et + <literal>rattan</literal>. Nous allons permettre aux utilisateurs + de la machine <hostid>orchid</hostid> d'imprimer avec ces + imprimantes. + Voici le fichier <filename>/etc/printcap</filename> pour + <hostid>orchid</hostid> (apparu dans la section + <link linkend="printing-advanced-header-pages-enabling">Activer + les pages d'en-tête</link>). Il contenait + déjà une entrée pour l'imprimante + <literal>teak</literal>; nous avons ajouté celles pour + les deux imprimantes sur la machine <hostid>rose</hostid>:</para> + + <programlisting># +# /etc/printcap pour la machine orchid - ajout d'imprimantes (distantes) +# sur rose +# + +# +# teak est locale; connectée directement à orchid: +# +teak|hp|laserjet|Hewlett Packard LaserJet 3Si:\ + :lp=/dev/lpt0:sd=/var/spool/lpd/teak:mx#0:\ + :if=/usr/local/libexec/ifhp:\ + :vf=/usr/local/libexec/vfhp:\ + :of=/usr/local/libexec/ofhp: + +# +# rattan est connectée à rose; envoie les travaux pour rattan +# à rose: +# +rattan|line|diablo|lp|Diablo 630 Line Printer:\ + :lp=:rm=rose:rp=rattan:sd=/var/spool/lpd/rattan: + +# +# bamboo est également connectée à rose: +# +bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\ + :lp=:rm=rose:rp=bamboo:sd=/var/spool/lpd/bamboo:</programlisting> + + <para>Ensuite, nous n'avons qu'à créer les + répertoires de file d'impression sur + <hostid>orchid</hostid>:</para> + + <screen>&prompt.root; <userinput>mkdir -p /var/spool/lpd/rattan /var/spool/lpd/bamboo</userinput> +&prompt.root; <userinput>chmod 770 /var/spool/lpd/rattan /var/spool/lpd/bamboo</userinput> +&prompt.root; <userinput>chown daemon:daemon /var/spool/lpd/rattan /var/spool/lpd/bamboo</userinput></screen> + + <para>Maintenant les utilisateurs d'<hostid>orchid</hostid> + peuvent imprimer sur <literal>rattan</literal> et + <literal>bamboo</literal>. Par exemple, si un utilisateur sur + <hostid>orchid</hostid> entrait:</para> + + <screen>&prompt.user; <userinput>lpr -P bamboo -d <replaceable>sushi-review.dvi</replaceable></userinput></screen> + + <para>le système <application>LPD</application> sur + <hostid>orchid</hostid> copierait le travail d'impression dans le + répertoire de file d'impression + <filename>/var/spool/lpd/bamboo</filename> et relèverait qu'il + s'agit d'un travail d'impression DVI. Dès que la machine + <hostid>rose</hostid> dispose d'assez de place dans son + répertoire de file d'impression, les + deux <application>LPD</application> + transfèrent le fichier à <hostid>rose</hostid>. Le + fichier reste en attente dans la file de <hostid>rose</hostid> + jusqu'à son impression. Il sera converti de DVI en + &postscript; (puisque <literal>bamboo</literal> est une imprimante + &postscript;) sur <hostid>rose</hostid>.</para> </sect3> <sect3 id="printing-advanced-network-net-if"> - <title>Printers with Networked Data Stream Interfaces</title> - <para></para> + <title>Imprimantes avec des interfaces utilisant des flux + réseau</title> + + <para>Bien souvent, lorsque vous achetez une carte d'interface + réseau pour une imprimante, vous avez le choix entre + deux versions: l'une qui émule un + gestionnaire d'impression (la version la plus onéreuse), ou + une autre qui ne vous permet que de lui envoyer des + données comme s'il s'agissait d'un port série ou + parallèle (c'est la version la moins chère). Cette + section vous indique comment utiliser cette seconde version moins + onéreuse. Pour la plus chère, lisez la section + précédente <link + linkend="printing-advanced-network-rm">Imprimantes + installées sur des machines distantes</link>.</para> + + <para>Le format du fichier <filename>/etc/printcap</filename> vous + permet de préciser quelle interface série ou + parallèle vous souhaitez utiliser, et (si vous employez + une interface série) à quelle vitesse de + transmission, s'il faut employer le contrôle de flux, les + temporisations pour les tabulations, la conversion des sauts de + lignes, et plus encore. Mais il n'existe aucun moyen de + préciser une connexion à une imprimante qui + écoute sur un port TCP/IP ou un autre port réseau.</para> + + <para>Pour envoyer des données à une imprimante mise + en réseau, il vous faut développer un programme + de communication qui puisse être appelé par les + filtres textes et de conversion. Voici un exemple: la procédure + <command>netprint</command> récupère toutes les données sur + l'entrée standard et les envoie à une imprimante + connectée au réseau. Nous précisons le nom de machine + de l'imprimante dans le premier paramètre et le + numéro de port auquel se connecter dans le + deuxième paramètre de <command>netprint</command>. + Notez qu'il ne gère que la communication unidirectionnelle + (dans le sens &os; vers imprimante); de nombreuses imprimantes + réseau supporte la communication bidirectionnelle, et + vous désirerez certainement en tirer parti (afin de + connaître le statut de l'imprimante, de comptabiliser + l'utilisation, etc.).</para> + + <programlisting>#!/usr/bin/perl +# +# netprint - Filtre texte pour imprimante connectée au réseau +# Fichier /usr/local/libexec/netprint +# +$#ARGV eq 1 || die "Usage: $0 <printer-hostname> <port-number>"; + +$printer_host = $ARGV[0]; +$printer_port = $ARGV[1]; + +require 'sys/socket.ph'; + +($ignore, $ignore, $protocol) = getprotobyname('tcp'); +($ignore, $ignore, $ignore, $ignore, $address) + = gethostbyname($printer_host); + +$sockaddr = pack('S n a4 x8', &AF_INET, $printer_port, $address); + +socket(PRINTER, &PF_INET, &SOCK_STREAM, $protocol) + || die "Can't create TCP/IP stream socket: $!"; +connect(PRINTER, $sockaddr) || die "Can't contact $printer_host: $!"; +while (<STDIN>) { print PRINTER; } +exit 0;</programlisting> + + <para>Nous pouvons maintenant utiliser cette procédure avec + différents filtres. Supposons que nous ayons une + imprimante Diablo 750-N connectée au réseau. Elle + reçoit les données à imprimer sur le port + 5100. Le nom de machine de l'imprimante est + <hostid>scrivener</hostid>. Voici le filtre texte + pour cette imprimante:</para> + + <programlisting>#!/bin/sh +# +# diablo-if-net - Filtre texte pour l'imprimante Diablo `scrivener' écoutant +# le port 5100. Fichier /usr/local/libexec/diablo-if-net +# +exec /usr/libexec/lpr/lpf "$@" | /usr/local/libexec/netprint scrivener 5100</programlisting> + </sect3> + </sect2> + + <sect2 id="printing-advanced-restricting"> + <title>Restreindre l'utilisation de l'imprimante</title> + + <indexterm> + <primary>imprimantes</primary> + <secondary>restreindre l'accès aux</secondary> + </indexterm> + + <para>Cette section fournit des informations sur la restriction + de l'utilisation de l'imprimante. Le système <application>LPD</application> + vous permet de contrôler quels utilisateurs peuvent + accéder à une imprimante, tant localement + qu'à distance, s'il leur est autorisé d'imprimer + en plusieurs exemplaires, quelles sont les tailles maximales de leurs + travaux d'impression et des files d'impression.</para> + + <sect3 id="printing-advanced-restricting-copies"> + <title>Restreindre l'impression en plusieurs exemplaires</title> + + <para>Le système <application>LPD</application> facilite l'impression de + plusieurs copies d'un même fichier par les + utilisateurs. Ils peuvent imprimer leur travail + avec <command>lpr -#5</command> (par exemple) + et obtenir cinq exemplaires de chaque fichier du travail + d'impression. Le fait de savoir s'il s'agit là d'une + bonne idée vous appartient.</para> + + <para>Si vous estimez que les copies multiples provoquent + charge et usure inutiles pour vos imprimantes, vous + pouvez désactiver l'option <option>-#</option> de + &man.lpr.1; en ajoutant le paramètre <literal>sc</literal> + au fichier <filename>/etc/printcap</filename>. Lorsque des + utilisateurs soumettront un travail d'impression avec l'option + <option>-#</option>, ils obtiendront cet affichage:</para> + + <screen>lpr: multiple copies are not allowed</screen> + + <para>Notez que si vous avez mis en œuvre l'accès + à une imprimante distante (voir la section + <link linkend="printing-advanced-network-rm">Imprimantes + installées sur des machines distantes</link>), il + faut que le paramètre <literal>sc</literal> soit + positionné sur les <filename>/etc/printcap</filename> + distants également, sinon vos utilisateurs auront + toujours la possibilité d'imprimer des copies multiples + en passant par une autre machine.</para> + + <para>Voici un exemple. C'est le <filename>/etc/printcap</filename> + pour la machine <hostid>rose</hostid>. L'imprimante + <literal>rattan</literal> est plutôt robuste, et + autorisera donc les copies multiples, par contre l'imprimante + laser <literal>bamboo</literal> est quant à elle plus + délicate, nous interdiront donc les impressions multiples en ajoutant le + paramètre <literal>sc</literal>:</para> + + <programlisting># +# /etc/printcap pour la machine rose - restreint les impressions en plusieurs exemplaires sur bamboo +# +rattan|line|diablo|lp|Diablo 630 Line Printer:\ + :sh:sd=/var/spool/lpd/rattan:\ + :lp=/dev/lpt0:\ + :if=/usr/local/libexec/if-simple: + +bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\ + :sh:sd=/var/spool/lpd/bamboo:sc:\ + :lp=/dev/ttyd5:ms#-parenb cs8 clocal crtscts:rw:\ + :if=/usr/local/libexec/psif:\ + :df=/usr/local/libexec/psdf:</programlisting> + + <para>Maintenant, il nous faut également ajouter le + paramètre <literal>sc</literal> dans le fichier + <filename>/etc/printcap</filename> de <hostid>orchid</hostid> + (et tant que nous y sommes, désactivons les copies multiples + pour l'imprimante <literal>teak</literal>):</para> + + <programlisting># +# /etc/printcap pour la machine orchid - pas d'impression en +# plusieurs exemplaires pour +# l'imprimante locale teak ou l'imprimante distante bamboo +teak|hp|laserjet|Hewlett Packard LaserJet 3Si:\ + :lp=/dev/lpt0:sd=/var/spool/lpd/teak:mx#0:sc:\ + :if=/usr/local/libexec/ifhp:\ + :vf=/usr/local/libexec/vfhp:\ + :of=/usr/local/libexec/ofhp: + +rattan|line|diablo|lp|Diablo 630 Line Printer:\ + :lp=:rm=rose:rp=rattan:sd=/var/spool/lpd/rattan: + +bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\ + :lp=:rm=rose:rp=bamboo:sd=/var/spool/lpd/bamboo:sc:</programlisting> + + <para>En recourant au paramètre <literal>sc</literal>, + nous empêchons l'utilisation de <command>lpr -#</command>, + mais cela n'empêche toujours pas les utilisateurs de + lancer &man.lpr.1; à plusieurs reprises, ou de soumettre + le même fichier plusieurs fois en un seul travail, de + cette façon:</para> + + <screen>&prompt.user; <userinput>lpr <replaceable>forsale.sign forsale.sign forsale.sign forsale.sign forsale.sign</replaceable></userinput></screen> + + <para>Il existe plusieurs moyens de prévenir ces abus (y + compris les ignorer) que vous êtes libres d'essayer.</para> + </sect3> + + <sect3 id="printing-advanced-restricting-access"> + <title>Restreindre l'accès aux imprimantes</title> + + <para>Vous pouvez contrôler qui a le droit d'imprimer sur + quelles imprimantes en utilisant le mécanisme des + groupes &unix; et le paramètre <literal>rg</literal> dans + <filename>/etc/printcap</filename>. Placez simplement les + utilisateurs à qui vous voulez donner l'accès + à une imprimante dans un groupe, et précisez ce + groupe avec le paramètre <literal>rg</literal>.</para> + + <para>Les utilisateurs n'appartenant pas au groupe + (<username>root</username> inclus) se verront gratifiés d'un + + <errorname>lpr: Not a member of the restricted group</errorname> + + s'ils essaient d'imprimer avec l'imprimante + contrôlée.</para> + + <para>De même que pour le paramètre <literal>sc</literal> + (supprimer les exemplaires multiples), il vous faut activer <literal>rg</literal> + sur les machines distantes qui eux aussi ont + accès à vos imprimantes, si vous estimez que + c'est approprié (voir la section <link + linkend="printing-advanced-network-rm">Imprimantes + installées sur des machines distantes</link>).</para> + + <para>Dans notre exemple, nous allons permettre l'accès + à <literal>rattan</literal> à quiconque, mais + seuls les membres du groupe <groupname>artists</groupname> + pourront utiliser <literal>bamboo</literal>. Voici l'habituel + <filename>/etc/printcap</filename> pour la machine + <hostid>rose</hostid>:</para> + + <programlisting># +# /etc/printcap pour la machine rose - restreint au groupe pour bamboo +# +rattan|line|diablo|lp|Diablo 630 Line Printer:\ + :sh:sd=/var/spool/lpd/rattan:\ + :lp=/dev/lpt0:\ + :if=/usr/local/libexec/if-simple: + +bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\ + :sh:sd=/var/spool/lpd/bamboo:sc:rg=artists:\ + :lp=/dev/ttyd5:ms#-parenb cs8 clocal crtscts:rw:\ + :if=/usr/local/libexec/psif:\ + :df=/usr/local/libexec/psdf:</programlisting> + + <para>Ne nous préoccupons pas de l'autre fichier + <filename>/etc/printcap</filename> (pour la machine + <hostid>orchid</hostid>). Bien entendu, n'importe qui sur + <hostid>orchid</hostid> peut imprimer avec + <literal>bamboo</literal>. Selon le cas, nous pourrons autoriser + que certains utilisateurs sur <hostid>orchid</hostid>, et + leur donner accès à + l'imprimante. Ou non.</para> + + <note> + <para>Il ne peut exister qu'un seul groupe de restriction par + imprimante.</para> + </note> + </sect3> + + <sect3 id="printing-advanced-restricting-sizes"> + <title>Contrôler la taille des travaux d'impression</title> + + <indexterm><primary>travaux d'impression</primary></indexterm> + + <para>Si beaucoup de vos utilisateurs accèdent aux + imprimantes, vous aurez sans doute besoin de fixer une + limite supérieure à la taille des fichiers qu'ils + peuvent soumettre à l'impression. Après + tout, le système de fichiers hébergeant les + répertoires de file d'impression ne peut offrir + que l'espace libre dont il dispose, et vous devez + également vous assurer que de la place existe pour + les travaux d'impression des autres utilisateurs.</para> + + <indexterm> + <primary>travaux d'impression</primary> + <secondary>contrôle</secondary> + </indexterm> + + <para><application>LPD</application> vous permet de fixer la + taille maximale en octets qu'un fichier d'un travail + d'impression peut atteindre avec le paramètre + <literal>mx</literal>. Les unités sont exprimées + en blocs de <literal>BUFSIZ</literal>, valant 1024 octets. Si + vous donnez la valeur 0 à ce paramètre, la + taille ne sera pas du tout limitée; en revanche, si + aucun paramètre <literal>mx</literal> n'est + défini, alors une limite par défaut de + 1000 blocs sera utilisée.</para> + + <note> + <para>La limite s'applique aux <emphasis>fichiers</emphasis> dans + un travail d'impression, et <emphasis>non pas</emphasis> à + la taille totale du travail d'impression.</para> + </note> + + <para><application>LPD</application> ne refusera pas un fichier + dont la taille excède la limite que vous fixez pour + une imprimante. Au lieu de cela, il placera les octets + du fichier dans la file jusqu'à ce que la limite soit + atteinte, puis imprimera. Les octets supplémentaires + seront ignorés. S'il s'agit là d'un comportement + approprié est un choix qui vous appartient.</para> + + <para>Ajoutons des limites pour nos imprimantes d'exemple, + <literal>rattan</literal> et <literal>bamboo</literal>. Puisque + les fichiers &postscript; des utilisateurs du groupe <groupname>artists</groupname> ont tendance à + être volumineux, nous allons les limiter à cinq + mégaoctets. Nous ne fixerons aucune limite pour l'imprimante + texte:</para> + + <programlisting># +# /etc/printcap pour la machine rose +# + +# +# Pas de limite sur la taille des travaux: +# +rattan|line|diablo|lp|Diablo 630 Line Printer:\ + :sh:mx#0:sd=/var/spool/lpd/rattan:\ + :lp=/dev/lpt0:\ + :if=/usr/local/libexec/if-simple: + +# +# Limite de cinq mégaoctets: +# +bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\ + :sh:sd=/var/spool/lpd/bamboo:sc:rg=artists:mx#5000:\ + :lp=/dev/ttyd5:ms#-parenb cs8 clocal crtscts:rw:\ + :if=/usr/local/libexec/psif:\ + :df=/usr/local/libexec/psdf:</programlisting> + + + <para>Là encore, les limites ne s'appliquent qu'aux + utilisateurs locaux. Si vous avez mis en place un accès + distant à vos imprimantes, les utilisateurs distants ne + seront pas contraints par ces limites. Il vous faudra + positionner le paramètre <literal>mx</literal> dans les + fichiers + <filename>/etc/printcap</filename> distants également. Lisez + la section <link linkend="printing-advanced-network-rm">Imprimantes + installées sur des machines distantes</link> pour + obtenir plus d'informations sur l'impression à + distance.</para> + + <para>Il existe une autre manière spécifique pour + limiter la taille des travaux d'impression sur les imprimantes + à distance; lisez la section <link + linkend="printing-advanced-restricting-remote">Restreindre les + impressions à distance</link>.</para> + </sect3> + + <sect3 id="printing-advanced-restricting-remote"> + <title>Restreindre les impressions à distance</title> + + <para>Le gestionnaire d'impression + <application>LPD</application> propose plusieurs moyens de + restreindre les travaux d'impression soumis depuis des + machines distants:</para> + + <variablelist> + <varlistentry> + <term>Restrictions en fonction des machines</term> + + <listitem> + <para>Vous pouvez contrôler de quelles machines + distantes les requêtes seront acceptées par + un <application>LPD</application> local avec les fichiers + <filename>/etc/hosts.equiv</filename> et + <filename>/etc/hosts.lpd</filename>. + <application>LPD</application> vérifie qu'une + requête entrante provient d'une machine listée + dans l'un de ces deux fichiers. Si ce n'est pas le cas, + <application>LPD</application> refuse la requête.</para> + + <para>Le format de ces fichiers est simple: un nom de machine + par ligne. Notez que <filename>/etc/hosts.equiv</filename> + est également utilisé par le protocole + &man.ruserok.3;, et qu'il a un impact sur des programmes + comme &man.rsh.1; et &man.rcp.1;, aussi soyez prudent.</para> + + <para>Par exemple, voici le fichier + <filename>/etc/hosts.lpd</filename> présent sur la + machine + <hostid>rose</hostid>:</para> + + <programlisting>orchid +violet +madrigal.fishbaum.de</programlisting> + + <para>Cela signifie que <hostid>rose</hostid> accepte les + requêtes provenant des machines + <hostid>orchid</hostid>, <hostid>violet</hostid> et + <hostid role="fqdn">madrigal.fishbaum.de</hostid>. Si une + quelconque autre machine tente d'accéder au + <application>LPD</application> de <hostid>rose</hostid>, + le travail d'impression sera refusé.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term>Restrictions sur la taille</term> + + <listitem> + <para>Vous pouvez contrôler combien d'espace doit + demeurer libre sur le système de fichiers où + se trouve un répertoire de file d'impression. + Créez un fichier nommé + <filename>minfree</filename> dans le répertoire de + file d'impression pour l'imprimante locale. + Placez dans ce fichier un nombre représentant combien + de blocs disques (de 512 octets) d'espace libre il + doit rester pour qu'un travail d'impression soit + accepté.</para> + + <para>Cela vous permet de vous assurer que des utilisateurs + distants ne rempliront pas votre système de + fichiers. Vous pouvez également vous en servir pour + accorder une certaine priorité aux utilisateurs + locaux: ils pourront placer des travaux d'impression dans + la file bien après que l'espace libre soit tombé + sous le seuil indiqué dans le fichier + <filename>minfree</filename>.</para> + + <para>Par exemple, ajoutons un fichier + <filename>minfree</filename> pour l'imprimante + <literal>bamboo</literal>. Nous examinons + <filename>/etc/printcap</filename> pour trouver le + répertoire de file d'impression pour cette + imprimante; voici l'entrée concernant + <literal>bamboo</literal>:</para> + + <programlisting>bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\ + :sh:sd=/var/spool/lpd/bamboo:sc:rg=artists:mx#5000:\ + :lp=/dev/ttyd5:ms#-parenb cs8 clocal crtscts:rw:mx#5000:\ + :if=/usr/local/libexec/psif:\ + :df=/usr/local/libexec/psdf:</programlisting> + + <para>Le répertoire de file d'impression est + précisé par le paramètre + <literal>sd</literal>. Nous placerons à trois + méga-octets (soit 6144 blocs disque) la limite + d'espace libre devant exister sur le système de + fichiers pour que <application>LPD</application> accepte + les travaux d'impression distants:</para> + + <screen>&prompt.root; <userinput>echo 6144 > /var/spool/lpd/bamboo/minfree + </userinput></screen> + </listitem> + </varlistentry> + + <varlistentry> + <term>Restrictions sur l'utilisateur</term> + + <listitem> + <para>Vous pouvez contrôler quels utilisateurs distants + ont le droit d'imprimer sur les imprimantes locales en + positionnant le paramètre <literal>rs</literal> + dans <filename>/etc/printcap</filename>. Lorsque + <literal>rs</literal> est présent dans + l'entrée d'une imprimante connectée + localement, <application>LPD</application> acceptera les + travaux d'impressions de machines distantes + <emphasis>si</emphasis> l'utilisateur soumettant le travail + possède également un compte sous le + même nom sur la machine locale. Sinon, + <application>LPD</application> refusera le travail + d'impression.</para> + + <para>Ce paramètre se révèle + particulièrement utile dans un environnement + où (par exemple) existent plusieurs services + qui partagent un réseau, et que des utilisateurs + débordent les frontières de ces services. En + leur donnant des comptes sur vos systèmes, vous + leur permettez d'utiliser vos imprimantes depuis les + systèmes de leur propre service. Si vous + préférez les autoriser à n'utiliser + <emphasis>que</emphasis> vos imprimantes et pas les + autres ressources de l'ordinateur, alors vous pouvez leur + attribuer des comptes <quote>bloqués</quote>, sans + répertoire de connexion et avec un interpréteur de + commandes + inutilisable comme <filename>/usr/bin/false</filename>.</para> + </listitem> + </varlistentry> + </variablelist> + </sect3> + </sect2> + + <sect2 id="printing-advanced-acct"> + <title>Comptabiliser l'utilisation de l'imprimante</title> + + <indexterm> + <primary>comptabiliser l'utilisation</primary> + <secondary>imprimante</secondary> + </indexterm> + + <para>Donc vous voulez faire payer vos impressions. Et pourquoi pas? + Le papier et l'encre coûtent de l'argent. Et puis, il y a les + coûts de maintenance—les imprimantes sont constituées + de pièces mobiles et ont tendance à tomber en panne. + Vous avez étudié vos imprimantes, vos modes + d'utilisation et factures de maintenance, et avez abouti à + un coût par page (ou par pied, par mètre, ou + par ce que vous voulez). Maintenant, comment commencer à + comptabiliser les impressions, dans les faits?</para> + + <para>Eh bien, la mauvaise nouvelle est que le + gestionnaire d'impression <application>LPD</application> ne vous aide + pas beaucoup dans ce domaine. La comptabilisation dépend + fortement du type d'imprimante que vous employez, des formats + que vous imprimez et de <emphasis>vos</emphasis> besoins pour ce + qui est de faire payer l'utilisation de l'imprimante.</para> + + <para>Pour mettre en œuvre la comptabilisation, il vous faut + modifier le filtre texte de l'imprimante (pour faire payer les + travaux d'impression de texte brut) et ses filtres de conversion + (pour faire payer les autres formats de fichiers), pour compter les + pages ou demander à l'imprimante combien elle en a + imprimées. Vous ne pouvez pas vous en tirer en + utilisant le filtre de sortie simple, puisqu'il ne peut pas + gérer la comptabilisation. Voir la section <link + linkend="printing-advanced-filter-intro">Les filtres</link>.</para> + + <para>En général, il existe deux façons de + procéder à la comptabilisation:</para> + + <itemizedlist> + <listitem> + <para>La comptabilisation <emphasis>périodique</emphasis> + est la plus habituelle, probablement parce que la plus + facile. Chaque fois que quelqu'un imprime un travail, le + filtre enregistre l'utilisateur, la machine et le nombre de + pages dans un fichier de comptabilisation. Tous les mois, + semestres, années ou toute autre échéance que vous + désirez, vous récupérez les fichiers de + comptabilisation des diverses imprimantes, établissez + les pages imprimées par les utilisateurs, et faites + payer l'utilisation. Purgez ensuite tous les fichiers de + comptabilisation, pour commencer à zéro la nouvelle + période.</para> + </listitem> + + <listitem> + <para>La comptabilisation <emphasis>à la volée</emphasis> + est moins répandue, peut-être parce qu'elle + s'avère plus difficile. Cette méthode laisse + les filtres s'occuper de taxer les utilisateurs pour les + impressions dès qu'ils utilisent les imprimantes. Tout + comme les quotas disques, la comptabilisation est + immédiate. Vous pouvez empêcher les utilisateurs + d'imprimer quand leur compte est dans le rouge, et pourriez + leur fournir un moyen de vérifier et ajuster leurs + <quote>quotas d'impression</quote>. Cependant, cette + méthode nécessite la mise en oeuvre d'une base de + données afin de tracer les utilisateurs et leurs + quotas.</para> + </listitem> + </itemizedlist> + + <para>Le gestionnaire d'impression + <application>LPD</application> gère les deux méthodes + facilement: puisque vous devez fournir les filtres (enfin, la + plupart du temps), vous devez également fournir le code + de comptabilisation. Mais il y a un bon côté: vous + disposez d'une énorme flexibilité dans vos + méthodes de comptabilisation. Par exemple, vous avez le + choix entre les comptabilisations périodique et à la + volée. Vous avez le choix des informations à tracer: noms + d'utilisateurs, noms de machines, types des travaux + d'impression, pages imprimées, surface de papier + utilisée, durée d'impression du travail, etc. Et + vous le faites en modifiant les filtres afin d'enregistrer + ces informations.</para> + + <sect3> + <title>Comptabilisation rapide et simplifiée des impressions</title> + + <para>Deux programmes sont livrés avec &os; qui vous + permettent de mettre en place une comptabilisation + périodique simple immédiatement. Il s'agit du + filtre texte <command>lpf</command>, détaillé dans + la section <link linkend="printing-advanced-lpf">lpf: un + filtre texte</link>, et de &man.pac.8;, un programme qui + rassemble et fait le total des entrées contenues dans des + fichiers de comptabilisation d'impressions.</para> + + <para>Comme indiqué dans la section sur les filtres (<link + linkend="printing-advanced-filters">Fonctionnement des filtres</link>), + <application>LPD</application> lance les filtres texte et de + conversion avec le nom du fichier de comptabilisation à + employer fourni en argument. Les filtres peuvent + utiliser ce paramètre pour savoir où écrire + un enregistrement de comptabilisation. Le nom de ce fichier provient du + paramètre <literal>af</literal> dans + <filename>/etc/printcap</filename>, et si le chemin donné + n'est pas absolu, alors c'est un chemin d'accès relatif + au répertoire de file d'impression.</para> + + <para><application>LPD</application> lance <command>lpf</command> + avec les paramètres de largeur et hauteur de page (qui + correspondent aux paramètres <literal>pw</literal> et + <literal>pl</literal>). Le filtre <command>lpf</command> les utilise + pour déterminer combien de papier sera consommé. + Après avoir envoyé le fichier à + l'imprimante, il enregistre ensuite une entrée dans le + fichier de comptabilisation. Les entrées ressemblent + à ceci:</para> + + <programlisting>2.00 rose:andy +3.00 rose:kelly +3.00 orchid:mary +5.00 orchid:mary +2.00 orchid:zhang</programlisting> + + <para>Vous devriez utiliser un fichier de comptabilisation + séparé pour chaque imprimante, <command>lpf</command> + ne disposant pas de mécanisme de verrouillage + des fichiers, deux <command>lpf</command> pourraient + corrompre leurs entrées respectives s'ils essayaient + d'écrire dans le même fichier en même temps. + Une manière aisée de s'assurer d'un fichier de + comptabilisation séparé pour chaque imprimante est de + recourir au paramètre <literal>af=acct</literal> dans + <filename>/etc/printcap</filename>. Dès lors, un + fichier de comptabilisation, nommé + <filename>acct</filename>, sera placé dans le + répertoire de file d'impression de chaque imprimante.</para> + + <para>Lorsque vous serez prêts à faire payer les + utilisateurs pour leurs impressions, lancez le programme + &man.pac.8;. Placez-vous simplement dans le répertoire + de file d'impression de l'imprimante pour laquelle vous + voulez collecter les informations, et tapez + <command>pac</command>. Vous obtiendrez un récapitulatif + en dollars ressemblant à ceci:</para> + + <screen> Login pages/feet runs price +orchid:kelly 5.00 1 $ 0.10 +orchid:mary 31.00 3 $ 0.62 +orchid:zhang 9.00 1 $ 0.18 +rose:andy 2.00 1 $ 0.04 +rose:kelly 177.00 104 $ 3.54 +rose:mary 87.00 32 $ 1.74 +rose:root 26.00 12 $ 0.52 + +total 337.00 154 $ 6.74</screen> + + <para>Voici les arguments attendus par &man.pac.8:</para> + + <variablelist> + <varlistentry> + <term><option>-P<replaceable>imprimante</replaceable> + </option></term> + + <listitem> + <para>Pour quelle <replaceable>imprimante</replaceable> + effectuer un récapitulatif. Cette option ne + fonctionne que si un chemin d'accès absolu est donné + dans le paramètre <literal>af</literal> de + <filename>/etc/printcap</filename>.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term><option>-c</option></term> + + <listitem> + <para>Trier selon le coût plutôt + qu'alphabétiquement par nom d'utilisateur.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term><option>-m</option></term> + + <listitem> + <para>Ignorer le nom de la machine dans les fichiers de + comptabilisation. Avec cette option, l'utilisateur + <username>smith</username> sur la machine + <hostid>alpha</hostid> est le même que l'utilisateur + <username>smith</username> sur la machine + <hostid>gamma</hostid>. Sans elle, ils représentent + des utilisateurs distincts.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term><option>-p<replaceable>prix</replaceable></option></term> + + <listitem> + <para>Calculer le coût en comptant un + <replaceable>prix</replaceable> en dollars par page ou par pied + au lieu du prix indiqué par le paramètre + <literal>pc</literal> dans <filename>/etc/printcap</filename>, + ou deux cents (la valeur par défaut). Vous pouvez + préciser le <replaceable>prix</replaceable> en nombre + à virgule flottante.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term><option>-r</option></term> + + <listitem> + <para>Inverser l'ordre du tri.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term><option>-s</option></term> + + <listitem> + <para>Créer un fichier de rapport et + tronquer le fichier de comptabilisation.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term><replaceable>nom</replaceable> + <replaceable>…</replaceable></term> + + <listitem> + <para>N'imprimer des statistiques que pour les utilisateurs + dont les <replaceable>nom</replaceable>s sont + donnés.</para> + </listitem> + </varlistentry> + </variablelist> + + <para>Dans le récapitulatif produit par défaut par + &man.pac.8;, vous pouvez lire le nombre de pages imprimées + par chaque utilisateur depuis les différentes machines. Si, sur votre + site, la machine n'a pas d'importance (parce que les utilisateurs + peuvent utiliser n'importe quelle machine), lancez + <command>pac -m</command>, afin de produire le récapitulatif + ci-dessous:</para> + + <screen> Login pages/feet runs price +andy 2.00 1 $ 0.04 +kelly 182.00 105 $ 3.64 +mary 118.00 35 $ 2.36 +root 26.00 12 $ 0.52 +zhang 9.00 1 $ 0.18 + +total 337.00 154 $ 6.74</screen> + + <para>Afin de calculer le montant dû en dollars, &man.pac.8; + utilise le paramètre <literal>pc</literal> de + <filename>/etc/printcap</filename> (200 par défaut, + c'est à dire 2 cents par page). Précisez avec + ce paramètre le prix par page ou par pied, exprimé + en centièmes de cents, que vous voulez imputer aux + impressions. Vous pouvez spécifier cette valeur lorsque vous + lancez &man.pac.8; avec l'option <option>-p</option>. Cependant, + avec cette option, les unités sont exprimées en + dollars, et non en centièmes de cents. Par exemple,</para> + + <screen>&prompt.root; <userinput>pac -p1.50</userinput></screen> + + <para>fait en sorte que chaque page coûte un dollar et cinquante + cents. Vous pouvez vraiment faire des bénéfices + en utilisant cette option.</para> + + <para>Enfin, lancer <command>pac -s</command> enregistrera les + informations du récapitulatif dans un fichier, dont le + nom sera le même que le fichier de comptabilisation de + l'imprimante mais avec le suffixe <literal>_sum</literal>. Il + procède alors à la troncature du fichier de + comptabilisation. Lorsque vous exécutez &man.pac.8; + à nouveau, il relit le fichier récapitulatif pour + établir les totaux de départ, puis ajoute les + informations du fichier de comptabilisation normal.</para> + </sect3> + + <sect3> + <title>Comment compter les pages imprimées?</title> + + <para>Afin de réaliser une comptabilisation précise et cela + même à distance, vous devez pouvoir déterminer + combien un travail d'impression consomme de papier. C'est le + problème principal de la comptabilisation des + impressions.</para> + + <para>Pour du texte brut, ce problème n'est pas + compliqué à résoudre: vous comptez combien + un travail d'impression comporte de lignes et comparez avec + le nombre de lignes par page que gère votre imprimante. + N'oubliez pas de tenir compte des retours arrière + dans le fichier, qui superposent les lignes, ou des longues + lignes qui s'étendent sur une ou plusieurs lignes + physiques supplémentaires.</para> + + <para>Le filtre texte <command>lpf</command> (présenté + à la section <link linkend="printing-advanced-lpf">lpf: un + filtre texte</link>) prend ces éléments en + considération lorsqu'il effectue la comptabilisation. Si + vous écrivez un filtre texte qui doit effectuer une + comptabilisation, vous pouvez vous inspirer du code source de + <command>lpf</command>.</para> + + <para>Mais comment gérer les autres formats?</para> + + <para>Eh bien, pour la conversion DVI-vers-LaserJet ou + DVI-vers-&postscript;, vous pouvez faire analyser les messages de sortie + de <command>dvilj</command> ou <command>dvips</command> par + votre filtre et regarder combien de pages ont été + converties. Vous devriez pouvoir procéder de + manière identique avec d'autres formats de + fichiers et programmes de conversion.</para> + + <para>Mais ces méthodes connaissent un défaut: il se + peut que l'imprimante n'imprime pas toutes ces pages. Par exemple, + un bourrage peut se produire, l'imprimante peut arriver à cours d'encre, ou + exploser — et l'utilisateur serait tout de même + débité.</para> + + <para>Alors, que pouvez-vous faire?</para> + + <para>Il n'existe qu'une seule méthode + <emphasis>sûre</emphasis> pour procéder à une + comptabilisation <emphasis>précise</emphasis>. Prenez + une imprimante qui sache dire combien de papier elle utilise, et + reliez-la par un câble série ou une connection + réseau. Presque toutes les imprimantes &postscript; + gèrent cela. D'autres types et modèles + également (les imprimantes laser réseau Imagen, + par exemple). Modifiez les filtres pour ces imprimantes afin + d'obtenir la consommation de pages après chaque travail + d'impression et faites en sorte qu'elles enregistrent des + informations de comptabilisation basées sur cette + <emphasis>seule</emphasis> valeur. Nul besoin de compter + les lignes ou d'une analyse de fichier susceptible d'être + erronée.</para> + + <para>Bien entendu, vous pouvez toujours être + généreux et rendre toutes les impressions + gratuites.</para> </sect3> </sect2> </sect1> @@ -1765,6 +4588,52 @@ $%&'()*+,-./01234567 <sect1 id="printing-using"> <title>Using Printers ** Traduction en Cours **</title> <para></para> + + <sect2 id="printing-lpr"> + <title>Printing Jobs</title> + + <para></para> + </sect2> + + <sect2 id="printing-lpq"> + <title>Checking Jobs</title> + + <para></para> + </sect2> + + <sect2 id="printing-lprm"> + <title>Removing Jobs</title> + + <para></para> + </sect2> + + <sect2 id="printing-lpr-options"> + <title>Beyond Plain Text: Printing Options</title> + + <sect3 id="printing-lpr-options-format"> + <title>Formatting and Conversion Options</title> + + <para></para> + </sect3> + + <sect3 id="printing-lpr-options-job-handling"> + <title>Job Handling Options</title> + + <para></para> + </sect3> + + <sect3 id="printing-lpr-options-misc"> + <title>Header Page Options</title> + + <para></para> + </sect3> + </sect2> + + <sect2 id="printing-lpc"> + <title>Administering Printers</title> + + <para></para> + </sect2> </sect1> <sect1 id="printing-lpd-alternatives"> |