Как использовать udev для запуска сценария оболочки при удалении USB-устройства?

Это мое правило:

ENV{DEVTYPE}=="usb_device", 
ACTION=="remove", 
SUBSYSTEM=="usb", 
ATTR{idVendor}=="8829", 
ATTR{idProduct}=="0010", 
RUN+="/bin/mkdir /home/zkd/123"

Это не работает. Но это правило:

ENV{DEVTYPE}=="usb_device", 
ACTION=="remove", 
SUBSYSTEM=="usb", 
RUN+="/bin/mkdir /home/zkd/123"

Оно работает!! И это тоже работает:

ENV{DEVTYPE}=="usb_device", 
ACTION=="add", 
SUBSYSTEM=="usb", 
ATTR{idVendor}=="8829", 
ATTR{idProduct}=="0010", 
RUN+="/bin/mkdir /home/zkd/123"

Итак, как мне использовать udev для запуска сценария оболочки, когда USB-устройство удалено? Я должен распознать USB-устройство с помощью idProduct и idVendor. Спасибо за ваш ответ!


person zhcong    schedule 25.06.2015    source источник


Ответы (1)


Информация об удаленных устройствах передается в ENV, а не в ATTR, поскольку больше нет устройств, из которых можно извлечь информацию.

ENV{DEVTYPE}=="usb_device", 
ACTION=="remove", 
SUBSYSTEM=="usb", 
ENV{idVendor}=="8829", 
ENV{idProduct}=="0010", 
RUN+="/bin/mkdir /home/zkd/123"
person Ignacio Vazquez-Abrams    schedule 25.06.2015
comment
Не работает. Интересно, ENV{idVendor} существует или нет. Но все равно спасибо. - person zhcong; 26.06.2015
comment
Ты прав! Используйте ID_VENDOR_ID вместо idVendor, а ID_MODEL_ID замените idProduct, тогда все заработает. Спасибо. - person zhcong; 26.06.2015
comment
Пожалуйста, будьте осторожны! Я следовал руководству, в котором не упоминалось, что правила udev должны быть в одной строке! Ваши строки должны быть разделены запятыми в одной строке, так как он будет видеть каждую строку, не начинающуюся с # (комментарий), как новое правило. Это было очень плохо для меня, потому что я обнаруживал удаление USB на своем устройстве и вызывал свой экран блокировки (physlock). Результатом был вечный вызов моего экрана блокировки при загрузке (и, поскольку я вручную запускал свои сетевые интерфейсы, у меня не было метода удаленного входа в систему). авторизоваться! - person taigrr; 29.06.2018
comment
@taigrr вы разделяете длинные строки с помощью `ACTION==remove, \` обратная косая черта - person bac0n; 22.10.2020