Si avec les explications pr�c�dentes, tout marche c'est formidable, mais en r�gle g�n�ral, cela ne suffit pas. Regardez ci-dessous ce que l'on obtient sur la DeskJet 500, lorsque j'envoie un fichier texte:
Ceci est la premiere ligne.
Celle-ci est la deuxieme.
Voici la troisieme.
Et alors l'impression d'un fichier PostScript... Vous obtenez le listing complet du code PostScript avec les m�me effets d'escalier. Une horreur.
Il faut donc quelque chose de plus et c'est le r�le des filtres. Les
plus observateurs d'entre vous auront peut-�tre remarqu�
l'existence des param�tres if
(input filter) et of
(output filter) dans le fichier printcap. Pour l'instant nous avons besoin
de if
.
Un filtre est un simple programme ex�cutable qui lit les donn�es sur son entr�e standard et sort le r�sultat sur sa sortie standard.
Commen�ons par �crire un script que vous appellerez
filtre
et qui ajoute des retours chariot avant chaque caract�re
fin de ligne. Ceci �limine l'effet d'escalier.
#!/usr/local/bin/perl
# La ligne ci-dessous doit contenir le chemin complet vers perl
# Ce script doit etre executable: chmod 755 filtre
while(<STDIN>){chop $_; print "$_\r\n";};
# Vous pouvez aussi vouloir terminer avec une fin de page: print "\f";
Dans /etc/printcap
, l'entr�e est modifi�e en
cons�quence:
lp|dj|deskjet:\
:sd=/var/spool/lpd/dj:\
:mx#0:\
:lp=/dev/lp0:\
:if=/var/spool/lpd/dj/filtre:\
:sh:
Essayez d'�crire le filtre en shell qui sera plus efficace que de
charger perl
. Bon allez, je vous aide un peu:
#!/bin/sh
if [ "$1" = -c ]; then
cat
else
sed -e s/$/^M/
fi
# echo -ne suppose que /bin/sh correspond a bash
echo -ne \\f
Notez que '^M' symbolise le caract�re retour-chariot et non pas un
`^' suivi d'un 'M'. Dans emacs, pour saisir ce caract�re, entrez la
s�quence C-q C-m
, alors que sous vi, entrez C-v
C-m
. Le test de $1 permet d'invalider l'insertion du
retour-chariot par la commande lpr -l
A savoir que lpr
g�n�re des param�tres qui sont pass�s au
filtre. Par d�faut il passe -w0
. Si l'option -l
est donn�e, il passe -c
. Ce script est traditionnellement
nomm� /usr/lib/lpf
. Si vous avez plusieurs scripts de la
sorte, une bonne id�e consiste � les mettre tous dans un
sous-r�pertoire, par exemple /usr/lib/lpd
.
Il se peut aussi que votre imprimante puisse passer dans un mode permettant
l'ajout de retour-chariots gr�ce � une s�quence
d'�chappement. Voici un exemple de filtre utilisant la commande
echo -ne
pour envoyer cette s�quence:
#!/bin/sh
# Filtre pour imprimantes HP, permettant de traiter LF comme CRLF
# La commande echo -ne suppose que /bin/sh correspond a bash
echo -ne \\033&k2G
cat
echo -ne \\f
Vous pouvez compliquer les filtres comme bon vous semble. Le mieux est
d'avoir un filtre qui reconna�t le fichier d'entr�e et le
convertit au bon format pour votre imprimante. Un tel filtre est
appel� filtre magique. Ne vous emb�tez pas � les
�crire vous-m�me, il en existe s�rement
d�j� un qui vous convient. Allez voir sur
tsx-11.mit.edu:/pub/linux/sources/usr.bin/magic-filter-x.y.tar.gz
.
Hosting by: Hurra Communications GmbH
Generated: 2007-01-26 18:01:43