Règle Udev: ACTION == "ajouter" fonctionne, mais ACTION == "supprimer" ne fonctionne pas!

10

J'ai fichier écrit 90-usb.rulessous /etc/udev/rules.d/contenant:

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"

Quand j'ai branché le périphérique, udev ACTION=="add"crée un répertoire au moyen de RUN+="/bin/mkdir /home/pandya/Desktop/testdir"(ce qui fonctionne bien)

MAIS quand j'ai débranché un périphérique similaire udev ACTION=="remove ne supprime pas le répertoire au moyen deRUN+="/bin/rmdir /home/pandya/Desktop/testdir"

Il n'y a pas de problème /bin/rmdircar j'ai également vérifié en le remplaçant par un autre mkdir( RUN+="/bin/mkdir /home/pandya/Desktop/testdir2") mais cela ne fonctionne pas non plus.

Donc, je veux savoir que Pourquoi l'action de suppression ne fonctionne pas? Comment je le répare?

Pandya
la source
@don_crissti Oui, l'action en utilisant ENVfonctionne. J'ai essayé ENV{ID_MODEL}ce qui fonctionne bien. Merci (BTW si vous êtes intéressé à poster une réponse, puis demandez-moi d'ajouter la udevadm monitor --propertysortie en question OU je continuerai pour la réponse?)
Pandya
@don_crissti Terminé!
Pandya

Réponses:

9

Conformément à cette suggestion, (ici) commentée par @don_crissti, je fournis une solution qui a fonctionné pour moi.


Ce qui suit est udevadm monitor --propertyaffiché lors de la suppression du périphérique (les lignes KERNEL sont ignorées et seule la dernière suppression UDEV est jointe ci-dessous)

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

D'en haut, j'ai utilisé Environnement dans ma règle udev pour et maintenant la règle udev devient:ID_MODEL=Micromax_A74ACTION=="remove"

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

Maintenant, il supprime testdirau moyen deACTION=="remove"

Par conséquent, la solution est la suivante: utiliser un environnement approprié tel que ID_MODELau lieu de ATTR{idVendor}& ATTR{idProduct}dansACTION=="remove"

Pandya
la source
Quelle ... mise en garde intéressante ... :( Merci udev! Et merci @Pandya :)
Michael Yoo