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"

デバイスを接続すると、udevは次のようにACTION=="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_MODELATTR{idVendor}の代わりに適切なコンテキストを使用します。ATTR{idProduct}ACTION=="remove"

関連情報