Shino's Bar

お家で使うLinuxTux

USBスキャナを使う

17 Jun 2003 (origin:17 May 2001)

Gimpという高機能のプログラムもあって、画像処理はLinuxの得意分野なので、画像入力装置も使えるようにしたい。 そのひとつスキャナなんだけど、最近は入力インターフェースがSCSIからUSBへと移ってきている。 Linuxにとって、USBインターフェースにはちょっと障壁がある。Vine linux-2.0でも一部USBが使えるようになっていたが、 VineLinux-2.1.5に含まれるkernel-2.2.18にはかなりまともなusbモジュールがはいっている。 Linux用のスキャナドライバはSANE(Scanner Access Now Easy) プロジェクトが開発している。 最近はEPSONのものへの対応がかなりできてきて、 Linuxで使うスキャナを新しく買うならEPSONにしなさいと言い切る人もいる。 たとえ動作実績リストに載っていなくても、EPSONのスキャナは命令体系がみんな同じなのでたいてい大丈夫だというのがその理由。

で、今回ははUSBインターフェースだけを持つ安価なスキャナEPSONGT-6700Uを導入したが、これがなかなかたいへんだった(^^;y

ソフトの導入

  1. ソフトの入手
  2. (基本的にはSRPMを入手し、リビルドします) SRPMからのインストールはこちらを参考にしてください。
    1. SANE(ドライバ)
    2. SANE clients (GUI)
    3. XSane(GUI)
    4. Gimp (画像処理アプリケーション)
  3. Gimpのアップグレード
  4. (必須ではありません。Vine Linux 2.5 以降など、すでにGimp-1.2が入っておれば必要ないでしょう。)
    XSainやXscanimageがプラグインをセットしたり、gimpのライブラリを使う関係で先にアプリケーションであるGimpのほうを1.1→1.2にアップグレードしておきます。gimp-1.2.*.src.rpmをリビルドしてできるRPMを3つを導入。
  5. ドライバの導入
  6. sane-*.nosrc.rpmをリビルドしてできるRPM2つを導入します。
  7. 次のXSaneを使うなら、 sane-clients (GUIインターフェース) は特に必要ありません。
  8. xscanimageを使いたいなら sane-clients-*.nosrc.rpm をリビルドしてを導入。 VinePlus/2.1/RPMSにあるバイナリパッケージでは gimp-1.2.xには対応しません。
  9. XSaneの導入
  10. xsane-*.src.rpmをリビルドしてできるRPMを導入します。 VinePlus/2.1/RPMSにあるバイナリパッケージでは gimp-1.2.xには対応しません。

設定(ちょっとひと仕事)

  1. USB-idを調べる
  2. まずはこの機器のUSB-idを知らねばなりません。 スキャナの電源を入れ、USBコネクタを差し込んでみます。 それからdmesgでメッセージを調べます。
    $ dmesg
    ...
    usb.c: USB new device connect, assigned device number 2
    usb.c: USB device 2 (prod/vend 0x4b8/0x10c) is not claimed by any active driver.
    最後にprod/vendで現れる vendor=0x04b8 product=0x10c というのがUSB-idです。

    この後の作業はroot権限が必要です。
  3. conf.modulesの設定
  4. /etc/conf.modules (システムによっては modules.conf) に以下を追記します。USB-idの部分は機種によって異なります。
    # Scanner
    alias char-major-180-48 scanner
    options scanner vendor=0x04b8 product=0x10c
    conf.modulesの変更後
    # /sbin/depmod -a
    を実行しておきます。
  5. preloadへの追記
  6. 最初からスキャナ用のusbドライバをロードするようにしておきます。 /etc/usbmgr/preloadに追記します。 すでにマウスに対する設定があったので追記後は次のようになりました。
    (Vile Linux 2.1.x の場合 )
    hid
    mousedev
    scanner
    以上は Vine Linux 2.1.x など usbmgr を採用している場合の記述です。 Vine Linux 2.5 以降では usbmgr ではなく murasaki を使用しているので これとは異なります。 [vine-users:056484] に Vine Linux 2.6(2.5も基本的に同じ)における方法が(murasaki 開発者より)説明されています。 次に再掲します。
    [ Vine Linux 2.5以降での手順]
    1) modules.usbmap( murasaki.usbmap か?)からscannerの行(第2アイテムが0x0003のもの)を
       /etc/murasaki/murasaki.usbmapにコピーする
    2) murasaki.usbmapのコピーした行を以下のように変更する
    	第1アイテム → alias-7300U
    	第3アイテム  → 0x4b8
    	第4アイテム →  0x11d
    3) /etc/murasaki/murasaki.dependに以下を追加する(線は含めない)
    ------------------------------------------------- 
    alias-7300U: scanner vendor=0x4b8 product=0x11d
    -------------------------------------------------
  7. saneの設定
  8. デバイスファイルの準備

  9. /devを調べてみると、あれあれ(?) /dev/usbhpscanner というものができている。Vine-2.1.5を入れたときに作られたものだろうか。
    # ls -l /dev/usb*
    crw-rw-rw-    1 root    root     180,  48 Oct  9  2000 /dev/usbhpscanner
    ...
    名前だけの問題なのでこれを使ってもよいのだけれど、 やはりHPのスキャナじゃないのにヘンなので、新しいものを作ります。さきほどepson.dに設定した名前でデバイスファイルを作ります。/dev/usbhpscannerは残しておいても構いませんが、使う予定がなければこのさい削除しておきます。
    # rm /dev/usbhpscanner
    # mknod /dev/usb/scanner0 c 180 48 -m 666
    こうすると次のようになります。
    # ls -l /dev/usb*
    crw-rw-rw-    1 root     root     180,  48 17 May  5 16:5548 /dev/usb/scanner0
    ...

