11.7. Dépannage

Les sections suivantes décrivent certains des problèmes de matériel et de logiciel d'impression les plus fréquemment rencontrés, et proposent des solutions.

11.7.1. Imprimantes sans prise en charge d'un langage d'impression standard

Les imprimantes qui ne prennent en charge aucun langage d'impression courant et qui ne peuvent être gérées qu'à l'aide de séquences de contrôle spéciales sont appelées imprimantes GDI. Ces imprimantes fonctionnent uniquement avec les versions de système d'exploitation pour lesquelles le fabricant fournit un pilote. GDI est une interface de programmation développée par Microsoft pour les périphériques graphiques. Le problème réel n'est pas lié à l'interface de programmation, mais au fait que les imprimantes GDI ne peuvent être contrôlées qu'avec le langage d'impression propriétaire du modèle d'imprimante concerné.

Certaines imprimantes fonctionnent aussi bien en mode GDI qu'avec l'un des langages d'impression standard. Certains fabricants fournissent des pilotes propriétaires pour leurs imprimantes GDI. L'inconvénient des pilotes d'imprimantes propriétaires est que vous n'avez aucune garantie qu'ils fonctionnent avec votre système d'impression et qu'ils sont compatibles avec les différentes plates-formes matérielles. En revanche, les imprimantes qui prennent en charge un langage d'impression standard ne dépendent pas d'aucune version spécifique de système d'impression et d'aucune plate-forme matérielle particulière.

Au lieu de perdre du temps à tenter de faire fonctionner un pilote propriétaire sous Linux, il est souvent plus économique d'acheter une imprimante prise en charge. Cela élimine définitivement votre problème de pilote. Vous n'avez plus besoin d'installer et de configurer un pilote d'impression spécial, ni d'obtenir des mises à jour de ce pilote à la suite de nouvelles évolutions du système d'impression.

11.7.2. Aucun fichier PPD approprié disponible pour une imprimante PostScript

Si le paquetage manufacturer-PPDs ne contient aucun fichier PPD adapté à une imprimante PPD PostScript, il devrait être possible d'utiliser le fichier PPD du CD contenant le pilote du fabricant de l'imprimante ou de télécharger le fichier PPD adapté depuis le site Web du fabricant de l'imprimante.

Si le fichier PPD est fourni sous forme de fichier d'archive Zip (.zip) ou d'un fichier auto-extractible (.exe), décompressez-le à l'aide de la commande unzip. Tout d'abord, lisez le contrat de licence figurant dans le fichier PPD. Exécutez ensuite l'utilitaire cupstestppd pour vérifier si le fichier PPD est compatible avec la « Spécification de format de fichier de description d'imprimante PostScript Adobe, version 4.3 ». Si l'utilitaire retourne la valeur « FAIL », cela signifie que le fichier PPD contient des erreurs graves qui risquent de poser des problèmes sérieux. Les points problématiques indiqués par cupstestppd doivent être éliminés. Si nécessaire, demandez un fichier PPD adapté au fabricant de l'imprimante.

11.7.3. Ports parallèles

L'approche la plus sûre consiste à connecter l'imprimante en direct sur le premier port parallèle et de sélectionner les paramètres de port parallèle suivants dans le BIOS :

  • Adresse d'E/S : 378 (hexadécimal)

  • Interruption : non significatif

  • Mode : Normal, SPP ou Output Only (Sortie uniquement)

  • DMA : désactivé

Si l'imprimante ne peut pas être pilotée à partir du port parallèle malgré ces paramètres, entrez explicitement l'adresse d'E/S, conformément au paramètre du BIOS, sous la forme 0x378 dans /etc/modprobe.conf. Si deux ports parallèles sont définis sur les adresses d'E/S 378 et 278 (hexadécimal), entrez-les sous la forme 0x378,0x278.

Si l'interruption 7 est libre, vous pouvez l'activer à l'aide de l'entrée présentée dans l'Exemple 11.1, « /etc/modprobe.conf : mode Interruption pour le premier port parallèle ». Avant d'activer le mode Interruption, reportez-vous au fichier /proc/interrupts pour connaître les interruptions déjà utilisées. Seules les interruptions en cours d'utilisation sont affichées. Cela peut changer en fonction des composants matériels qui sont actifs. L'interruption correspondant au port parallèle ne doit être utilisée par aucun autre périphérique. En cas de doute, utilisez le mode d'interrogation avec irq=none.

Exemple 11.1. /etc/modprobe.conf : mode Interruption pour le premier port parallèle

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

11.7.4. Connexion d'imprimantes réseau

Identification des problèmes réseau

Connectez l'imprimante directement sur l'ordinateur. Pour le test, configurez l'imprimante en tant qu'imprimante locale. Si elle fonctionne, cela signifie que les problèmes sont liés au réseau.

Vérification du réseau TCP/IP

Le réseau TCP/IP et la résolution des noms doivent fonctionner.

Vérification d'un périphérique lpd distant

