Linuxでデジカメの活線を検知


デジカメをUSB経由で接続したときに、スクリプトを流すようにしたくて設定してみました。
Writing udev rules を参考に調べてみましたが、細かい所で古い部分(?)があるみたいでしたので、メモを残しときます。
どの辺が古そうかと言うと、私の環境では Writing udev rules に説明のあった、udevtestやudevcontrolコマンドがありませんでした。
代わりにudevadmを使うみたいです。
なお、デジカメは IXY DIGITAL 800IS で、接続先は Gentoo マシン。udev-124-r1。

デバイスの認識は最近のLinuxではほとんど苦労することもなくなりました。
USB経由でデジカメを接続したときには、裏方では udev が動いていて、デバイスノードの作成やパーミッションの変更をしてくれているようです。
今回は、この udev を利用して、デジカメ接続時にスクリプトを呼ぶように設定してみました。

この設定を行うためには udev のルールと言われるものを作成します。既存のルールは /etc/udev/rules.d/ 配下にあります。
このフォルダに新たに設定ファイル 99-local.rules を追加しました。

ルールの記述方法は、条件を == や != で記述し、条件に合致したときのアクションを RUN+="スクリプト" の書式で記述します。
例えば、今回作成したルールはこんな感じ。SUBSYSTEMやACTION、ベンダーや機種の条件が合致したときにスクリプトが流れるように設定しています。
SUBSYSTEM=="usb|usb_device", ACTION=="add",ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="3119",RUN+="/usr/bin/hoge"

ATTRS{idVendor}=="04a9"や ATTRS{idProduct}=="3119"の部分は、udevinfo コマンドで調査することができます。
デジカメを接続した状態で下記の様に実行します。(1.23の部分は接続する度にかわります。dmesg等の出力で調べられます。)
$ udevinfo -a -p /sys/class/usb_device/usbdev1.23
さて、新たに書いたルールを読み込ますには、
$ udevadm control reload_rules
デバックをするには、
$ udevadm test /class/usb_device/usbdev1.23
syslogに詳細なログを出すには、
$ udevadm control log_priority="debug"
これらを駆使すれば、認識しているデバイスに関しては何とかなると思います。



Comment