Minolta-QMS magicolor 2300w et Ubuntu Gutsy (7.10) : When brand name matters.
Posté par s3phy
vendredi 16 novembre 2007 à 18:07 :: Général
:: #82
::
Parce que malgré qu'ils annoncent un support automatique des imprimantes, ben ça marche toujours pas !
Alors on va faire marcher...

Attrayant, n'est-ce pas ? En pratique, quand j'ai branché ma Minolta-QMS magicolor 2300w, j'ai eu droit à un message similaire, indiquant que l'imprimante utilisait le driver "Generic Text Printer" et que je pouvais cliquer sur le bouton pour chercher un driver approprié... un clic plus tard j'avais la liste des marques d'imprimantes devant moi, plus qu'à trouver où est mon imprimante entre "Konica", "Konica Minolta" et "Minolta" dans la liste... et bien sûr, elle n'est sous aucune des trois marques. Et évidemment le driver "Generic Text Printer" ne permet pas d'imprimer... (sors une erreur rien qu'en voulant sortir une page de test)
Direction google, "2300w gutsy", en premier résultat, quelqu'un se réjouissant sur son blog de voir cette imprimante qu'on lui a offert fonctionner sous gutsy. Le pauvre. Il sait pas dans quoi il s'embarque, c'est plutôt un cadeau empoisonné cette imprimante. Enfin, à première vue, juste besoin d'installer le paquet "m2300w" présent dans les dépôts de gutsy et ça marche. Pour lui ça a marché. J'essaye, pas très convaincu... ça s'installe, et le driver apparaît sous la marque "Konica Minolta". Je tente une page de test, et là...

Rien. Évidemment.
Je commence à la connaître à force
Si ça semble trop beau ou trop simple, ça marchera pas. Mêmes symptômes ici qu'en installant le driver sous Edgy sans faire la modif' de CUPS : Dès le lancement d'une impression, la diode verte de l'imprimante se met à clignoter, indiquant que l'impression est en traitement, CUPS affiche "Processing job"... Et soit ça se met à imprimer au bout d'un délai d'au moins un quart d'heure, soit cela reste comme ça indéfiniment ! Au premier essai, au bout d'une vingtaine de minutes, le job a disparu de CUPS, mais l'imprimante clignotait toujours...Bon, donc on reprends ma méthode pour faire marcher cette même imprimante sous edgy, en essayant d'aller un peu plus loin... Je veut comprendre là, d'autant que j'ai lu plusieurs message sur différents forums attestants du fonctionnement "Plug'n'Play" de cette imprimante, sous feisty comme sous gutsy...
Donc, suppression des paquets "cups" et "m2300w" à l'aide de synaptic, téléchargement de la dernière version de CUPS depuis le site officiel (1.4svn-r7067 à l'heure où j'écris ces lignes)... on choppe son éditeur préféré et on se lance. Le problème, on le sait, se situe dans ces lignes du fichier backend/usb-unix.c de CUPS :
/*
* Disable backchannel data when printing to Brother, Canon, or
* Minolta USB printers - apparently these printers will return
* the IEEE-1284 device ID over and over and over when they get
* a read request...
*/
use_bc = strcasecmp(hostname, "Brother") &&
strcasecmp(hostname, "Canon") &&
strcasecmp(hostname, "Konica Minolta") &&
strcasecmp(hostname, "Minolta");
Le commentaire est assez clair. Pour ces marques d'imprimantes, CUPS désactive les données backchannel (j'ai aucune idée de ce que c'est, mais ça importe peu en fait) pour éviter un fonctionnement erratique. Le fix que j'avais expliqué pour edgy désactive en fait purement et simplement les données backchannel, quel que soit la marque de l'imprimante, et comme ça pouf ça marche avec la magicolor. Mais c'est pas très propre, si par exemple on a une seconde imprimante qui a besoin de ces données backchannel, ça risque de ne pas marcher... Explication rapide : strcasecmp($var1,$var2) effectue une comparaison insensible à la casse entre $var1 et $var2... donc en gros si "hostname" est égal à "Brother", "Canon", "Konica Minolta" ou "Minolta", use_bc aura pour valeur 0. Mais alors pourquoi ça marche pas, si c'est censé se foutre à 0 pour "Konica Minolta" et "Minolta" ?La réponse est sur l'imprimante. C'est pas une "Konica Minolta", ni une "Minolta", c'est une "Minolta-QMS". Et elle s'identifie au système sous cette marque :
# usb_printerid /dev/usb/lp0
GET_DEVICE_ID string:
MFG:MINOLTA-QMS;CMD:NA;MDL:magicolor 2300W;CLS:PRINTER;DES:MINOLTA-QMS magicolor 2300W;
Avant que les magicolor soient vendues sous la marque Konica Minolta, elles l'étaient sous la marque Minolta-QMS. Et bref pour revenir à CUPS, pour fixer notre problème plus proprement qu'en supprimant complètement les données backchannel, on va juste ajouter "Minolta-QMS" à la "blacklist". On transforme l'extrait posté ci dessus de usb-unix.c par :
/*
* Disable backchannel data when printing to Brother, Canon, or
* Minolta USB printers - apparently these printers will return
* the IEEE-1284 device ID over and over and over when they get
* a read request...
*/
use_bc = strcasecmp(hostname, "Brother") &&
strcasecmp(hostname, "Canon") &&
strcasecmp(hostname, "Konica Minolta") &&
strcasecmp(hostname, "Minolta") &&
strcasecmp(hostname, "Minolta-QMS");
À noter que la casse n'est pas importante, strcasecmp y étant insensible. On compile, on installe, pareil pour le driver, et ça marche ! Et en plus on profite du lifting de l'interface web de CUPS (qui en avait bien besoin !) 
Je vais (tenter) de rapporter le bug à CUPS, avec un peu de chance ça sera fixé assez vite :D
Commentaires
Aucun commentaire pour le moment.
Ajouter un commentaire