Association Bordelaise des Utilisateurs de Logiciels libres
Scanner EPSON Perfection 1670 USB
Après avoir utilisé pendant près de 10 ans un scanner epson gt 6500 SCSI (mort dans un dernier soufle de scsi request timeout) je suis passé cette semaine à un scanner USB (wha le diplodocus se modernise).
Voici les quelques informations - en français - nécessaires pour que ça marche vite et bien chez vous ... moi j’ai perdu un peu de temps dans les docs - en anglais - obscures !
1. Epson perfection 1670
À ne pas confondre avec le expression 1670 ... c’est pas la même catégorie de scanner !
L’epson perfection 1670 existe en deux modèles : le photo et le "pas photo" :) la seule différence : le modèle photo permet de scanner des diapos et des négatifs.
2. Installation
Pour l’installation c’est pas trop compliqué :
– Un câble USB2 à mettre sur votre ordinateur (ça marche aussi en USB1 ou USB1.1 y parait mais je n’ai pas testé),
– un câble d’alimentation électrique et c’est tout !
2. Configuration (installation logicielle)
Tout ce qui suit a été fait sur Debian GNU/Linux unstable et kernel 2.6.1, à vous de modifier pour votre distribution et votre kernel.
Cet article est également validé sur le même ordinateur en kernel 2.4.23.
2.1 À savoir
C’est là que ça se complique un peu, pour que ce scanner puisse marcher il faut le "firmware" propriétaire qui est contenu dans les drivers windows du scanner (livré sur le cdrom d’accompagnement).
Le hic c’est quand on a pas windows ... d’habitude on a cabextract qui permet d’extraire le contenu des fichiers .cab mais là ça n’a pas marché (version trop récente des fichiers .cab qui sont sur le cdrom d’epson).
Résultat j’ai trouvé sur l’internet le fichier en question, mais il risque de disparaître du jour au lendemain (c’est du proprio et je ne suis pas certain qu’on ait le droit de le diffuser sur le net) à l’adresse suivante : http://www.geocities.com/thkalm/ESFW30.BIN
Copiez ce fichier sur votre disque dur, par exemple dans /usr/lib/sane/firmware.
Ensuite, il faut savoir que le scanner epson perfection 1670 est géré non pas par le driver "epson" de sane mais par le driver "snapscan" comme c’est expliqué ici :
– http://www.sane-project.org/sane-backends.html#SNAPSCAN
– http://www.sane-project.org/man/sane-snapscan.5.html
– http://snapscan.sourceforge.net/
2.2 Configuration de sane
Il faut donc modifier le fichier /etc/sane.d/snapscan.conf pour avoir ce qui suit :
#------------------------------ General -----------------------------------
firmware /usr/lib/sane/firmware/ESFW30.BIN
#---------------------------------------------------------------------------
# No changes should be necessary below this line
#---------------------------------------------------------------------------
#on ne modifie donc pas ce qui suit, mais très important dans la partie général on n'indique RIEN d'AUTRE que le firmware, par exemple IL NE FAUT PAS indiquer que le scanner est en /dev/usb/scanner0 par exemple !
2.3 Configuration système (kernel, module etc.)
Quand je connecte mon scanner sur mon ordinateur, le module scanner est automatiquement chargé ... j’ai perdu une bonne heure à cause de ça !
En effet, l’accès au scanner epson perfection 1670 ne se fait pas via le module kernel scanner mais via la libusb !
C’est expliqué sur la page suivante : http://snapscan.sourceforge.net/ mais j’ai mis du temps à comprendre ... en bref le module scanner NE DOIT PAS ÊTRE CHARGÉ POUR QUE LE SCANNER PUISSE MARCHER !
J’ai donc tout simplement enlevé le module scanner de mon /lib/modules/kernel-version/
C’est aussi pour ça que le fichier snapscan.conf ne doit pas faire appel à /dev/usb/scanner0 !
3. Bon, on scanne oui ?
Oui, vous pouvez maintenant connecter votre scanner, vérifiez que le module scanner n’est pas chargé et ensuite lancez xsane ...
Le hic c’est que ça ne marche que quand on est root ! Et oui la libusb utilise directement le /proc/bus/usb/* et tout ce petit monde n’est pas accessible aux utilisateurs lambda.
Vous pouvez donc tester votre scanner en root, si tout marche il suffit de modifier les droits de votre /proc/bus/usb/* pour que ça soit ok pour votre utilisateur habituel.
Par exemple chez moi j’ai l’utilisateur erics dans le groupe scanner.
chmod g+w /proc/bus/usb/001/003
chown :scanner /proc/bus/usb/001/003
Le hic c’est que des fois il n’est pas en "003" :) ... pour la solution, regardez ce qui suit :
3.1 Un petit script pour automatiser tout ça
#!/bin/sh
echo "Script à lancer dès qu'on connecte le scanner Epson perfection 1670"
echo ""
echo "Eric Seigne, le 14/01/2004 pour RyXéo: <eric.seigne at ryxeo.com>"
echo "Droits avant:"
ls -al <span class="base64" title="PGNvZGUgY2xhc3M9J3NwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lJyBkaXI9J2x0cic+bHN1c2IgfCBncmVwIEVwc29uIHwgY3V0IC1kICc6JyAtZjEgfCBhd2sgJ3twcmludCAmcXVvdDsvcHJvYy9idXMvdXNiLyZxdW90OyQyJnF1b3Q7LyZxdW90OyQ0fSc8L2NvZGU+"></span>
chmod g+w <span class="base64" title="PGNvZGUgY2xhc3M9J3NwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lJyBkaXI9J2x0cic+bHN1c2IgfCBncmVwIEVwc29uIHwgY3V0IC1kICc6JyAtZjEgfCBhd2sgJ3twcmludCAmcXVvdDsvcHJvYy9idXMvdXNiLyZxdW90OyQyJnF1b3Q7LyZxdW90OyQ0fSc8L2NvZGU+"></span>
chown :scanner <span class="base64" title="PGNvZGUgY2xhc3M9J3NwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lJyBkaXI9J2x0cic+bHN1c2IgfCBncmVwIEVwc29uIHwgY3V0IC1kICc6JyAtZjEgfCBhd2sgJ3twcmludCAmcXVvdDsvcHJvYy9idXMvdXNiLyZxdW90OyQyJnF1b3Q7LyZxdW90OyQ0fSc8L2NvZGU+"></span>
echo "Droits après:"
ls -al <span class="base64" title="PGNvZGUgY2xhc3M9J3NwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lJyBkaXI9J2x0cic+bHN1c2IgfCBncmVwIEVwc29uIHwgY3V0IC1kICc6JyAtZjEgfCBhd2sgJ3twcmludCAmcXVvdDsvcHJvYy9idXMvdXNiLyZxdW90OyQyJnF1b3Q7LyZxdW90OyQ0fSc8L2NvZGU+"></span>
echo "Changement des droits terminé, vos utilisateurs membres du groupe scanner peuvent maintenant utiliser sane sans problème."
Limitations : si vous avez plusieurs périphériques EPSON en USB ce petit script doit montrer ses limites, ce n’est pas mon cas ici donc je ne peux pas trop prendre ce cas de figure en compte mais attention tout de même si votre imprimante epson par exemple ne marche plus c’est ptet à cause de ça !
Et xsane marche très bien, j’ai juste un petit message d’erreur lorsque je quitte xsane mais bon je vais bien finir par trouver ce qui cloche :)
3.2 Utilisons hotplug ... et tout est déjà prémarché !
J’ai voulu mettre mon petit script dans hotplug pour qu’il soit lancé automatiquement dès que je connecte le scanner sur le port USB et j’ai trouvé que tout est déjà prêt :
– editez /etc/hotplug/usb/libsane.usermap
– modifiez VVVV par le vendor_id de votre scanner (chez moi c’est 04b8)
– modifiez PPPP par le product_id de votre scanner (chez moi c’est 011f)
Pour trouver le product_id et le vendor_id c’est pas compliqué : lancez la commande lsusb :
erics@pantoufle:/$ lsusb
Bus 004 Device 001: ID 0000:0000
Bus 003 Device 001: ID 0000:0000
Bus 002 Device 002: ID 046d:c00e Logitech, Inc. Optical Mouse
Bus 002 Device 001: ID 0000:0000
Bus 001 Device 002: ID 04b8:011f Seiko Epson Corp.
Bus 001 Device 001: ID 0000:0000
Ça donne donc un fichier libsane.usermap comme ceci (chez moi) :
# This file is installed by the libsane Debian package.
#
# Sample entry (replace 0xVVVV and 0xPPPP with vendor ID and product ID respectively) :
libusbscanner 0x0003 0x04b8 0x011f 0x0000 0x0000 0x00 0x00 0x00 0x00 0x00 0x0
0 0x00000000
Relancez hotplug (/etc/init.d/hotplug restart), connectez votre scanner et hop magique tous les /proc/bus/usb/ ???/ ??? qui correspondent à votre scanner usb auront les droits ad-hoc !