Udev 规则:ACTION==“add”有效,但 ACTION==“remove”无效!

Udev 规则:ACTION==“add”有效,但 ACTION==“remove”无效!

我已经在包含以下内容90-usb.rules的情况下编写了文件/etc/udev/rules.d/

ACTION=="add", ATTR{idVendor}=="0bb4", ATTR{idProduct}=="2008", RUN+="/bin/mkdir /home/pandya/Desktop/testdir"
ACTION=="remove", ATTR{idVendor}=="0bb4", ATTR{idProduct}=="2008", RUN+="/bin/rmdir /home/pandya/Desktop/testdir"

当我插入设备时,udevACTION=="add"通过以下方式创建目录RUN+="/bin/mkdir /home/pandya/Desktop/testdir"(效果很好)

当我拔掉类似 udev 的设备时ACTION=="remove 通过以下方式删除目录RUN+="/bin/rmdir /home/pandya/Desktop/testdir"

没有问题,/bin/rmdir因为我也通过将其替换为另一个mkdirRUN+="/bin/mkdir /home/pandya/Desktop/testdir2")来进行检查,但这也不起作用。

所以,我想知道为什么去除动作不管用?我如何解决它?

答案1

按照建议,(此处)评论@don_crissti我正在提供对我有用的解决方案。


以下是删除设备时的输出udevadm monitor --property(跳过 KERNEL 行,下面仅附加最后一个 UDEV 删除)

UDEV  [1380.287343] remove   /devices/pci0000:00/0000:00:1d.7/usb1/1-4 (usb)
ACTION=remove
BUSNUM=001
DEVNAME=/dev/bus/usb/001/013
DEVNUM=013
DEVPATH=/devices/pci0000:00/0000:00:1d.7/usb1/1-4
DEVTYPE=usb_device
ID_BUS=usb
ID_MODEL=Micromax_A74
ID_MODEL_ENC=Micromax\x20A74
ID_MODEL_ID=2008
ID_REVISION=0255
ID_SERIAL=MediaTek_Micromax_A74_0123456789ABCDEF
ID_SERIAL_SHORT=0123456789ABCDEF
ID_USB_INTERFACES=:ffff00:
ID_VENDOR=MediaTek
ID_VENDOR_ENC=MediaTek
ID_VENDOR_FROM_DATABASE=HTC (High Tech Computer Corp.)
ID_VENDOR_ID=0bb4
MAJOR=189
MINOR=12
PRODUCT=bb4/2008/255
SEQNUM=2017
SUBSYSTEM=usb
TYPE=0/0/0
USEC_INITIALIZED=446266

从上面我使用了环境ID_MODEL=Micromax_A74在我的 udev 规则中ACTION=="remove",现在 udev 规则变为:

ACTION=="remove", ENV{ID_MODEL}=="Micromax_A74", RUN+="/bin/rmdir /home/pandya/Desktop/testdir"

现在它正在testdir通过以下方式删除ACTION=="remove"

因此,解决方案是:使用合适的环境,例如ID_MODEL代替ATTR{idVendor}& ATTR{idProduct}inACTION=="remove"

相关内容