Utilisez la commande suivante pour vérifier s'il est possible d'établir une connexion TCP avec un périphérique lpd (port 515) sur l'ordinateur host :

netcat -z host 515 && echo ok || echo failed

Si la connexion lpd échoue, cela signifie que lpd n'est pas actif ou qu'il existe des problèmes au niveau du réseau.

Loguez-vous en tant qu'utilisateur root, puis utilisez la commande suivante pour obtenir un rapport d'état (qui peut être très long) pour la file d'attente queue sur l'ordinateur distant host, à condition que le lpd concerné soit actif et que l'hôte accepte les requêtes :

echo -e "\004queue" \
  | netcat -w 2 -p 722 host 515

Si lpd ne répond pas, il est inactif ou il existe des problèmes réseau. Si lpd répond, cette réponse doit indiquer la cause du problème d'impression sur la file d'attente queue sur l'ordinateur host. Si vous recevez une réponse comme celle de l'Exemple 11.2, « Message d'erreur de lpd », le problème est dû au lpd distant.

Exemple 11.2. Message d'erreur de lpd

 
lpd: your host does not have line printer access (l'hôte n'a pas accès à l'imprimante en ligne) 
lpd: queue does not exist (file d'attente inexistante) 
printer: spooling disabled (spouling désactivé) 
printer: printing disabled (impression désactivée)
Test d'un cupsd distant

Par défaut, le serveur réseau CUPS doit diffuser ses files d'attente toutes les 30 secondes sur le port UDP 631. Ainsi, vous pouvez utiliser la commande suivante pour tester la présence d'un serveur réseau CUPS sur le réseau.

netcat -u -l -p 631 & PID=$! ; sleep 40 ; kill $PID

Si un serveur réseau CUPS qui diffuse des données existe sur le réseau, la sortie doit apparaître comme dans l'Exemple 11.3, « Diffusion à partir du serveur réseau CUPS ».

Exemple 11.3. Diffusion à partir du serveur réseau CUPS

ipp://host.domain:631/printers/queue

La commande suivante permet de tester si une connexion TCP peut être établie avec cupsd (port 631) sur l'ordinateur host :

netcat -z host 631 && echo ok || echo failed

S'il est impossible d'établir la connexion à cupsd, ce dernier est inactif ou il existe des problèmes au niveau du réseau. La commande lpstat -h host -l -t retourne un rapport d'état (parfois très long) concernant toutes les files d'attente de l'ordinateur host, à condition que cupsd soit actif et que l'hôte accepte les requêtes.

Vous pouvez utiliser la commande suivante pour tester si la file d'attente queue sur l'ordinateur host accepte un travail d'impression uniquement constitué d'un seul caractère de retour chariot. Rien ne doit être imprimé. Parfois, l'imprimante éjecte une page vide.

echo -en "\r" \
  | lp -d queue -h host
Dépannage d'une imprimante réseau ou d'un boîtier serveur d'impression

Les spouleurs qui s'exécutent dans un boîtier serveur d'impression posent parfois des problèmes lorsqu'ils doivent gérer un grand nombre de travaux d'impression. Comme le spouleur figurant dans le boîtier serveur d'impression est responsable de ces problèmes, vous ne pouvez rien faire. Vous pouvez toutefois contourner le spouleur du boîtier serveur d'impression en pilotant l'imprimante connectée au serveur d'impression directement via un socket TCP. Reportez-vous à la Section 11.4.2, « Imprimantes réseau ».

Ainsi, le boîtier serveur d'impression devient un simple convertisseur des divers formats de transmission de données (réseau TCP/IP et connexion à l'imprimante locale). Pour utiliser cette méthode, vous devez connaître le port TCP du boîtier serveur d'impression. Si l'imprimante est connectée au boîtier serveur d'impression et que vous la mettez sous tension, vous pouvez généralement déterminer ce port TCP avec l'utilitaire nmap du paquetage nmap, peu de temps après avoir mis en route le boîtier serveur d'impression. Par exemple, la commande nmap adresse-IP peut fournir la sortie suivante pour un boîtier serveur d'impression :

Port       State       Service
23/tcp     open        telnet
80/tcp     open        http
515/tcp    open        printer
631/tcp    open        cups
9100/tcp   open        jetdirect

Cette sortie indique que l'imprimante connectée au boîtier serveur d'impression peut être pilotée via le socket TCP sur le port 9100. Par défaut, nmap vérifie uniquement quelques ports courants, répertoriés dans /usr/share/nmap/nmap-services. Pour vérifier tous les ports possibles, utilisez la commande nmap -p port_début-port_fin adresse-IP. Le traitement peut être assez long. Pour plus d'informations, reportez-vous à la page de manuel nmap.

Entrez une commande similaire à :

echo -en "\rHello\r\f" | netcat -w 1 IP-address port
cat file | netcat -w 1 IP-address port

pour envoyer des chaînes de caractères ou des fichiers directement au port concerné, afin de vérifier s'il est possible de piloter l'imprimante sur ce port.

11.7.5. Impressions défectueuses sans message d'erreur

Pour le système d'impression, l'impression est terminée lorsque l'interface dorsale CUPS a fini de transférer les données vers le destinataire (imprimante). Si le traitement ultérieur sur le destinataire échoue, par exemple, si l'imprimante ne peut pas imprimer des données propres à l'imprimante, le système d'impression ne le détecte pas. Si l'imprimante ne peut pas imprimer de données propres à l'imprimante, sélectionnez un autre fichier PPD, mieux adapté à votre imprimante.

11.7.6. Files d'attente désactivées

Si le transfert des données vers le destinataire échoue complètement après plusieurs tentatives, l'interface dorsale CUPS, comme usb ou socket, signale une erreur au système d'impression (cupsd). L'interface dorsale décide alors si de nouvelles tentatives doivent être lancées (et détermine leur nombre) jusqu'à ce que le transfert soit considéré comme impossible. Comme toute tentative supplémentaire est vouée à l'échec, cupsd désactive l'impression pour la file d'attente concernée. Après avoir éliminé la cause du problème, l'administrateur système doit réactiver l'impression, à l'aide de la commande /usr/bin/enable.

11.7.7. Navigation dans CUPS : suppression de travaux d'impression

Si un serveur réseau CUPS diffuse ses files d'attente aux hôtes clients par navigation et qu'un utilitaire cupsd local approprié est actif sur les hôtes clients, le client cupsd accepte les travaux provenant des applications et les transfère vers cupsd sur le serveur. Lorsque cupsd accepte un travail d'impression, il lui affecte un nouveau numéro. Par conséquent, le numéro de travail sur l'hôte client est différent de celui défini sur le serveur. Comme un travail d'impression est généralement transféré immédiatement, vous ne pouvez pas le modifier avec le numéro de travail déterminé sur l'hôte client, car le client cupsd considère ce travail comme terminé dès qu'il a été transféré vers cupsd sur le serveur.

Pour supprimer le travail d'impression sur le serveur, utilisez une commande comme lpstat -h print-server -o pour déterminer le numéro du travail sur le serveur ; cela n'est possible que si le serveur n'a pas terminé le travail (il ne l'a pas encore envoyé à l'imprimante). Avec ce numéro de travail, vous pouvez supprimer le travail d'impression sur le serveur :

cancel -h print-server queue-jobnnumber

11.7.8. Travaux d'impression défectueux et erreurs de transfert de données

Les travaux d'impression restent dans les files d'attente et l'impression reprend si vous éteignez et rallumez l'imprimante, ou si vous redémarrez l'ordinateur pendant l'impression. Les travaux d'impression défectueux doivent être supprimés de la file d'attente avec la commande cancel.

Si un travail d'impression est défectueux, ou s'il se produit une erreur de communication entre l'hôte et l'imprimante, celle-ci imprime une multitude de feuilles aux caractères illisibles car elle est incapable de traiter correctement les données. Pour résoudre ce problème, procédez de la manière suivante :

  1. Pour arrêter l'impression, ôtez tout le papier des imprimantes jet d'encre ou ouvrez tous les bacs d'alimentation des imprimantes laser. Les imprimantes haut de gamme comportent un bouton qui annule l'impression en cours.

  2. Le travail d'impression peut demeurer dans la file d'attente, car les travaux ne sont supprimés que lorsqu'ils ont été complètement envoyés à l'imprimante. Utilisez la commande lpstat -o ou lpstat -h serveur-impression -o pour connaître la file d'attente qui est en train d'imprimer. Supprimez le travail d'impression avec la commande cancel file-attente-numéro-travail ou la commande cancel -h serveur-impression file-attente-numéro-travail.

  3. Certaines données risquent encore d'être transférées vers l'imprimante, même si le travail d'impression a été supprimé de la file d'attente. Vérifiez si un processus d'interface dorsale CUPS est encore en cours d'exécution pour la file d'attente concernée et arrêtez-le. Par exemple, pour une imprimante connectée au port parallèle, vous pouvez utiliser la commande fuser -k /dev/lp0 pour terminer tous les processus qui continuent d'accéder à l'imprimante (ou plus précisément, au port parallèle).

  4. Réinitialisez complètement l'imprimante en l'éteignant pendant un moment. Insérez ensuite du papier et allumez l'imprimante.

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

Utilisez la procédure générique suivante pour localiser les problèmes du système d'impression CUPS :

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

  2. Arrêtez cupsd.

  3. Supprimez /var/log/cups/error_log* pour éviter d'avoir à effectuer des recherches dans des fichiers journaux très volumineux.

  4. Démarrez cupsd.

  5. Répétez l'action qui a déclenché le problème.

  6. Reportez-vous aux messages dans /var/log/cups/error_log* pour identifier la cause du problème.

11.7.10. Pour plus d'informations

Vous trouverez la solution à de nombreux problèmes particuliers dans la base de données de support de SUSE (http://portal.suse.com/). Recherchez-y les articles appropriés à l'aide de mots-clés.