Voici un guide pour paramétrer son ordinateur pour l'impression. Il est aussi utile pour régler les problèmes. Nous commençons par la configuration du noyau, et à la fin vous pourrez (normalement) imprimer un fichier ps avec votre imprimante.
Prérequis
ghostscript (AFPL, GNU, ESP, peu importe; voir le livre BLFS pour plus de détails).
Facultatifs : a2ps et psutils (pareil : voir le livre BLFS pour plus de détails).
Astuce
Paramétrer son PC Linux pour l’impression peut être très facile (avec un peu de chance). Si votre installation est simple (un ordinateur et une imprimante avec laquelle vous voulez communiquer, et c’est tout), alors cette astuce est pour vous. Si vous voulez partager votre imprimante avec d’autres ordinateurs ou faire d’autres trucs rigolos, je ne peux pas vous aider.
Première étape
Vérifiez que vous avez le support de l’impression dans votre noyau, soit intégré, soit dans un module. Ma configuration ressemble à cela ; vous n’avez pas forcément besoin des deux dernières options PARPORT :
CONFIG_PARPORT=y
CONFIG_PARPORT_PC=y
CONFIG_PARPORT_PC_CML1=y
CONFIG_PARPORT_SERIAL=y
CONFIG_PRINTER=y
Deuxième étape
Vérifiez que votre imprimante fonctionne et est connectée :
echo -en "blah\f\r" > /dev/lp0
(replacez lp0 par le port auquel votre imprimante est connectée)
Si votre imprimante crache une feuille avec le mot « blah » dessus, très bien. Sinon, vous pouvez être inquiets.
Si votre imprimante est une Epson, la commande ci-dessus ne fonctionnera sans doute pas. Dans ce cas, l’information suivante partagée par Jeroen Coumans pourrait vous aider :
Les imprimantes Epson ne fonctionnent pas sans un caractère spécial
d'abord. L'utilitaire escputil de gimp-print est souvent utilisé pour
cela (c'est sans doute possible de faire ça sans d'abord installer
gimp-print, mais je ne sais pas comment). Voici la commande qui marche
chez moi (Stylus C80) :
escputil -r /dev/usb/lp0 -i
Vous devriez peut-être installer gimp-print de toute façon (mais je ne vous dirais pas comment (ça a l’air facile quand même)), comme les imprimantes Epson sont assez mal supportées par Ghostscript. Sinon, pour compiler seulement escputil,
./configure && make -C lib && make -C src/escputil
fonctionne chez moi.
Troisième étape
Installez votre version favorite de Ghostscript.
Quatrième étape
Saisissez gs -h
dans un shell et sélectionnez votre imprimante
à partir des pages de pilotes proposés. Si votre pilote n’apparaît pas,
repartez à l’étape 3 et installez une autre version de Ghostscript. Les
version AFPL et ESP de Ghostscript ont des différences dans le support des
imprimantes.
Si vous ne savez pas quel pilote sélectionner pour que votre imprimante fonctionne, visitez le site de linux printing et recherchez votre imprimante dans leur base de données. Ils vous diront peut-être que vous avez besoin de logiciels supplémentaires comme HPIJS, pnm2ppa ou d’autres. Si vous avez besoin de logiciels supplémentaires, à vous de vous débrouiller. Ici nous ne parlons que des imprimantes supportées par Ghostscript (mais continuez à lire, l’astuce peut toujours vous être utile).
Cinquième étape
Testez votre configuration. Récupérez un fichier ps (un pdf fonctionnera aussi) et lancez
gs -q -dBATCH -dNOPAUSE -dSAFER -sDEVICE=<votre-pilote-d'imprimante> \
-sOutputFile=/tmp/testit <votre-fichier>
Vous trouverez des fichiers ps dans le répertoire des exemples de Ghostscript.
Chez moi c’est /usr/share/ghostscript/8.00/examples/
. Cette
commande devrait vous donner un fichier binaire (probablement très gros)
/tmp/testit
; si vous avez de la chance, lancer la commande
file /tmp/testit
indentifiera ce fichier comme des données d’impression. Elle vous dira aussi
peut-être que la taille du papier ne correspond pas à ce que vous avez dans
l’imprimante. Si c’est le cas, ajoutez
-sPAPERSIZE=<votre-taille-de-papier>
à la commande gs.
Les autres options signifient :
- -q : dit à gs de ne rien afficher et l’empêche de chercher X.
- -dBATCH : dit à gs de quitter après le traitement — c’est toujours une bonne idée.
- -dNOPAUSE : gs n’attendra pas de touche de clavier après chaque page.
- -dSAFER : évite que gs ne supprime ou ne tronque quoi que ce soit.
- -sDEVICE= : votre pilote d’imprimante. Soyez précis et attentif à la casse.
gs est stupide. Utilisez l’orthographe donnée par
gs -h
. - -sOutputFile= : écrire dans ce fichier de sortie (bravo pour votre perspicacité !).
Si tout à l’air bon, vous pouvez lancer
cat /tmp/testit > /dev/lp0
(de nouveau, replacez lp0 par le port auquel votre imprimante est connectée). Cela devrait imprimer <votre-fichier> sur <votre imprimante>.
Les deux commandes ci-dessus peuvent vous donner des soucis avec les permissions si vous les lancez en tant qu’utilisateur normal. Si la commande gs vous pose problème lancez :
chmod 4777 /tmp
et donnez-vous une baffe pour être sur une machine inutilisable pour les utilisateurs normaux. Si la commande cat panique avec « Impossible d’écrire sur /dev/lp0 » ou un message similaire, vous pouvez toujours décider que seul root peut accéder à l’imprimante ou vous pouvez décider d’introduire un problème (mineur) de sécurité avec
chmod a+rw /dev/lp0
Si vous voulez utiliser le script lpr ci-dessous pour l’impression, vous devrez faire cela.
Sixième étape (facultative)
Si vous êtes arrivé jusqu’ici, votre imprimante fonctionne. Vous pouvez partir maintenant ; vous avez imprimé un document à l’étape 5 après tout. Si vous voulez quelque chose de plus pratique, le script ci-dessous vous donnera la commande lpr, à utiliser soit en appelant
lpr <some-file>
soit en ayant lpr comme (dernier) élément d’un pipe. Cela devrait vous permettre d’utiliser plus plupart des boutons / commandes « Imprimer » de vos applications directement.
Un autre avantage à ce script est qu’il n’utilise par de fichier temporaire, ce qui évite de remplir /tmp avec plein de saletés et certains problèmes de sécurité. D’un autre côté, si vous voulez que les utilisateurs ordinaires puissent imprimer, vous devrez leur donner accès à /dev/lp0 (ou n’importe quel port que votre imprimante utilise), comme on l’a dit plus haut.
Voici le script. Comme vous pouvez le voir, vous devrez l’ajuster un peu pour votre cas. Je n’ai encore jamais recontré d’application qui n’imprime pas avec ce script. Si c’est votre cas, dites-le moi.
cat > /usr/bin/lpr << "EOF"
#!/bin/bash
#################### Ajustez en fonction de vos besoins et de vos envies
DEVICE=ljet4
LP=lp0
PAPER=a4
LOCKFILE=/tmp/.${LP}-lock
#################### Fin des ajustements
# Imprime un fichier sur l'imprimante $DEVICE connectée sur /dev/$LP,
# avec la taille de papier $PAPER.
# Utilisation : lpr <fichier ps ou pdf> ( ou cat <fichier ps ou pdf> | lpr )
# Uli Fahrenberg, early 2003. Ce fichier est dans le domaine public.
if [ -e $LOCKFILE ] ; then
echo "Erreur : imprimante verrouillée ($LOCKFILE existe)"
exit 1
fi
FILE=$1
if ! [ X$FILE = X ] ; then ### On a un nom de fichier en argument.
if ! [ -r $FILE ] ; then
echo "Erreur : Impossible de lire le fichier $FILE"
exit 1
fi
FTYPE=$(file -bL $FILE | awk '{print $1}')
if ! [ $FTYPE = 'PDF' ] && ! [ $FTYPE = 'PostScript' ] ; then
echo "Erreur : $FILE n'est pas un fichier PS ou PDF."
exit 1
fi
### Commentez ceci si vous voulez que lpr soit discret :
echo -n "Printing $FILE... "
(touch $LOCKFILE ; \
trap 'rm -f $LOCKFILE' EXIT ; \
gs -q -dBATCH -dNOPAUSE -dSAFER -sDEVICE=$DEVICE \
-sPAPERSIZE=$PAPER -sOutputFile=- $FILE \
> /dev/$LP ) &
### Sans le sleep, certaines applications suppriment $FILE plus vite
### que gs ne peut le lire :
sleep 1
### Commentez ceci si vous voulez que lpr soit discret :
echo "Done."
else ### On n'a pas de nom de fichier en argument, donc on essaye depuis stdin
DATA="$(</dev/stdin)"
(touch $LOCKFILE ; \
trap 'rm -f $LOCKFILE' EXIT ; \
echo "$DATA" \
| gs -q -dBATCH -dNOPAUSE -dSAFER -sDEVICE=$DEVICE \
-sPAPERSIZE=$PAPER -sOutputFile=- - \
> /dev/$LP ) &
fi
EOF
chmod 755 /usr/bin/lpr
Septième étape (encore plus facultative)
Donc maintenant vous pouvez imprimer les fichiers pdf et postscript sur votre imprimante. Si vous voulez imprimer d’autres types de fichiers (des fichiers texte bruts, disons des astuces LFS…), vous pourriez apprécier utiliser le paquet a2ps (AnyToPS). Aussi, pour manipuler des fichiers postscript, le paquet psutils est une bonne chose à installer. Ces deux paquets sont présents dans le livre BLFS.
Remerciements
Cette astuce est une édition retravaillée de Printing Minority Report, une astuce sur l’impression à l’origine écrite par Declan Moriarty. Il a fait tout le travail de fond des section 1 à 5 ; je lisais et utilisais son astuce et je préparais le script lpr, quand tout d’un coup Declan m’a passé le flambeau.
Bill Maltby et Jeroen Coumans ont aussi contribués un peu.
Modifications
- 2003-05-24 Adoption de l’astuce de Declan.
- 2003-06-29 pfs.txt version 1 soumise.
- 2003-07-01 Insertion de
sleep 1
dans le script, pour que gv soit content. - 2003-09-30 Conversion en un format plus joli.