揮発性のメモ2

http://d.hatena.ne.jp/iww/

デバイスファイルが出来たときにアクションを起こしたい

/dev/input/event1が出来たときにプログラムを起動したい。
udevでやってみる
/etc/udev/rules.d/99-local-jikken.rules

ACTION=="add"   , SUBSYSTEM=="input", ENV{DEVNAME}=="/dev/input/event[0-9]", RUN+="/usr/local/bin/jikken add"
ACTION=="remove", SUBSYSTEM=="input", ENV{DEVNAME}=="/dev/input/event[0-9]", RUN+="/usr/local/bin/jikken remove"

addのときに動作しない


調査用コマンド udevadm

udevadm monitor --env

沢山出る

udevadm monitor --env  --subsystem-match=input

INPUTデバイスに絞れる

UDEV  [12201.239769] add      /devices/ocp.2/47400000.usb/musb-hdrc.1.auto/usb1/1-1/1-1.2/1-1.2:1.3/input/input19/event1 (input)
ACTION=add  ←★
DEVLINKS=/dev/input/by-id/usb-C-Media_Electronics_Inc._USB_PnP_Sound_Device-event-if03 /dev/input/by-path/platform-musb-hdrc.1.auto-usb-0:1.2:1.3-event
DEVNAME=/dev/input/event1  ←★
DEVPATH=/devices/ocp.2/47400000.usb/musb-hdrc.1.auto/usb1/1-1/1-1.2/1-1.2:1.3/input/input19/event1
ID_BUS=usb
ID_INPUT=1
ID_INPUT_KEY=1
ID_MODEL=USB_PnP_Sound_Device
ID_MODEL_ENC=USB\x20PnP\x20Sound\x20Device
ID_MODEL_ID=0139
ID_PATH=platform-musb-hdrc.1.auto-usb-0:1.2:1.3
ID_PATH_TAG=platform-musb-hdrc_1_auto-usb-0_1_2_1_3
ID_REVISION=0100
ID_SERIAL=C-Media_Electronics_Inc._USB_PnP_Sound_Device
ID_TYPE=hid
ID_USB_DRIVER=usbhid
ID_USB_INTERFACES=:010100:010200:030000:
ID_USB_INTERFACE_NUM=03
ID_VENDOR=C-Media_Electronics_Inc.
ID_VENDOR_ENC=C-Media\x20Electronics\x20Inc.\x20\x20\x20\x20\x20\x20
ID_VENDOR_ID=0d8c
MAJOR=13
MINOR=65
SEQNUM=1883
SUBSYSTEM=input  ←★
UDEV_LOG=3
USEC_INITIALIZED=12201239104

指定は間違っていなさそう
しかし、 ACTION=="remove" では呼ばれるが ACTION=="add" では呼ばれない


正着打は

ACTION=="add"   , SUBSYSTEM=="input", KERNEL=="event*", RUN+="/usr/local/bin/jikken add"
ACTION=="remove", SUBSYSTEM=="input", KERNEL=="event*", RUN+="/usr/local/bin/jikken remove"

addのときは ENV{DEVNAME} を使えない。というか、そもそもENVを使う方が邪道
KERNEL でならadd,remove両方で引っかけられるので、これを使う。
KERNEL でひっかけるべき文字列は udevadm infoコマンドで調べる

# udevadm info -a -n /dev/input/event1
  looking at device '/devices/ocp.2/47400000.usb/musb-hdrc.1.auto/usb1/1-1/1-1.2/1-1.2:1.3/input/input57/event1':
    KERNEL=="event1"  ←★
    SUBSYSTEM=="input"
    DRIVER==""
・・・