Для основанных на об/мин дистрибутивов Вы могли попробовать силы в создании надлежащих пакетов (это не это трудно...).
Преимущества надлежащего пакета - то, что Ваш диспетчер пакетов отслеживает программное обеспечение, и можно легко копировать установку в другом месте/на следующая машина. С надлежащим исходным пакетом, портирующим вперед (новая восходящая версия, bugfix патч, базовые библиотеки обновляются), легче, чем необходимость изобразить все это из царапины в следующий раз.
Необходимо гарантировать следующее:
RUN
команда должна быть абсолютнойPATH
среда ограничена в рамках выполнения Вас командаСначала добавьте этот файл сценария к /lib/udev/touch.sh
vim /lib/udev/touch.sh
в той записи файла:
#!/bin/bash
touch /tmp/test
сделайте это исполняемым файлом:
chmod +x /lib/udev/touch.sh
и измените свой файл правил на:
ACTION=="add", SUBSYSTEMS=="usb", RUN+="/lib/udev/touch.sh"
перезагрузите свои правила udev
udevadm control --reload-rules
Это прочитает Ваши правила в /lib/udev/rules.d/*
снова. Изменения не будут применяться до сих пор.
Обратите внимание, что udev выполняет Ваш сценарий с уменьшенным PATH
среда. Необходимо удостовериться, чтобы к любому двоичному файлу, который это не в настроенных путях, получили доступ с полным путем. Вы могли также расшириться PATH
среда в рамках Вашего сценария.
Проверьте то, что путь определяется путем входа set
вывод к файлу журнала из Вашего сценария обертки:
set >>/tmp/udev-env-test
Это могло бы быть похожим на это:
PATH='/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin'
В вашем правиле должен быть указан абсолютный путь для исполняемого файла:
ACTION=="add", SUBSYSTEMS=="usb", RUN+="/usr/bin/touch /tmp/test"
Изменить:
И если вы хотите выполнить сценарий, вы должны указать, какая оболочка будет его выполнять:
ACTION=="add", SUBSYSTEMS=="usb", RUN+="/bin/sh /path/to/your/script"