web-dev-qa-db-ja.com

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"を使用してディレクトリを作成します(正常に機能します)。

[〜#〜] but [〜#〜] udevのようなデバイスを取り外した場合ACTION=="removeしないRUN+="/bin/rmdir /home/pandya/Desktop/testdir"を使用してディレクトリを削除します

/bin/rmdirも問題ありません。別のmkdirRUN+="/bin/mkdir /home/pandya/Desktop/testdir2")に置き換えて確認しましたが、これも機能しません。

だから、なぜ削除アクションが機能しないのか知りたいのですが?どうすれば修正できますか?

10
Pandya

this の提案に従って、 @ 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のudevルールでEnvironment=Micromax_A74ACTION=="remove"を使用しましたが、udevルールは:

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

現在、ACTION=="remove"を使用してtestdirを削除しています

したがって、解決策は次のとおりです:ID_MODELATTR{idVendor}の代わりにATTR{idProduct}などの適切な環境をACTION=="remove"

9
Pandya