デバイスを削除するUDevルールはトリガされません。

デバイスを削除するUDevルールはトリガされません。

私のパイに接続された統合USBハブ(および物理電源スイッチ)を備えたモニターがあり、モニターのオン/オフ時に2つの異なるスクリプトを実行したいと思います。

ディスプレイの最初の部分を開くと正常に動作しますが、ディスプレイをもう一度閉じても何もトリガーされません。他のフォーラムの投稿に基づいてこの規則をさまざまに変更してみましたが、成功しませんでした。

ルールファイル/etc/udev/rules.d(3つのバリエーションをすべて含む)

SUBSYSTEM=="usb", ACTION=="add",    ATTR{idProduct}=="2514", ATTR{idVendor}=="03f0", RUN+="/home/pi/monitor_on.sh"
SUBSYSTEM=="usb", ACTION=="remove", ATTR{idProduct}=="2514", ATTR{idVendor}=="03f0", RUN+="/home/pi/monitor_off.sh"
SUBSYSTEM=="usb", ACTION=="remove", ENV{ID_MODEL}=="2514", ENV{ID_VENDOR}=="03f0", RUN+="/home/pi/monitor_off.sh"
SUBSYSTEM=="usb", ACTION=="remove", ENV{idProduct}=="2514", ENV{idVendor}=="03f0", RUN+="/home/pi/monitor_off.sh"

テストの結果、udevadm test最初の2つの削除ルールは実行され、3番目のルールは実行されていません。

udevadm test --action="remove" /devices/platform/scb/fd500000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0/usb1/1-1/1-1.4
This program is for debugging only, it does not run any program
[...]
Reading rules file: /etc/udev/rules.d/99-monitor.rules
[...]
1-1.4: RUN '/home/pi/monitor_off.sh' /etc/udev/rules.d/99-monitor.rules:2
1-1.4: RUN '/home/pi/monitor_off.sh' /etc/udev/rules.d/99-monitor.rules:3
DEVPATH=/devices/platform/scb/fd500000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0/usb1/1-1/1-1.4
DEVNAME=/dev/bus/usb/001/060
DEVTYPE=usb_device
DRIVER=usb
PRODUCT=3f0/2514/0
TYPE=9/0/2
BUSNUM=001
DEVNUM=060
MAJOR=189
MINOR=59
ACTION=remove
SUBSYSTEM=usb
USEC_INITIALIZED=1470318118448
ID_VENDOR=03f0
ID_VENDOR_ENC=03f0
ID_VENDOR_ID=03f0
ID_MODEL=2514
ID_MODEL_ENC=2514
ID_MODEL_ID=2514
ID_REVISION=0000
ID_SERIAL=03f0_2514
ID_BUS=usb
ID_USB_INTERFACES=:090001:090002:
ID_VENDOR_FROM_DATABASE=HP, Inc
ID_MODEL_FROM_DATABASE=4-port hub
ID_PATH=platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.4
ID_PATH_TAG=platform-fd500000_pcie-pci-0000_01_00_0-usb-0_1_4
ID_FOR_SEAT=usb-platform-fd500000_pcie-pci-0000_01_00_0-usb-0_1_4
TAGS=:seat:
run: '/home/pi/monitor_off.sh'
run: '/home/pi/monitor_off.sh'
Unload module index
Unloaded link configuration context.

その後、モニターをオフにするとmonitor_off.shスクリプトは実行されません。daemon.log世界にはたくさんのメッセージがありますが、どのように理解するのか分かりません。以下はUSBハブ(1-1.4)に関するものです。

Sep 13 17:57:05 crumble systemd-udevd[5413]: 1-1.4: sd-device-monitor: Passed 326 byte to netlink monitor
Sep 13 17:57:05 crumble systemd-udevd[23020]: 1-1.4: Processing device (SEQNUM=3310, ACTION=unbind)
Sep 13 17:57:05 crumble systemd-udevd[23020]: 1-1.4: IMPORT builtin 'usb_id' /usr/lib/udev/rules.d/50-udev-default.rules:13
Sep 13 17:57:05 crumble systemd-udevd[23020]: 1-1.4: Failed to open USB device 'descriptors' file: No such file or directory
Sep 13 17:57:05 crumble systemd-udevd[23020]: 1-1.4: Failed to get idVendor attribute: No such file or directory
Sep 13 17:57:05 crumble systemd-udevd[23020]: 1-1.4: IMPORT builtin 'usb_id' fails: No such file or directory
Sep 13 17:57:05 crumble systemd-udevd[23020]: 1-1.4: Handling device node '/dev/bus/usb/001/060', devnum=c189:59, mode=0600, uid=0, gid=0
Sep 13 17:57:05 crumble systemd-udevd[23020]: 1-1.4: cannot stat() node '/dev/bus/usb/001/060' (No such file or directory)
Sep 13 17:57:05 crumble systemd-udevd[23020]: 1-1.4: sd-device: Created empty file '/run/udev/data/c189:59' for '/devices/platform/scb/fd500000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0/usb1/1-1/1-1.4'
Sep 13 17:57:05 crumble systemd-udevd[23020]: 1-1.4: Device (SEQNUM=3310, ACTION=unbind) processed
Sep 13 17:57:05 crumble systemd-udevd[23020]: 1-1.4: sd-device-monitor: Passed 326 byte to netlink monitor
Sep 13 17:57:05 crumble systemd-udevd[5413]: 1-1.4: sd-device-monitor: Passed 326 byte to netlink monitor
Sep 13 17:57:05 crumble systemd-udevd[23020]: 1-1.4: Processing device (SEQNUM=3311, ACTION=remove)
Sep 13 17:57:05 crumble systemd-udevd[23020]: 1-1.4: Device (SEQNUM=3311, ACTION=remove) processed
Sep 13 17:57:05 crumble systemd-udevd[23020]: 1-1.4: sd-device-monitor: Passed 326 byte to netlink monitor

また、orの逆を使ってみましたが、スクリプトが実行されATTRSましたが、ハブに接続されている項目に応じてスクリプトが複数回実行されました。ATTRENV

オペレーティングシステムのバージョンはRaspbian Busterです。

ベストアンサー1

この問題は最終的に次の規則で解決されました。

SUBSYSTEM=="usb", ACTION=="add",    ATTR{idProduct}=="2514", ATTR{idVendor}=="03f0", RUN+="/home/pi/monitor_on.sh"
SUBSYSTEM=="usb", ACTION=="remove", ENV{DEVTYPE}=="usb_device", ENV{PRODUCT}=="3f0/2514/0", RUN+="/home/pi/monitor_off.sh"

環境変数として使用できるプロパティはいくつかあるようです。 productは、ベンダー、製品、およびその他の項目を含む属性の1つです(私の場合は0)。 USBポートにも同じ製品が設定されているため、複数の実行を防ぐためにDEVTYPEを追加する必要があります。

おすすめ記事