Udev-Regel: ACTION == "add" funktioniert, aber ACTION == "remove" funktioniert nicht!

10

Ich habe Datei geschrieben 90-usb.rulesunter /etc/udev/rules.d/enthalten:

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"

Wenn ich das Gerät angeschlossen habe, ACTION=="add"erstellt udev ein Verzeichnis mit RUN+="/bin/mkdir /home/pandya/Desktop/testdir"(was gut funktioniert)

ABER wenn ich ein ähnliches Gerät vom Stromnetz getrennt ACTION=="remove habe, entfernt udev das Verzeichnis nicht mitRUN+="/bin/rmdir /home/pandya/Desktop/testdir"

Es gibt kein Problem damit, /bin/rmdirda ich es auch durch Ersetzen durch ein anderes mkdir( RUN+="/bin/mkdir /home/pandya/Desktop/testdir2") überprüft habe, aber dies funktioniert auch nicht.

Ich möchte wissen, warum die Entfernungsaktion nicht funktioniert. Wie behebe ich das?

Pandya
quelle
@don_crissti Ja, die Aktion mit ENVfunktioniert. Ich habe versucht, ENV{ID_MODEL}was gut funktioniert. Vielen Dank (Übrigens, wenn Sie daran interessiert sind, eine Antwort zu posten, dann bitten Sie mich, die udevadm monitor --propertyAusgabe in Frage hinzuzufügen, oder ich werde mit der Antwort fortfahren?)
Pandya
@don_crissti Fertig!
Pandya

Antworten:

9

Gemäß diesem Vorschlag kommentierte : (hier) von @don_crissti I - Lösung bin bietet die für mich gearbeitet.


Das Folgende wird udevadm monitor --propertybeim Entfernen des Geräts ausgegeben (KERNEL-Zeilen werden übersprungen und nur die letzte UDEV-Entfernung wird unten angehängt)

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

Von oben habe ich Environment in meiner udev-Regel für verwendet und jetzt wird die udev-Regel:ID_MODEL=Micromax_A74ACTION=="remove"

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

Jetzt wird es testdirmittels entferntACTION=="remove"

Daher lautet die Lösung: Verwenden Sie eine geeignete Umgebung, z. B. ID_MODELanstelle von ATTR{idVendor}& ATTR{idProduct}inACTION=="remove"

Pandya
quelle
Was für eine ... interessante Einschränkung ... :( Danke udev! Und danke @Pandya :)
Michael Yoo