Правило Udev: ACTION == «добавить» работает, но ACTION == «удалить» не работает!

10

Я написал файл 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"), но это также не работает.

Итак, я хочу знать, почему действие удаления не работает? Как мне это исправить?

Pandya
источник
@don_crissti Да, действие с помощью ENVработает. Я пытался, ENV{ID_MODEL}который работает нормально. Спасибо (кстати, если вам интересно опубликовать ответ, попросите меня добавить udevadm monitor --propertyвывод в вопросе ИЛИ я продолжу за ответ?)
Pandya
@don_crissti Готово!
Пандя

Ответы:

9

Согласно этому предложению, (здесь), прокомментированному @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

Сверху я использовал Environment в своем правиле udev, и теперь правило udev становится:ID_MODEL=Micromax_A74ACTION=="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"

Pandya
источник
Какая ... интересная оговорка ... :( Спасибо udev! И спасибо @Pandya :)
Michael Yoo