Scanner USB et send-pr

Intro

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.

Conditions d'utilisation

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

Plan

  • Récuperer les infos USB
  • Appliquer les modifications dans le src tree
  • Installer SANE
  • Tester
  • Envoyer les patchs au GNATS

Let's GO

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)

Ce n'est pas fini

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.

Changelog

  • 05/04/2006 Création du tip par hotbox
freebsd/usb_scanner.txt · Last modified: 2010/01/12 13:29 (external edit)