Я пытаюсь настроить скрипт для запуска при каждом подключении USB-устройства. Я создал файл /etc/udev/rules.d/90-local.rules и добавил следующее правило:
ACTION=="add", SUBSYSTEM=="usb", KERNEL=="sd*", SYSFS{model}=="Cruzer*", RUN+="sh /home/jesse/Documents/Scripts/cruzer.sh"
Проблема в том, что когда диск подключен, ничего не происходит. Сценарий, для целей отладки, настроен на отправку уведомления с уведомлением-отправкой, которое установлено и отлично работает с терминала.
Путь к сценарию правильный, так как я выполнил эту точную команду в терминале без проблем.
Ответы:
У меня такая же проблема. Это сработало для меня:
Попробуйте скопировать ваш скрипт
/usr/local/bin
и изменить каталог в вашем.rules
файле.Кроме того, я не знаю, что такое SYSFS, но я бы предпочел использовать свойства ATTR.
Следующая строка содержит содержимое моего
.rules
файла:источник
ATTRS{vendor}=="SanDisk "
часть это значит , что толькоSandisk
будет обнаружено?notify-send
требует доступа к вашей сеансовой шине DBus, которая не может быть по двум причинам:Нет информации о сеансе. Когда скрипт запускается udev, он ничего не знает о том, где вы вошли в систему или вообще вошли в нее. Многопользовательское с X11 все еще сложно, но переключение пользователей работает как для X11, так и для консольных сессий. Многие люди также используют SSH, VNC и NX по сети.
(
DISPLAY=:0
Будет работать половину времени, но это по - прежнему гадать , в лучшем случае .)Запрещено политикой DBus. Даже если ваш сценарий каким-то образом обнаружит ваш сеанс X11, он не сможет отправлять уведомления из-за запуска сценария
root
вместо вашей учетной записи пользователя.источник
for LINE in $(find /proc/ -maxdepth 2 -name environ -exec grep -z "^DBUS_SESSION_BUS_ADDRESS" {} \; | sort -uz | tr '\0' '\n'); do eval $LINE ... done;
сделал трюк для меня с уведомить-отправитьВместо этого вы можете попытаться сопоставить устройство по идентификатору производителя и продукта. Следующее пользовательское правило работает для меня:
Вы можете увидеть idVendor и idProduct в выводе lsusb или dmesg после подключения устройства.
источник
В ответ на ответ Алеха: Если вы также хотите отслеживать
remove
события, вам нужно искать переменную среды с именемID_SERIAL
. Он содержит идентификатор поставщика и продукта, разделенные подчеркиванием:Правило теперь тоже короче.
источник
Возможно, вам может понадобиться добавить
sleep
внутри скрипта, чтобы дать USB-устройству возможность «успокоиться»? Например, модемы usb 3g, переключение режимов для получения / dev / ttyUSB для запуска и запуска ядром.источник
Попробуйте заменить SUBSYSTEM = "usb" на SUBSYSTEMS = "usb"
источник
SUBSYSTEM=="usb"
просто отлично.