= Scanner am USB-Port =

Wer LinuxScanner betreiben will, interessiert sich natürlich oft
auch für die preiswerten USB-Geräte. Hier meine Erfahrung mit einem
solchen. -- ThomasBayen

== Treiber finden ==

Aus der Liste der unterstützten Geräte auf der SANE-Homepage habe
ich mir meinen Scanner herausgesucht. Es handelt sich um einen
'''Mustek Scan Express 1200 UB Plus'''. Wie die Liste verrät,
basiert er auf einem GT6801-Chip, der wohl im Bereich preiswerter
Scanner relativ weit verbreitet ist. Übrigens scheint dieser
Scanner in ähnlicher Form auch gerne von Tevion oder Medion (also
bei Aldi) Verwendung zu finden.

== Firmware ==

Die GT68xx-Scanner benötigen jeweils eine Firmware-Datei, die bei
der Initialisierung des Scanners in diesen hochgeladen werden muss.
Auf der unten angegebenen Treiber-Homepage habe ich einen Link für
meinen Scanner gefunden, ansonsten kann man diese nach Anleitung
von der Windows-Cd extrahieren. Die Firmware-Datei (in meinem Falle
'''sbfw.usb''') habe ich dann wie unten beschrieben in das
Firmware-Verzeichnis des Treibers kopiert.

Ich konnte diese Firmware nicht aus dem Internet holen und habe sie
deshalb auf der mitgelieferten CD gesucht. Sie steht tatsächlich im
Unterverzeichnis 'WinXP'. Ich habe sie dann einfach ins geforderte
Verzeichnis ''/usr/share/sane/gt68xx'' mit der geforderten
Umbenennung ''PS1fw.usb'' kopiert und es funktionierte. --
KaiEhlers -- 

== Installation ==

=== Erkennung des USB-Gerätes ===

Zur Erkennung von USB-Geräten läuft bei mir das Paket '''usbmgr'''.
Wer das nicht hat, sollte es erstmal installieren.


Ich arbeite in der Weile mit 'hotplug'. Es scheint mir sogar
einfacher damit zu funktionieren. --KaiEhlers --


Zuerstmal habe ich mit <tt>tail -f /var/log/syslog</tt>
das System-Log beobachtet und dann den Scanner eingesteckt. In
meinem Falle wurde der Scanner nicht automatisch erkannt:

  Jan  2 14:32:59 jupiter kernel: hub.c: new USB device 00:02.2-1,
assigned address 2
  Jan  2 14:32:59 jupiter kernel: usb.c: USB device 2 (vend/prod
0x5d8/0x4002) is not claimed by any active driver.
  Jan  2 14:33:00 jupiter usbmgr[546]: vendor:0x5d8 product:0x4002
  Jan  2 14:33:00 jupiter usbmgr[546]: class:0xff subclass:0xff
protocol:0xff
  Jan  2 14:33:00 jupiter usbmgr[546]: USB device isn't matched the
configuration
  Jan  2 14:38:01 jupiter usbmgr[546]: bye!

Trotzdem steht hier eine interessante Information: Die Vendor- und
Product-ID identifizieren dieses Gerät eindeutig. Daraufhin habe
ich folgende Zeilen in die Datei ''/etc/usbmgr/usbmgr.conf''
eingefügt:

  ### THOMAS_BAYEN
  # Mustek ScanExpress 1200 UB Plus [Mustek]
  vendor 0x05d8 product 0x4002 module scanner

Jetzt weiss der usbmgr, dass er das Modul ''scanner'' laden soll,
wenn dieses Gerät eingesteckt wird. Man kann davon ausgehen, daß
dieser Eintrag in zukünftigen Versionen des usbmgr-Paketes bereits
enthalten sein wird.

=== Zugriff für Benutzer ===

Mit

  chmod o+w /proc/bus/usb/002/002

habe ich allen Benutzern Schreibzugriff auf den Scanner erteilt.
Das funktioniert dann aber nur bis zum nächsten Reboot bzw.
Umstöpseln des Gerätes am USB-Bus.

Nacj einigem Überlegen und Studium der Kernel-Sourcen habe ich dann
auch herausgefunden, wie es besser geht... Man kann dem usbfs
sagen, welche Zugriffsrechte die von ihm eingerichteten Inodes
bekommen, wenn ein USB-Gerät eingestöpselt wird. Dabei kann man
User, Gruppe und Mode angeben. Näheres steht im Kernel in
''src/drivers/usb/inode.c''. Der richtige Weg wäre jetzt, eine
Gruppe ''usb'' einzurichten. Ein User müsste dann dieser Gruppe
angehören, wenn er auf usb-Geräte zugreifen will. Ähnliches
geschieht unter Debian bereits mit den Gruppen ''audio'' oder
''floppy''. Eine noch perfektere Methode wäre, den usbmgr dazu zu
bringen, daß er nach dem Erkennen eines Gerätes spezielle
Permissions für genau dieses Gerät vergibt.

Für ein einfaches Setup ohne Zugriffsschutz reicht es aber, die
Modes entsprechend zu setzen. Dazu habe ich folgende Zeile in die
'''/etc/fstab''' geschrieben:

  usbfs   /proc/bus/usb   usbfs   defaults,devmode=0666   0 0

...jetzt ist das scanner-Kernelmodul richtig geladen. Nun können
wir uns dem SANE-Treiber widmen:

=== grundsätzliche Scannererkennung ==

...geht bei SANE mit '''sane-find-scanner''' und '''scanimage
-L'''. Dies ggf. als root und als User testen.

=== Der SANE-Treiber gt68xx ===

Es gibt wie zu allen SANE-Backends eine Manpage, die mit '''man
sane-gt68xx''' aufgerufen werden kann. Da mein Mustek scheinbar die
gleiche USB-ID wie einige andere Scanner (aber doch einige
Unterschiede) hat, habe ich wie in der manpage beschrieben eine
Zeile in ''/etc/sane.d/gt68xx.conf'' auskommentiert.

Dann habe ich die Firmwaredatei nach '''/usr/share/sane/gt68xx/'''
kopiert.

Dann konnte ich auch schon mit

  scanimage >test.pnm

scannen! :-)

=== Andere Treiber ===

Wer einen BrotherDrucker mit integriertem Scanner besitzt, sollte dort einmal nachlesen.

==== Mehrere Devices ====

Ein kleines Problem kann auftreten, wenn man mehrere Scan-Devices
hat. Dies war bei mir der Fall, weil ich eine TV-Grabber-Karte im
Rechner habe, an die ich erstmal gar nicht als "Scanner" gedacht
habe. Falls also ''scanimage -L'' mehrere Scanner anzeigt, scannt
man z.B. mit:

  scanimage -d gt68xx:libusb:002:002 >test.pnm


Ich habe statt mit 'scanimage' mit 'xsane' gearbeitet und nur beim
ersten Mal bot er mir die TV-Karte und den Scanner an. Nachdem ich
den Scanner gewählt hatte, benutzte er diesen automatisch bei jedem
weiteren Start. -- KaiEhlers --


== Links ==

* http://www.meier-geinitz.de/sane/gt68xx-backend/ -
Treiber-Homepage
* ScannerImNetzwerk - Wie ich meinen Scanner für andere Rechner freigebe