Udev

Udev 規則: ACTION==‘add’ 有效,但 ACTION==‘remove’ 無效!

  • February 20, 2016

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"(工作正常)創建目錄

但是當我拔下設備時,類似的 udevACTION=="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"

引用自:https://unix.stackexchange.com/questions/178341