Regla Udev: ACTION == "agregar" funciona, pero ACTION == "eliminar" no funciona.

10

Archivo que he escrito 90-usb.rulesen virtud de /etc/udev/rules.d/que contiene:

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"

Cuando conecté el dispositivo, udev ACTION=="add"crea un directorio mediante RUN+="/bin/mkdir /home/pandya/Desktop/testdir"(que funciona bien)

PERO cuando desconecté un dispositivo similar, udev ACTION=="remove no elimina el directorio por medio deRUN+="/bin/rmdir /home/pandya/Desktop/testdir"

No hay ningún problema /bin/rmdirporque también lo he comprobado reemplazándolo con otro mkdir( RUN+="/bin/mkdir /home/pandya/Desktop/testdir2") pero esto tampoco funciona.

Entonces, quiero saber que ¿Por qué la acción de eliminación no funciona? ¿Cómo lo soluciono?

Pandya
fuente
@don_crissti Sí, la acción mediante el uso ENVestá funcionando. Intenté ENV{ID_MODEL}que funciona bien. Gracias (por cierto, si está interesado en publicar la respuesta, pídame que agregue la udevadm monitor --propertysalida en cuestión O ¿continuaré por la respuesta?)
Pandya
@don_crissti ¡Listo!
Pandya

Respuestas:

9

Según esta sugerencia, (aquí) comentado por @don_crissti , estoy proporcionando una solución que funcionó para mí.


A continuación se muestra la salida udevadm monitor --propertyal quitar el dispositivo (las líneas KERNEL se omiten y solo se adjunta la última eliminación de UDEV a continuación)

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

Desde arriba, he usado Environment en mi regla udev para y ahora la regla udev se convierte en:ID_MODEL=Micromax_A74ACTION=="remove"

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

Ahora se está eliminando testdirmedianteACTION=="remove"

Por lo tanto, la solución es: utilizar un entorno adecuado, como en ID_MODELlugar de ATTR{idVendor}& ATTR{idProduct}enACTION=="remove"

Pandya
fuente
Qué ... advertencia más interesante ... :( ¡Gracias udev! Y gracias @Pandya :)
Michael Yoo