Udev
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"
當我插入設備時,udev
ACTION=="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"
) 替換它進行了檢查,但這也不起作用。所以,我想知道為什麼刪除操作不起作用?我如何解決它?
根據此建議, @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
從上面我在 udev 規則中使用了 Environment ,現在 udev 規則變為:
ID_MODEL
=Micromax_A74``ACTION=="remove"
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"