我已经写文件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"
Run Code Online (Sandbox Code Playgroud)
当我插入设备时 udevACTION=="add"
通过RUN+="/bin/mkdir /home/pandya/Desktop/testdir"
(工作正常)创建目录
但是当我拔下类似 udev 的设备时ACTION=="remove
,不会通过以下方式删除目录RUN+="/bin/rmdir /home/pandya/Desktop/testdir"
没有问题,/bin/rmdir
因为我也检查过用另一个mkdir
( RUN+="/bin/mkdir /home/pandya/Desktop/testdir2"
)替换它,但这也不起作用。
所以,我想知道为什么删除操作不起作用?我如何解决它?
Pan*_*dya 11
根据这个建议,(这里)由@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
Run Code Online (Sandbox Code Playgroud)
从上面我在我的 udev 规则中使用了 Environment ,现在 udev 规则变为:ID_MODEL
=Micromax_A74
ACTION=="remove"
ACTION=="remove", ENV{ID_MODEL}=="Micromax_A74", RUN+="/bin/rmdir /home/pandya/Desktop/testdir"
Run Code Online (Sandbox Code Playgroud)
现在它正在testdir
通过ACTION=="remove"
因此,解决方案是:使用合适的环境,例如ID_MODEL
代替ATTR{idVendor}
& ATTR{idProduct}
inACTION=="remove"
归档时间: |
|
查看次数: |
22941 次 |
最近记录: |