Как заставить работать правила 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
[ 118] Я ожидал, что при подключении USB-устройства в файл будет записана запись, но ничего не происходит. Где я не прав?

6
задан 24 October 2014 в 13:59

2 ответа

На самом деле, я не мог получить ссылку на это; Но это что-то получилось от Try & amp; Ошибка.

  • 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 абсолютный путь [ 1120]
  • > перенаправление обрабатывается внутри оболочки
  • -c '...' 2 аргумента команды
  • %k, %p, %n переменные udev (имя ядра устройства, устройство путь, номер устройства)

Итак, для вашего случая:

ACTION=="add", RUN+="/bin/sh -c 'echo HELLO ! > /home/victor/udev_test_log.txt'"
0
ответ дан 24 October 2014 в 13:59

В 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"
0
ответ дан 24 October 2014 в 13:59

Другие вопросы по тегам:

Похожие вопросы: