Как заставить работать правила 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'"
Другие вопросы по тегам