Installation d'un scanner Agfa Snapscan 1212 usb sur un portable Toshba, sous Debian Woody

Par R. Suinot: rsuinux@gmx.fr

Contenu


Préliminaires

Le scanner m'a été prèté, c'est un snapscan, type 1212u, dont les références selon le port usb sont les suivantes:
Vendor= 06bd, ProdID= 2061, Rev=1.00
Le portable est un Toshiba Satellite 2770, avec un système linux Debian Potato upgradé en woody à la main, le noyau ayant été recompilé plusieur fois (actuellement: 2.4.13).


Mise en place de tout le basard...

Je suis parti d'un noyau n'ayant pas encore la gestion des ports usb. Il faudra donc recompiler!
Pour commencer, il faut vérifier la composition du gestionnaire du port usb: soit OHCI soit UHCI. Pour savoir cela, utiliser lspci:

$ /sbin/lspci -v | grep -A2 USB

00:05.2 USB Controller: Intel Corp. 82371AB PIIX4 USB (rev 01) (prog-if 00 [UHCI])
	Flags: bus master, medium devsel, latency 64, IRQ 11
	I/O ports at ff80 [size=32]
Nous savons donc qu'il faut utiliser le module UHCI lors de la compilation du noyau, et ne pas oublier le module scanner. Pour tout cela, utilisons les outils debians!
# cd /usr/src/linux
# make xconfig
# make-kpkg clean
# make-kpkg --revision=voyager.0.3 kernel_image
# make-kpkg --revision=voyager.0.3 modules_image
# dpkg -i kernel-image-2.4.13_voyager.0.3_i386.deb 
# init 0
Vous avez redemarré? ça fonctionne? ok, alors on continue.
Il faut monter un 'système de fichier usb', mais pour cela, il faut déjà renseigner le fichier /etc/fstab. Il suffit de l'éditer (avec vi!), et de mettre comme dernière ligne:
none	/proc/bus/usb	usbdevfs	auto	0	0
puis on peut essayer de monter ça:
# mount /proc/bus/usb/
S'il n'y a pas de message d'erreur, c'est que cela fonctionne.
A présent, il faut créer les périphériques pour le scanner usb:
# mknod /dev/usbscanner0 c 180 48
# ln -s /dev/usbscanner0 /dev/usbscanner
A noter, ici, le (futur) problème de l'acces au scanner. En effet, vous n'aurez pas le droit d'écrire (en fait, d'envoyer des données) vers le scanner. Il faut donc, soit créer un utilisateur et un group spécial pour le scanner, soit changer les autorisations. Pour plus de rapidité (je sais, c'est pas bô), j'ai choisi cette méthode:
# chmod g+rw /dev/usbscanner0
Pas de soucis pour le lien, il n'y a pas de restriction dessus, mais uniquement sur la cible.

Tout ceci étant fait, passons au test du bus usb, et branchons le scanner
Si tout se passe comme prévu, voici ce que vous devez faire pour 'voir' le périphérique (nous nous limitons au scanner):
# cat /proc/bus/usb/devices | grep -A4 Vendor

P:  Vendor=06bd ProdID=2061 Rev= 1.00
S:  Manufacturer=AGFA 
S:  Product=SNAPSCAN
C:* #Ifs= 1 Cfg#= 1 Atr=40 MxPwr=100mA
I:  If#= 0 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=ff Driver=usbscanner
Comme d'habitude, vous avez aussi des informations dans /var/log/syslog:
# tail -13  /var/log/syslog

Mar  8 16:13:14 localhost kernel: uhci.c: root-hub INT complete: port1: 193 port2: 80 data: 2
Mar  8 16:13:14 localhost kernel: hub.c: port 1 connection change
Mar  8 16:13:14 localhost kernel: hub.c: port 1, portstatus 301, change 1, 1.5 Mb/s
Mar  8 16:13:15 localhost kernel: hub.c: port 1, portstatus 103, change 0, 12 Mb/s
Mar  8 16:13:15 localhost kernel: hub.c: USB new device connect on bus1/1, assigned device number 2
Mar  8 16:13:15 localhost kernel: usb.c: kmalloc IF c3ab3500, numif 1
Mar  8 16:13:15 localhost kernel: usb.c: new device strings: Mfr=1, Product=2, SerialNumber=0
Mar  8 16:13:15 localhost kernel: usb.c: USB device number 2 default language ID 0x409
Mar  8 16:13:15 localhost kernel: Manufacturer: AGFA 
Mar  8 16:13:15 localhost kernel: Product: SNAPSCAN
Mar  8 16:13:15 localhost kernel: usb.c: usbscanner driver claimed interface c3ab3500
Mar  8 16:13:15 localhost kernel: usb.c: kusbd: /sbin/hotplug add 2
Mar  8 16:13:15 localhost kernel: usb.c: kusbd policy returned 0xfffffffe
Si vous voyez votre scanner comme dans les lignes ci dessus, c'est déjà presque gagné.


Les logiciels utiles

Pour utiliser un scanner, il vous faut deux parties:

  1. les librairies de gestion des scanners
  2. une interface pour scanner
Les librairies se trouvent dans le paquet sane. Se sont en fait deux paquets:
  1. sane-backends: les librairies à proprement parlé;
  2. sane-frontends: des utilitaires pour tester le scanner, ainsi qu'une interface graphique
La version à ce jour (07/03/2002): 1.0.7. Elle permet la gestion des scanner usb (ça tombe bien, c'est ce que l'on cherche!)
Et comme interface graphique, celle que je préfère est xsane
La version à ce jour (07/03/2002): 0.84.
Il va falloir, la auss, compiler et installer dans l'ordre:
# cd /usr/local/src/
# tar xzvf /home/admin/tmp/sane-frontends-1.0.7.tar.gz 
# tar xzvf /home/admin/tmp/sane-backends-1.0.7.tar.gz 
# tar xzvf /home/admin/tmp/xsane-0.84.tar.gz 
# cd sane-backends-1.0.7/
# ./configure
# make
# make install
# cd ..
 # cd sane-frontends-1.0.7/
# ./configure
# make
# make install
# cd ..
# cd xsane-0.84/
# ./configure
# make
# make install
S'il n'y a pas d'erreur, nous pouvons configurer la librairie sane, dont il faut lui indiquer quel scanner rechercher et ainsi que le périphérique sur lequel il est connecté.
On commence par éditer le fichier /usr/local/etc/sane.d/dll.conf, et garder la ligne contenant l'unique mot snapscan. Ensuite, éditez le fichier /usr/local/etc/sane.d/snapscan.conf (vous pouvez le trouver ici) et modifiez le périphérique d'acces:
#/dev/sg0
/dev/usbscanner
Une fois ceci fait, il reste deux choses à faire: Pour ce qui est du firmware, il doit se trouver sur le cd d'installation pour windows. Si vous l'avez déjà installé sous W9x, chercher un fichier nommé 'SnapScan 1212U_2.bin'. A défaut, essayez le site support d'agfa, mais je ne l'ai pas trouvé dessus, ou bien les listes de discussion d'usenet. En dernier recours, ce fichier se trouve peut-être avec le logiciel maison d'agfa Scanwise.
Lorque vous l'avez, placez le ou vous voulez, de toute façon, vous allez renseigner le fichier de configuration de sane. Personnellement, je l'ai placé dans /usr/local/lib/
Ce micro code est un programme qui gère le scanner, comme une sorte de bios, mais au lieu d'être en mémoire morte, il est placé en mémoire vive. De ce fait, dès que vous coupez l'alimentation du scanner, cette mémoire s'efface, et il faut envoyer à chaque fois le micro code.
Une astuce: si vous disposez de windows, utilisez le scanner sous W9x, puis redemarrez sous linux SANS ETEINDRE le scanner. Ainsi, le micro code sera déjà en mémoire. Pour des tests, cela peut être utile, mais à terme, il nous faudra changer cette méthode.

Pour charger le micro code au scanner, sous linux, il faut utiliser un script perl. Pour cela, recupérez celui ci, nommé agfafirm, et copiez le, par exemple, dans /usr/local/bin/ (vous pouvez trouver la version valable à ce jour (08/03/2002) ici) L'utilisation est simple:
# agfafirm /usr/local/lib/snapscan_1212U_2.bin /dev/usbscanner
Aprés le chargement, le scanner effectue une initialisation. La lampe du scanner doit se déplacer légèrement et la LED verte doit clignoter pendant 5 à 10 secondes.

Et maintenant, on fait quoi?
Sans être sous root, on lance xsane!
$ xsane
Et youpi, ça fonctionne!


Améliorons un peu

Pour améliorer le tout, on peut demander à votre linux, au démarrage, de charger le micro code:
Sur ma debian, j'ai installé le paquet usbmgr ( by Shuu Yamaguchi: shuu@wondernetworkresources.com
Ce paquet permet de charger un peripherique à la volée. Il necessite un fichier de configuration, ou il faut spécifier les périphériques que l'on va connecter (mais il y a déjà une liste assez complète). Grace à ça, on va lui dire de lancer le script agfafirm à chaque connection du scanner. La ligne qui gère le snapscan est celle ci:

# SnapScan 1212U [Agfa]
vendor 0x06bd product 0x0001 script scanner module scanner
# SnapScan 1212U [Agfa]
vendor 0x06bd product 0x2061 script scanner module scanner
le mot clef script est suivi du nom du script à exécuter lors du branchement/debranchement du scanner. Vous trouverez mon script ici L'avantage de l'usbmgr, c'est que l'on peut avoir plusieurs scanner usb, puisque nous pouvons faire un script pour chacun d'eux. Par exemple, un script 'firmware_snapscan_1212u' et un script 'firmware_snapscan_touch', et configurer l'execution d'un script en fonction duscanner detecté (c'est ce que j'ai fait, ayant la possibilité de connecter l'un de ceux là).


Et The Gimp?

Tout ça, c'est bien beau, mais utiliser xsane seul, ce n'est pas toujours très pratique. Il faut lancer xsane, faire le scan, le sauver, et lancer gimp derrière pour pouvoir retoucher le résultat.
Et bien, nous allons faire en sorte d'utiliser directement xsane dans gimp. Pour cela, il faut simplement faire un lien!
Selon que vous voulez permettre l'utilisation du scanner, à tous les utilisateurs ou juste à vous même, le lien ne sera pas au même endroit:

Et voila, vous trouvez à présent xsane dans le menu Fichier -> Acquisition -> XSane: Device Dialog...


Conclusion

Mis à part le noyau à recompiler, ce n'était pas si difficile, et quel plaisir avec usbmgr de changer de scanner en fonction de l'endroit ou l'on est!




S'il vous arrivait de vous servir de cette doc, envoyez moi un petit mot, merci!