Une phrase peut changer le cours de votre vie, par exemple “Cheri, je veux un gosse” ou encore “Cheri, on s'achète une imprimante-scanner-four-wifi-appareil-photo-motocrotte USB ?”. Evidemment, lorsque cela arrive, il faut vite reprendre ses esprits et réagir (soit sauter par la fenêtre ou soit s'asperger d'eau bénite et se lancer dans l'aventure).
Donc, le but de ce tip est de montrer qu'il est simple de configurer un scanner sous FreeBSD (ahem). Plus sérieusement, pour continuer, vous aurez besoin de deux mains, d'une paire d'yeux et aussi d'une adresse mail.
SANE est à votre scanner ce que CUPS est à votre imprimante : Vérifiez donc que votre matériel est correctement supporté ici. Si tel n'est pas le cas, alors vous êtes certainement très poilu et très couillu (pour ne pas avoir regardé avant d'acheter @#!) : vous n'avez plus qu'à contribuer à SANE pour l'ajout de votre scanner.
Ce tip a été testé sous FreeBSD 6.0R et 5.4
Si votre interface est un scanner seul, alors pas de problème, sautez ce paragraphe. Si vous avez la chance d'avoir un toaster (comprendre imprimante multi-fonction, dont scanner), alors il faut être conscient que vous ne pouvez pas utiliser en même temps celui-ci et imprimer par exemple. L'explication se trouve dans le mode de fonctionnement des drivers usb de FreeBSD : ainsi, en résumé, vous ne pouvez pas avoir 2 drivers pour un même device. Donc solution de contournement : ne compilez pas les modules usb en dur dans le noyau (exemple ulpt(4) et uscanner(4)), mais utilisez les modules avec kldload(8). Ainsi, chargez le module uscanner(4) avant d'utiliser la fonction scanner, et lorsque vous souhaitez imprimer, déchargez le module et chargez ulpt(4). Bien entendu, il faut redémarrer l'imprimante avant chaque chargement de module.
Commençons quand même par vérifier que votre scanner n'est pas déjà supporté :
Branchez votre scanner et allumez-le, puis, surveillez votre /var/log/messages. Si le device uscanner0 apparaît, alors c'est supporté (ouais !). Sinon ugen0 apparaît et il faut donc modifier quelque peu 2 fichiers dans votre source tree (oui madame).
Exemple : kernel: ugen0: USB MFP, rev 1.00, addr 3
Il nous faut maintenant récuperer les infos usb de votre dispositif :
(en root) #usbdevs -v port 1 addr 3: full speed, self powered, config 1, USB MFP(0x080f), EPSON(0x04b8), rev 1.00
Hop ! on récupère 0x04b8 qui correspond au constructeur (ici EPSON) et 0x080f au modèle (dans mon cas une Stylus Photo RX425).
Maintenant on arrive dans la partie modifications des sources noyaux, rdv dans /usr/src/sys/dev/usb :
Il nous faut modifier 2 fichiers (c'est énorme je sais) :
# On sauvegarde les anciens : cp usbdevs usbdevs.orig cp uscanner.c uscanner.c.orig #Fichier usbdevs --- usbdevs.orig Wed Apr 5 12:09:57 2006 +++ usbdevs Wed Apr 5 12:11:04 2006 @@ -853,6 +853,7 @@ product EPSON 1260 0x011d Perfection 1260 scanner product EPSON 1660 0x011e Perfection 1660 scanner product EPSON 1670 0x011f Perfection 1670 scanner +product EPSON RX425 0x080f Stylus Photo RX425 scanner /* e-TEK Labs products */ product ETEK 1COM 0x8007 Serial #Fichier uscanner.c --- uscanner.c.orig Wed Apr 5 12:10:02 2006 +++ uscanner.c Wed Apr 5 12:11:41 2006 @@ -202,6 +202,7 @@ {{ USB_VENDOR_EPSON, USB_PRODUCT_EPSON_1660 }, 0 }, {{ USB_VENDOR_EPSON, USB_PRODUCT_EPSON_1670 }, 0 }, {{ USB_VENDOR_EPSON, USB_PRODUCT_EPSON_1260 }, 0 }, + {{ USB_VENDOR_EPSON, USB_PRODUCT_EPSON_RX425 }, 0 }, {{ USB_VENDOR_EPSON, USB_PRODUCT_EPSON_3200 }, USC_KEEP_OPEN }, {{ USB_VENDOR_EPSON, USB_PRODUCT_EPSON_GT9700F }, USC_KEEP_OPEN }, {{ USB_VENDOR_EPSON, USB_PRODUCT_EPSON_GT9300UF }, 0 },
And Voila !
Maintenant, phase ultime : recompiler le tout. Si vous utilisez les modules, alors simple :
cd /usr/src/sys/modules/usb make all install clean
Sinon (cas où vous utilisez uscanner(4) en dur dans votre noyau) : il vous faudra recompiler votre noyau. Dans tous les cas, je vous conseille de vous relire..
Selon votre cas, rebootez, chargez le module et allumez votre scanner :
--- SNIP --- kernel: uscanner0: EPSON USB MFP, rev 1.10/1.00, addr 3 --- SNIP ---
Votre scanner est correctement pris par uscanner(4) et vous pouvez donc maintenant installer /usr/ports/graphics/sane-backends et enfin vérifier que votre scanner est trouvé par sane avec sane-find-scanner(1) :
--- SNIP --- found USB scanner (vendor=0x04b8, product=0x080f) at /dev/uscanner0 --- SNIP ---
Pour info, SANE donne la possibilité d'utiliser votre scanner en réseau et via xsane d'avoir une jolie interface bien complete (utilisable avec The Gimp)
Pour éviter qu'à chaque csup (ou cvsup) vos changements soient effacés, je vous propose de contribuer à FreeBSD en soumettant votre patch.
Avant tout, vérifiez que quelqu'un d'autre n'a pas déjà fait cette démarche ici
Il existe un outil tout fait pour envoyer ce genre de requêtes : send-pr(1) Cependant, il faut que votre sendmail(8) soit bien configuré. Une autre méthode est de passer par l'interface web Dans tout les cas, je vous conseille d'utiliser send-pr(4) pour compléter la demande et d'utiliser le moyen de votre choix (mail(1) ou www) pour l'envoyer : send-pr(4) vous propose à la fin d'envoyer, éditer ou quitter. Dans ce dernier cas, vous pourrez récupérer les infos dans le fichier qu'il vous aura dicté.
Pour plus d'infos, reportez vous à cette doc C'est complet, et c'est bon.