Как заставить работать правила udev?
Я хотел бы изучить правила Udev. Вот что я делаю:
victor@X301A1:~$ ls /etc/udev/rules.d/
70-persistent-cd.rules 70-persistent-net.rules README
Затем:
victor@X301A1:~$ sudo gedit /etc/udev/rules.d/01-my-first-udev.rules
Мое правило:
ACTION=="add", RUN+="echo HELLO ! > /home/victor/udev_test_log.txt"
После сохранения файла:
sudo udevadm control --reload-rules
Я ожидал, что при подключении USB-устройства будет записано в файл, но ничего не происходит. Где я не прав?
2 ответа
В RUN вы должны указать путь к скрипту. Увидеть man udev:
Добавьте программу в список программ, которые будут выполняться для определенного устройства. Это можно использовать только для очень коротких задач. Выполнение обработки события в течение длительного периода времени может заблокировать все дальнейшие события для этого или зависимого устройства. Долгосрочные задачи должны быть немедленно отсоединены от самого процесса события.
Например, создайте новый скрипт, скажем, hello.sh в /lib/udev с sudo -H gedit /lib/udev/hello.sh и поместите следующие строки внутрь:
#!/bin/bash
echo HELLO ! > /home/<username>/udev_test_log.txt
+ Изменить <username> с вашим именем пользователя. Сохраните файл, закройте его и сделайте его исполняемым с помощью:
chmod +x /lib/udev/hello.sh
Добавьте новое правило в свой /etc/udev/rules.d/01-my-first-udev.rules файл как это:
ACTION=="add", RUN+="/lib/udev/hello.sh"
На самом деле, я не мог получить ссылку на это; Но это что-то, полученное Try & Error.
udevтребуется полный путь скрипта / программы / файла, используемого вPROGRAM,TEST,RUNили жеIMPORT,udevне поддерживает операции перенаправления.udevможет обрабатывать команды с аргументами.udevимеет переменную замену.
Таким образом, вы можете написать многофункциональный скрипт (не просто скрипт слепой / одиночной задачи:)), пример, который уверен, что он работает для меня:
KERNEL=="2-1.2:1.[0-9]*", DRIVER!="usb-storage", RUN+="/bin/sh -c 'echo -n %k,%p > /home/sneetsher/Desktop/%n.txt'"
/bin/shабсолютный путь>перенаправление обрабатывается внутри оболочки-c '...'2 аргумента команды%k,%p,%nПеременные udev (имя ядра устройства, путь к устройству, номер устройства)
Итак, для вашего случая:
ACTION=="add", RUN+="/bin/sh -c 'echo HELLO ! > /home/victor/udev_test_log.txt'"