/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=="" ・・・