以下を含むファイル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
も問題ありません。別のmkdir
(RUN+="/bin/mkdir /home/pandya/Desktop/testdir2"
)に置き換えて確認しましたが、これも機能しません。
だから、なぜ削除アクションが機能しないのか知りたいのですが?どうすれば修正できますか?
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_A74
ACTION=="remove"
を使用しましたが、udevルールは:
ACTION=="remove", ENV{ID_MODEL}=="Micromax_A74", RUN+="/bin/rmdir /home/pandya/Desktop/testdir"
現在、ACTION=="remove"
を使用してtestdir
を削除しています
したがって、解決策は次のとおりです:ID_MODEL
&ATTR{idVendor}
の代わりにATTR{idProduct}
などの適切な環境をACTION=="remove"