Problème lprng sous Linux Debian 3.1 Sarge

Suite à un problème qui m’a fait perdre une heure à mon boulot, je vous livre un retour d’expérience d’un souci rencontré sur un de nos serveurs de spooler d’impressions.

Nous avons une machine qui joue le rôle de serveur d’impression :

  • qui met en file d’attente les impressions vers les imprimantes qui causent lpr,
  • qui permet à des clients Windows qui ne cause que "SMB" (genre ancien Windows 98) à envoyer des impressions sur des imprimantes qui ne causent que "LPR",
  • qui contient des imprimantes virtuelles qui activent des moulinettes perso (traduction en PDF, ou en texte, ou en html, avec copie par email, etc.).

Pour le premier point, aucun problème. Dans /etc/printcap, il suffit de déclarer l’imprimante en mettant "rm=adresse ip (ou nom dans le DNS) de l’imprimante de destination", et "rp=nom du spooler sur ce périphérique".

Le deuxième point se configure de la même façon, sauf qu’en plus, il faut déclarer l’imprimante dans samba, où activer dans le fichier de configuration de samba l’option de partage automatique des imprimantes lprng.

C’est avec le dernier point que j’ai rencontré des problèmes. Jusqu’à aujourd’hui, j’utilisais "lp=/dev/null" et "if=/chemin/nom de l’exécutable qui contient la moulinette". Tout allait pour le mieux dans le meilleurs des mondes. En cas d’impression, l’exécutable spécifié dans l’option "if" était lancé, et il recevait en stdin le flux à mouliner. Or, entre Noël et jour de l’an, j’ai du faire un "apt-get update", suivi d’un "apt-get upgrade". Je n’ai plus aucun souvenir des packages qui ont été mis à jour, mais le fait est que depuis, cette syntaxe ne fonctionne plus.

Si je lançais un "lpr -P nom_imprimante nom_fichier", le démon lpd créait bien un fils, lui envoyait le flux à imprimer, mais le fils en question ne lançait plus l’exécutable spécifié dans l’option "if". En faisant un "lpq -P nom_imprimante", on voyait bien que ce mécanisme était essayé 3 fois, puis on obtenait une erreur "ERROR: too many errors", sans plus de détail. Les logs n’étaient pas plus loquaces.

Surtout, ne me demandez pas pourquoi ce qui marchait avant Noël ne fonctionne plus après le nouvel an. J’ai pensé à un problème de droit. J’ai ouvert les robinets au maximum, sans succès. J’ai pensé ensuite qu’une mise à jour sécurité empêchait de lancer des scripts shell. J’ai alors fait un test en lançant un script PHP, ou un exécutable compilé avec gcc. Ca ne marchait pas non plus.

Quoi qu’il en soit, voici la solution : ne plus utiliser l’option "if" (qui ne marche plus, semble-t-il), mais utiliser l’option "lp=|/chemin/executable" (notez bien le pipe "|" après le "=").

Espérant que cette astuce vous aide un jour…


Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *