Mini scanner USB How-TO

by Kailed
kailed@tiscalinet.it

http://web.tiscalinet.it/kailed

v 0.1.1   8 Ottobre 2001

Un mini (molto mini..) How-To (più che altro un resoconto di quello che ho fatto io...) per far funzionare gli scanner usb, quelli supportati ovviamente... Per prima cosa controllate su www.mostang.com se e come il vostro scanner è supportato. Poi ovviamente serve un kernel con il supporto USB, se utilizzate distro come Suse, RH, Mdk (abbastanza recenti..), siete molto probabilmente già a posto. Se invece utilizzate Debian, o anche una delle distro sopra citate ma con il kernel ufficiale, (cioè senza patch varie..) vi dovrete procurare la patch per l'USB, che trovate qui
Il prossimo passo, consiste nel ricompilare il kernel e, per evitare possibili inconvenienti, consiglio di compilare tutto stabilmente nel kernel, senza cioè utilizzare i moduli ( quando poi funziona, fate come vi pare..). Le opzioni che dovete attivare sono:


CONFIG_USB=y
CONFIG_USB_DEVICEFS=y
CONFIG_USB_BANDWIDTH=y
CONFIG_USB_UHCI_ALT=y
CONFIG_USB_SCANNER=y

Esistono due driver per due tipi di controller diversi, OHCI e UHCI, in realtà, di driver UHCI ce ne sono due, se avete dei problemi, provateli entrambi (prima un e poi l'altro...). Fate riferimente all'Help e alla documentazione del kernel, oltre a ovviamente a quella della motherboard, per sapere quale controller avete. Fate anche attenzione che, se avete uno scanner Microtek, c'è una opzione apposta. Ricompilate e riavviate. Adesso dovreste vedere, durante il boot, alcumi messaggi tipo questi:

usb.c: registered new driver usbdevfs
usb.c: registered new driver hub
usb.c: registered new driver usbscanner
scanner.c: USB Scanner support registered.
uhci.c: USB UHCI at I/O 0xd400, IRQ 9
uhci.c: detected 2 ports
usb.c: new USB bus registered, assigned bus number 1
usb.c: USB new device connect, assigned device number 1
hub.c: USB hub found
hub.c: 2 ports detected
uhci.c: root-hub INT complete: port1: 93 port2: 80 data: 2

Controllate di avere in /dev, il/i devices usbscanner0, usbscanner1...tutti quelli che vi servono, uno per ogni periferica. Se il dispositivo manca, createlo con: mknod /dev/usbscanner0 c 180 48 (usbscanner1 c 180 49, etc,etc...), fate anche il symlink: ln -s /dev/usbscanner0 /dev/usbscanner. Modificate i permessi con: chmod 666 /dev/usbscanner0
Altra cosa utile che potete fare (non è indispensabile..), è aggiungere a /etc/fstab la seguente riga:

usbdevfs    /proc/bus/usb              usbdevfs              defaults 0 0
Poi, da root, fate # mount usbdevfs. Troverete in /proc/bus/usb/ alcune informazioni sui devices connessi alle porte USB. Al prossimo riavvio, nei messaggi durante il boot, dovreste vedere questa "comunicazione":
usbdevfs on /proc/bus/usb type usbdevfs (rw).

Adesso, per utilizzare lo scanner, vi serve, se già non l'avete, il pacchetto "sane". I files di configurazione di sane, dovrebbero essere in /etc/sane.d/ o in /usr/local/etc/sane.d, editate il file dll.conf e commentate (#) TUTTE le voci tranne "net" e quella che riguarda il vostro scanner, nel mio caso, "HP".
Adesso editate il file "nomescanner.conf" nel mio caso sempre "hp.conf", che dovrà contenere le seguenti due righe:

/dev/usbscanner
option connect-device

Adesso, non vi resta altro che provare lo scanner, digitate da root, in un terminale, scanimage -T, che dovrebbe darvi come risultato:
scanimage: scanning image of size 2550x3507 pixels at 1 bits/pixel
scanimage: acquiring gray frame, 1 bits/sample
scanimage: reading one scanline, 319 bytes...   PASS
scanimage: reading one byte...          PASS
scanimage: stepped read, 2 bytes...     PASS
scanimage: stepped read, 4 bytes...     PASS
scanimage: stepped read, 8 bytes...     PASS
scanimage: stepped read, 16 bytes...    PASS
scanimage: stepped read, 32 bytes...    PASS
scanimage: stepped read, 64 bytes...    PASS
scanimage: stepped read, 128 bytes...   PASS
scanimage: stepped read, 256 bytes...   PASS
scanimage: stepped read, 512 bytes...   PASS
scanimage: stepped read, 511 bytes...   PASS
scanimage: stepped read, 255 bytes...   PASS
scanimage: stepped read, 127 bytes...   PASS
scanimage: stepped read, 63 bytes...    PASS
scanimage: stepped read, 31 bytes...    PASS
scanimage: stepped read, 15 bytes...    PASS
scanimage: stepped read, 7 bytes...     PASS
scanimage: stepped read, 3 bytes...     PASS

Ok, potete esultare ma ci sono ancora due cosette da sistemare......
Per poter utilizzare lo scanner anche da utente, e in rete, dovete utilizzare inetd, aggiungete in /etc/inetd.conf, la seguente riga:

sane    stream  tcp     nowait  root    /usr/local/sbin/saned saned

Ovviamente, controllate il PATH di saned, che potrebbe essere diverso. Riavviate inetd con killall -HUP inetd. In verità, a me lo scanner funziona regolarmente, anche senza questa riga, ma questa dovrebbe essere la prassi giusta quindi.....
Probabilmente serve solo per utilizzare lo scanner in rete, semmai fate qualche prova, io sono pigro:). A tal proposito (rete) se volete che lo scanner sia utilizzabile da altre macchine in rete, aggiungete il nome della macchina al file saned.conf, che di default dovrebbe contenere solamente "localhost", più ovviamente alcuni commenti sul file stesso. Per utilizzare lo scanner anche sotto X, magari con Gimp, installatevi il pacchetto xsane, un discreto front-end per sane. La prima finestra, dovrebbe mostrarvi i due devices disponibili, nel mio caso:

[hp:/dev/usbscanner]
[net:localhost:hp:/dev/usbscanner]

Come utente, dovreste utilizzare la seconda ma ripeto, da me funzionano regolarmente tutte e due....
Ultima cosa, se utilizzate Gimp, vorrete sicuramente utilizzare lo scanner per importare direttamente le immagini dentro il programma, per farlo, cd .gimp-x.x/plug-ins e fate: ln -s `which xsane` xsane (attenzione agli apici rovesciati!!). Sane, xsane e gimp, sono normalmente presenti in tutte le distribuzioni, anche se, specialmente per sane, può essere conveniente, procurarsi l'ultima versione disponibile.

Questo procedimento l'ho sperimentato su due Suse 7.0, una equipaggiata con: kernel 2.2.16-Suse, sane-1.0.3, xsane-0.57.40 e Gimp-1.1.26-helix.
La seconda con: kernel 2.4.0-test8, sane-1.0.2, xsane-0.57.40 e Gimp-1.1.24. Lo scanner è un 4100c HP.
Attualmente uso una Suse 7.2, kernel 2.4.7, sane-1.0.4 e Xsane-0.70.

Ovviamente, potrebbe esserci qualche cosetta da aggiustare, specialmente se non utilizzate uno scanner HP. Fate sempre riferimento alla documentazione del kernel e a quella di sane. Alcuni scanner, non vanno con le patch USB per i kernel 2.2.x, ma hanno proprio bisogno di un kernel 2.4.0 che attualmente è "unstable". Vedete voi se rischiare...

Altri programmi

Oltre al già citato Xsane, c'è un altro front-end per sane, kooka per il kde2, è un progetto "giovane" ma funziona (e promette..) bene. Una nota dolente viene dai programmi OCR, ce ne sono un paio, Gocr e Clara ma vanno maluccio, il secondo (Clara) è un po' più completo e configurabile e per questo anche un po' più ostico da utilizzare. Kooka si "appoggia" a Gocr. Entrambi non implementano la scansione ma si appoggiano all'ormai noto sane (e Xsane). Speriamo per il futuro di avere qualcosa di decente....
Di programmi OCR, in realtà ce n'è anche un terzo ma è commerciale e "caruccio", Ocrshop che utilizza il "motore" di Omnipage. Ha una propria lista di scanner supportati che non coincide esattamente con quella degli scanner funzionanti con Linux, per esempio, l'ultima volta che ho controllato, il 4100c non compare in quella lista. Se vi interessa: www.vividata.com credo che ci sia una versione "demo".


Ultimissima cosa (the last but not the least..) NON mi assumo alcun tipo di responsabilità, per eventuali danni a cose, persone, animali, etc,etc... Se volete seguire le indicazioni di questo mini how-to, fatelo ma a VOSTRO rischio e pericolo.