Regra do Udev: ACTION == "add" está funcionando, mas ACTION == "remove" não está funcionando!

10

Eu escrevi o arquivo 90-usb.rulesem /etc/udev/rules.d/contendo:

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"

Quando conectei o dispositivo, o udev ACTION=="add"cria o diretório por meio de RUN+="/bin/mkdir /home/pandya/Desktop/testdir"(que funciona bem)

MAS, quando eu desconectei o dispositivo, o udev semelhante ACTION=="remove não remove o diretório por meio deRUN+="/bin/rmdir /home/pandya/Desktop/testdir"

Não há problema /bin/rmdirporque também verifiquei substituindo-o por outro mkdir( RUN+="/bin/mkdir /home/pandya/Desktop/testdir2"), mas isso também não está funcionando.

Então, quero saber por que a ação de remoção não está funcionando? Como faço para corrigir isso?

Pandya
fonte
@don_crissti Sim, a ação usando ENVestá funcionando. Eu tentei o ENV{ID_MODEL}que está funcionando bem. Obrigado (BTW, se você estiver interessado em resposta post, em seguida, pedir-me acrescentar udevadm monitor --propertysaída em questão, ou eu vou continuar por resposta?)
Pandya
@don_crissti Done!
Pandya

Respostas:

9

Conforme essa sugestão, (aqui) comentada por @don_crissti , estou fornecendo uma solução que funcionou para mim.


A seguir, é udevadm monitor --propertyexibida a saída do dispositivo removedor (as linhas KERNEL são ignoradas e somente a última remoção UDEV é anexada abaixo)

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

De cima, usei o Ambiente na minha regra do udev para e agora a regra do udev se torna:ID_MODEL=Micromax_A74ACTION=="remove"

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

Agora está removendo testdirpor meio deACTION=="remove"

Portanto, a solução é: Use ambiente adequado, como em ID_MODELvez de ATTR{idVendor}& ATTR{idProduct}emACTION=="remove"

Pandya
fonte
Que ... interessante ressalva ... :( Graças udev E graças @Pandya :)!
Michael Yoo