Les sections suivantes traitent des problèmes matériels et logiciels les plus fréquents en matière d'impression et indiquent des solutions pour résoudre ou contourner ces problèmes.
Une imprimante qui ne prend en charge aucun langage d'impression courant et ne peut être pilotée que par des séquences de contrôle qui lui sont propres s'appelle une Imprimante GDI. Ce type d'imprimantes fonctionne uniquement avec des versions du système d'exploitation pour lesquelles le fabricant livre un pilote. GDI est une interface de programmation pour la représentation graphique développée par Microsoft. Le problème ne réside pas dans l'interface de programmation mais dans le fait que les imprimantes GDI peuvent uniquement être pilotées au moyen du langage d'impression propriétaire de ce modèle d'imprimante.
Il existe des imprimantes qui, en plus du mode GDI, comprennent un langage d'impression standard. Pour certaines imprimantes GDI, il existe des pilotes propriétaires offerts par le fabricant de l'imprimante. Les pilotes d'impression propriétaires présentent l'inconvénient de ne pouvoir garantir ni leur fonctionnement avec le système d'impression actuellement installé ni leur fonctionnement pour les diverses plateformes matérielles. En revanche, les imprimantes capables de comprendre un langage d'impression standard ne dépendent ni d'une version particulière du système d'impression, ni d'une plateforme matérielle particulière.
Il est en général moins onéreux d'acheter une imprimante prise en charge que de gaspiller du temps à adapter un pilote Linux propriétaire. Avec une imprimante appropriée, le problème lié au pilote est résolu une fois pour toute et vous n'aurez plus à installer ni à configurer un logiciel pilote spécial, ni même à vous procurer des mises à jour du pilote dans le cas où le système d'impression aurait encore évolué.
Si le paquetage manufacturer-PPDs ne contient
aucun fichier PPD adéquat pour une imprimante PostScript, il devrait être possible
d'utiliser le fichier PPD à partir du CD de pilote du fabricant de l'imprimante ou de
télécharger un fichier PPD adapté à partir de la page internet du fabricant de
l'imprimante.
Lorsque le fichier PPD se présente en tant qu'archive zip (.zip) ou bien en
tant qu'archive zip auto-extractible (.exe), vous
pouvez le décomprimer avec unzip. Informez-vous
d'abord sur les conditions de licence du fichier PPD. Vérifiez ensuite au
moyen de cupstestppd si le fichier PPD correspond
à « Adobe PostScript Printer Description File Format Specification,
version 4.3. ». Si le résultat de l'utilitaire est « FAIL »,
les erreurs dans les fichiers PPD sont importantes et pourraient causer des
problèmes plus conséquents. Il convient d'éliminer les points problématiques
indiqués par cupstestppd. Si nécessaire, demandez
un fichier PPD adéquat directement auprès du fabricant de l'imprimante.
La méthode la plus sûre consiste à connecter l'imprimante directement sur le premier port parallèle et de procéder dans le BIOS aux réglages suivants du port parallèle :
I/O address: 378 (hexadecimal)
Interrupt: irrelevant
Mode: Normal,
SPP, or
Output Only
DMA: disabled
Si, malgré ces réglages du BIOS, on ne peut pas communiquer avec l'imprimante
sur le premier port parallèle, il faut, dans /etc/modprobe.conf,
saisir, de façon explicite en accord avec les paramètres du BIOS, l'adresse d'entrée-sortie
(I/O) sous la forme 0x378. S'il existe deux ports parallèles réglés
sur les adresses I/O 378 et 278 (hexadécimal),
il faut les saisir sous la forme 0x378,0x278.
Si l'interruption 7 est libre, le mode interruption peut être activé
par l'entrée montrée dans Exemple 12.1, «
/etc/modprobe.conf : mode interruption pour le premier port parallèle
». Avant
d'activer le mode interruption, vérifiez dans le fichier
/proc/interrupts quelles interruptions sont déjà
utilisées. Seules sont affichées les interruptions actuellement utilisées. Ceci peut
varier en fonction du matériel actif. L'interruption pour le port parallèle ne doit pas
être utilisée par un autre périphérique. En cas de doute, optez pour le mode polling
en saisissant irq=none.
Connectez l'imprimante directement sur l'ordinateur. Configurez l'imprimante en tant qu'imprimante locale pour effectuer un test. Si l'imprimante fonctionne, le réseau est à l'origine du problème.
Le réseau TCP/IP et la résolution du nom doivent fonctionner correctement.
Grâce à la commande suivante, il est possible de vérifier si une
connexion TCP au démon lpd (port
515) est possible sur l'ordinateur
hôte :
netcat -z host 515 && echo ok || echo failed
S'il n'est pas possible de se connecter au démon lpd, cela peut signifier que le démon lpd ne fonctionne pas ou qu'il existe des problèmes de réseau fondamentaux.
Il est possible de demander, en tant qu'utilisateur root, un rapport d'état (éventuellement
assez long) sur la file d'attente file de
l'hôte distant à l'aide de la commande
suivante, à condition que le démon lpd qui s'y
trouve fonctionne et qu'il soit possible d'envoyer des requêtes à l'hôte :
echo -e ".004<file>" \ | netcat -w 2 -p 722 <hôte> 515
Si lpd ne répond pas, cela signifie soit qu'il ne
fonctionne pas, soit qu'il existe des problèmes de réseau sous-jacents. Si
lpd répond, la réponse devrait indiquer la raison
pour laquelle il n'est pas possible d'imprimer sur la file d'attente
de l'hôte. Si vous recevez une réponse telle que dans Exemple 12.2, « Message d'erreur de lpd », cela signifie que le problème est causé par le démon
lpd distant.
Par défaut, le serveur réseau CUPS devrait diffuser ses files d'attente toutes les
30 secondes sur le port UDP 631. Grâce à la commande suivante,
il est donc possible de tester s'il existe un serveur réseau CUPS dans le réseau.
netcat -u -l -p 631 & PID=$! ; sleep 40 ; kill $PID
Si un serveur réseau CUPS effectuant une diffusion existe, il devrait apparaître un message tel celui dans Exemple 12.3, « Diffusion à partir du serveur réseau CUPS ».
Exemple 12.3. Diffusion à partir du serveur réseau CUPS
ipp://<hôte>.<domaine>:631/printers/<fichier>
Grâce à la commande suivante, il est possible de vérifier si une
connexion TCP au démon cupsd (port
631) est possible sur l'hôte :
netcat -z host 631 && echo ok || echo failed
S'il n'est pas possible de se connecter au démon cupsd,
cela peut signifier que le démon cupsd ne fonctionne
pas ou qu'il existe des problèmes de réseau fondamentaux.
La commande lpstat -h host -l -t donne un rapport
d'état (éventuellement assez long) sur toutes les files d'attente de
l'hôte à condition que le démon
cupsd qui s'y trouve fonctionne et qu'il soit possible
d'envoyer des requêtes à l'hôte.
La commande suivante peut être utilisée pour tester si la file d'attente
file sur l'hôte
accepte un travail d'impression qui ne consiste que d'un retour de chariot. Rien
ne doit être imprimé. Le cas échéant, une page vide peut être éjectée.
echo -en ".r" \ | lp -d <file> -h <hôte>
Le spouleur qui fonctionne dans un boîtier serveur d'impression pose parfois problème dès que la quantité des requêtes d'impression est élevée. Étant donné que le spouleur du boîtier serveur d'impression est à l'origine des problèmes, on ne peut rien y faire. Il est cependant possible de contourner le spouleur du boîtier serveur d'impression en pilotant directement via socket TCP l'imprimante connectée au boîtier serveur d'impression. Voir Section 12.5.2, « Imprimantes réseau ».
Par conséquent, le boîtier serveur d'impression ne fait plus qu'office de
convertisseur entre les différentes formes de transmission de données
(réseau TCP/IP et connexion d'imprimante locale), ce qui signifie que le
port TCP correspondant sur le boîtier serveur d'impression doit être connu.
Lorsque l'imprimante est connectée et allumée sur le boîtier serveur d'impression,
il est normalement possible de relever ce port TCP au moyen de
nmap du paquetage nmap
un laps de temps après avoir allumé le boîtier serveur d'impression .
Par exemple, pour un boîtier serveur d'impression, la commande
nmap adresse IP
peut donner :
Port State Service 23/tcp open telnet 80/tcp open http 515/tcp open printer 631/tcp open cups 9100/tcp open jetdirect
Cet affichage signifie que l'imprimante connectée au boîtier serveur d'impression
peut être commandée par socket TCP sur le port 9100. Par
défaut, nmap n'examine qu'une certaine liste de ports
bien connus, listés dans /usr/share/nmap/nmap-services.
Afin d'examiner tous les ports possibles, utilisez la commande
nmap -p from_port-to_port IP-address.
Ceci peut prendre un peu de temps. Pour plus d'informations, consultez la page de
manuel de nmap.
Entrez une commande telle que
echo -en "\rHello\r\f" | netcat -w 1 IP-address port cat file | netcat -w 1 IP-address port
pour envoyer directement des chaînes de caractères ou des données au port correspondant pour tester si l'imprimante peut être adressée sur ce port.
Le système d'impression considère le travail d'impression comme entièrement achevé lorsque le backend CUPS a terminé la transmission des données vers le destinataire (l'imprimante). Si par la suite le destinataire ne réussit pas à effectuer le traitement requis, par exemple, si l'imprimante n'arrive pas à sortir sur papier les données qui lui sont destinées, le système d'impression ne s'en rend pas compte. Si l'imprimante n'arrive pas à imprimer sur papier les données qui lui sont destinées, il faut alors choisir un autre fichier PPD mieux adapté à l'imprimante.
Lorsque la transmission des données au récepteur a totalement échoué après
plusieurs essais, le backend de CUPS, par exemple usb ou
socket, signale une erreur au système d'impression (au démon
cupsd). Le backend décide s'il convient d'entreprendre
d'autres essais ainsi que le nombre d'essais avant de signaler qu'il est impossible de
transmettre les données. Comme d'autres essais ne sont pas utiles,
cupsd désactive alors l'impression sur la file d'attente
concernée. Après avoir éliminé l'origine du problème, l'administrateur système doit
réactiver l'impression à l'aide de la commande /usr/bin/enable.
Lorsqu'un serveur réseau CUPS diffuse ses files d'attente aux hôtes clients et qu'un démon cupsd local adéquat est actif sur les ordinateurs clients, c'est le démon cupsd du client qui accepte les travaux d'impression des applications pour les remettre immédiatement au démon cupsd du serveur. Lorsqu'un démon cupsd accepte une requête d'impression, il lui est conféré un nouveau numéro d'impression. C'est la raison pour laquelle le numéro d'impression sur l'hôte client est différent du numéro sur le serveur. Étant donné qu'un travail d'impression est immédiatement remis, il ne peut pas être annulé sous le numéro de l'ordinateur client parce que le démon cupsd du client considère la requête d'impression comme totalement achevée dès qu'il l'a transmise au cupsd du serveur.
Pour annuler une requête d'impression sur le serveur, il faut saisir une commande telle que lpstat -h <serveur impression> -opour relever le numéro d'impression sur le serveur à condition que le serveur n'ait pas terminé la requête d'impression (c'est-à-dire envoyé à l'imprimante). Il est ensuite possible d'annuler le travail d'impression sur le serveur :
cancel -h <serveur impression> <fichier>-<numéro travail>
Si vous éteignez et réallumez l'imprimante ou l'ordinateur pendant la procédure d'impression, les travaux restent tout de même dans les files d'attente et seront réimprimées à partir du début. Vous devez supprimer un travail d'impression défectueux de la file d'attente à l'aide de la commande cancel.
Si un travail d'impression est défectueux ou si la communication entre l'ordinateur et l'imprimante est perturbée, l'imprimante n'est plus à même de traiter correctement les données, entraînant l'impression d'une quantité de feuilles couvertes de caractères confus.
Pour arrêter l'impression, sortez d'abord tout le papier dans le cas d'imprimantes à jet d'encre ou bien ouvrez les cassettes de papier dans le cas d'imprimantes laser. Les imprimantes haut de gamme sont souvent dotées d'un bouton sevant à stopper l'impression en cours.
Étant donné que le travail d'impression n'est retiré de la file d'attente qu'après avoir
été envoyé à l'imprimante, il devrait normalement rester dans la file d'attente. Entrez
lpstat -o ou lpstat -h serveur
d'impression -o pour savoir à partir de quelle file d'attente
l'impression est effectuée. Annulez le travail d'impression en saisissant
cancel file
d'attente-numéro d'impression
ou cancel -h serveur
d'impression file
d'attente-numéro d'impression
.
Il est possible que, bien que le travail d'impression ait été retiré de la file d'attente, quelques données soient encore transmises à l'imprimante. Contrôlez si, pour la file d'attente concernée, un processus backend CUPS est encore en cours et mettez-y fin si nécessaire. Dans le cas d'une imprimante connectée au port parallèle, on peut terminer tous les processus qui accèdent encore à l'imprimante (plus exactement, au port parallèle) au moyen de la commande fuser -k /dev/lp0.
Désactivez complètement l'imprimante en l'éteignant pendant un certain laps de temps. Puis réalimentez-la en papier et rallumez-la.
Pour analyser les problèmes d'impression avec CUPS, nous recommandons la méthode suivante :
Déclarez LogLevel debug dans
/etc/cups/cupsd.conf.
Arrêtez le démon cupsd.
Déplacez /var/log/cups/error_log* afin de ne pas
avoir à faire une recherche dans des fichiers journaux trop volumineux.
Démarrez le démon cupsd.
Répétez l'opération qui a provoqué le problème.
Vous trouverez ensuite des messages dans
/var/log/cups/error_log* qui vous aideront à trouver
l'origine du problème.
De nombreux cas particuliers ont leurs solutions dans la base de données Support. Pour les problèmes d'imprimante, les articles Installing a Printer (en anglais), Installer une imprimante sous SUSE LINUX 9.1 (en français et Printer Configuration from SUSE LINUX 9.2 (en anglais) qu'elle contient vous seront certainement très utiles ; vous les trouverez en utilisant les mots-clés « printer » ou « imprimante ».