12.8. Problèmes éventuels et leurs solutions

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.

12.8.1. Imprimante sans prise en charge d'un langage d'impression standard

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é.

12.8.2. Pas de fichier PPD adapté à une imprimante PostScript

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.

12.8.3. Ports parallèles

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.

Exemple 12.1.  /etc/modprobe.conf : mode interruption pour le premier port parallèle

alias parport_lowlevel parport_pc
options parport_pc io=0x378 irq=7

12.8.4. Connexions des imprimantes en réseau

Mise en évidence des problèmes de réseau

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.

Test du réseau TCP/IP

Le réseau TCP/IP et la résolution du nom doivent fonctionner correctement.

Test d'un démon lpd distant

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.

Exemple 12.2. Message d'erreur de lpd

lpd: your host does not have line printer access
lpd: queue does not exist
printer: spooling disabled
printer: printing disabled
Tester un démon cupsd 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>
Recherche d'erreur pour une imprimante réseau ou le boîtier serveur d'impression

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.

12.8.5. Impressions défectueuses sans message d'erreur

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.

12.8.6. Files d'attente désactivées

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.

12.8.7. Diffusion CUPS : effacer des travaux d'impression

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>

12.8.8. Travaux d'impression defectueux et erreurs lors du transfert de données

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.

  1. 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.

  2. É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 .

  3. 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.

  4. Désactivez complètement l'imprimante en l'éteignant pendant un certain laps de temps. Puis réalimentez-la en papier et rallumez-la.

12.8.9. Débogage du système d'impression CUPS

Pour analyser les problèmes d'impression avec CUPS, nous recommandons la méthode suivante :

  1. Déclarez LogLevel debug dans /etc/cups/cupsd.conf.

  2. Arrêtez le démon cupsd.

  3. Déplacez /var/log/cups/error_log* afin de ne pas avoir à faire une recherche dans des fichiers journaux trop volumineux.

  4. Démarrez le démon cupsd.

  5. Répétez l'opération qui a provoqué le problème.

  6. Vous trouverez ensuite des messages dans /var/log/cups/error_log* qui vous aideront à trouver l'origine du problème.

12.8.10. Informations complémentaires

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 ».


SUSE LINUX Guide de l'administrateur 9.2