続々・SL-C760でUSB(2)

USBマウスを使う

SLザウルスでマウスを使うのは事実上、InputHelperAppletのお世話になるので、使い方を見るとREX-CFU1経由の場合のやり方が書いてある。
USBモジュールは・・・あら、USB Managerにあるようにhidとmousedevじゃなくて、usbmouseとmousedevとinputなのか。inputモジュールはSL-C3000の場合はカーネルで持ってるみたいだから、SL-C760とかだとキーボードなんかと同様に別途必要なんやね。
で、それはいいんだけどmousedevがhidを前提としてるみたいで、hidを外せない・・・と思ったら、これは神居さんのがそういう仕様になってるっぽい?humorumさんのを入れたらhidなくても動くようになった。inputはキーボードでも使うのでトラップさんのを使用。
で、問題はUSBモジュールのロードはUSB Managerで自動的に出来るんだけど、InputHelperAppletに対してopenMouse()のQCopメッセージを送ってマウスデバイスを開いてやらないと使えないらしい。スクリプトで自動化しようと思ったら、USB Managerから呼び出すスクリプトzaurusユーザーじゃないのでQCopコマンドがマトモに通らない模様(涙)
仕方なく、QtメニューにマウスONとマウスOFFのQcopを吐くアイコンを追加することにした。これはmemn0ckさんの地球アイコンをQtメニューに追加をそのままパクらせてもらった(笑)メニューの順番を決める番号を何番にするか悩んだけど、memn0ckさんのが12、13、14、塚本さんのが15を使ってたので16と17にしてみた。他と重ならなきゃいいけど。
(ここから、2005/05/17追記。)
これはInputHelperAppletがQCopメッセージ送信機能を持っているので、これを使ってやる。USB Managerの/etc/usbmgr/usbmgr.confにUSBマウスクラスの場合の記述として、「class 0x3 subclass 0x1 protocol 0x2 script mouse module input , mousedev , usbmouse」と「script mouse」を追記しておく。
あとは/etc/usbmgrにあるnetworkスクリプトを参考にmouseスクリプトを作る。「case $ACTION in」から「esac」を残して、「add)」の箇所に「echo 'QPE/InputHelper openMouse()' > /var/spool/inputhelper/qcop」と記述、「remove)」の箇所に「echo 'QPE/InputHelper closeMouse()' > /var/spool/inputhelper/qcop」と記述、さらに続けて「sleep 1」を記述。これはマウスデバイスのクローズを指示してからInputHelperがmousedevの使用を解放するまで若干時間がかかるようなので追記した。
これでUSBマウスを差し込めば、自動的に必要なモジュールがロードされ、マウスデバイスを開いてくれるので、マウスカーソルがデスクトップ画面の真ん中に現れて自由に使えるようになる。もちろん、USBマウスを外せばマウスカーソルが消えて、マウスデバイスがクローズされ、必要なモジュールのアンロードが行われる。
yaktyさん、コメントありがとうございました〜。
(ここまで、2005/05/17追記。)

USBメモリを使う(ついでにUSBなHDDも使う)

クラスが8、サブクラスが6、プロコトルが50ならばUSBマスストレージクラスと見なしてよさそうなので、これをUSB Managerの定義に加えて、モジュールとしてsd_mod、scsi_mod、usb-storageを書いておく。
usb-storageとscsi_modは神居さんとこにもあるけど、なぜかusb-storageがイニシャライズ中のまま止まってしまうので、humorumさんとこのsd_modと整合性あわないのかもしれない。てな訳で、全部humorumさんとこのを使う。
USBメモリを差し込むと/proc/scsi/scsiに機器情報が出る。基本的に上記モジュールをロードして一番最初に認識した機器は/dev/sda1となるみたいなので、モジュールを動的にロード/アンロードするUSB Managerを使う限りは常に/dev/sda1と考えてもよさそうだ。
あとはSL-C3000と同様に/mntにusbstorageディレクトリを作っておいて、/var/runにもusbディレクトリを作っておけば、/dev/sda1を/mnt/usbstorageにマウントした瞬間にファイルのホーム画面に/dev/sda1がアイコンとして出てくる。この辺はTAKETYONが見つけた通り。どうやら、/var/runにusbディレクトリを作らなくても良いみたい(2005/05/26追記)
http://d.hatena.ne.jp/taketyon/20050513
あとはマウント/アンマウントを自動化させる為に/etc/usbmgrにあるnetworkスクリプトを参考にstorageスクリプトを作る。「case $ACTION in」から「esac」を残して、「add)」の箇所に「mount -t vfat -o umask=000,noatime,iocharset=utf8,codepage=932 /dev/sda1 /mnt/usbstorage」と記述、「remove)」の箇所に「umount /mnt/usbstorage」と記述。
あとは/etc/usbmgr/usbmgr.confにUSBストレージクラスの場合の記述として、「class 0x8 subclass 0x6 protocol 0x50 script storage module scsi_mod , sd_mod , usb-storage」と「script storage」を追記しておく。
これでUSBメモリを差せば自動的にファイルのホーム画面に/dev/sda1のアイコンが現れて自由にアクセスできるようになり、抜けばファイルのホーム画面からアイコンが消えるようになった。素晴らしい〜。
ちなみにこの指定で、I-O DATAのUSB2-iCN2(USBストレージクラスで認識され、WindowsXPでもドライバ要らず)を使って、挑戦者のi・CONNECT 2.5'HDDケース SOTO-2.5iHに内蔵した2.5'HDD 810MB(東芝 MK0803MAT)をACアダプタ給電で繋ぐことができた。HDDの中身はWindows95のシステムが入った2パーティションFAT16なドライブ。先頭のパーティションのみだけど、問題なく読み書きできた。
あと、マウント方法やスクリプトによる自動化はK9shibaさんmoroさん塩田さんのレビューのページが詳しかった。