テスト

スキャナのUSBプラグをいったん抜き、ふたたび差し込んでみます。dmesgで確認。
$ dmesg | tail
...
usb.c: USB disconnect on device 2
usb.c: USB new device connect, assigned device number 2
scanner.c: probe_scanner: User specified USB scanner -- Vendor:Product - 4b8:10c
となればusbドライバによる認識はできています。 うまくいかないときは USBプラグを抜き差ししてトライします。 ときどき失敗することもあるようなので。
(失敗した場合)
...
usb.c: USB new device connect, assigned device number 2
scanner.c: probe_scanner: User specified USB scanner -- Vendor:Product - 4b8:10c
usb_control/bulk_msg: timeout
usb.c: error getting string descriptor 0 (error=-110)
うまくいけば次にsaneでの認識をテスト
$ scanimage -L
device `epson:/dev/usb/scanner0' is a Epson GT-6700 flatbed scanner
rootなユーザーならOKだが一般ユーザーで駄目でという場合はデバイスファイルのパーミッションの設定を見直してください。

ここまでくればしめたもの。スキャン動作もテストします。
$ scanimage -T -d epson:/dev/usb/scanner0
scanimage: scanning image of size 632x879 pixels at 1 bits/pixel
scanimage: acquiring gray frame, 1 bits/sample
scanimage: reading one scanline, 79 bytes...	PASS
scanimage: reading one byte...		PASS
scanimage: stepped read, 2 bytes... 	PASS
...
...
scanimage: stepped read, 3 bytes... 	PASS
スキャナが動き、PASSの字が並べばOKです。


(補足)
  1. ソースの入手
  2. Linux USB Project へ行くと USB-idのリスト やLinuxでの対応機器の調査ができます。 GT-6700Uはここには現れませんが、USB-idからするとPerfection640Uの日本市場向けらしい。 Perfection640Uのmore info によるとkernelの再コンパイルが必要だとのことですが、 今回はそうしないで、modules.confでoptionを指定する方法ををとりました。
  3. usgmgrには/必要に応じてusbドライバを自動的にロードする機能があるようなので試しましたが、うまく動きませんでした。 /etc/usbmgr/usbmgr.conf に
    # Perfection 640, GT-6700 [Epson]
    vendor 0x04b8 product 0x010c module scanner
    を追加。 ついでにEPSONのスキャナの分かっている範囲を追加後の/etc/usbmgr/usbmgr.confはこれ。 このあとデーターベースを更新、usbmgrを再起動。
    # /sbin/update_usbdb /etc/usbmgr/usbmgr.conf
    # /etc/rc.d/init.d/usbmgr restart
    
    としてみた。
  4. char-major-180-48というのはLinuxで決められた USB Divice Number。USBスキャナを複数つなぐとき2台目はchar-major-180-49というふうになる。
    古いタイプの機種などで、もし vedorとproduct-idが scanner.oに 組み込まれていればoptions vendor=xxxx product=xxxx は必要ない。 組み込まれているかどうかは、kernel-sourceをインストールしておれば /usr/src/linux/drivers/usb/scanner.h を参照することで分かる。



この件に関し質問、アドバイスは E-mail で マスターまで
Shino's Bar goto [シノバー店内案内] [お家で使うLinux]