Я пытаюсь создать udev правила в Ubuntu 17.10. После нескольких часов тестирования я в отчаянии пришел к следующим правилам в /etc/udev/rules.d/98-intelpwm.rules
:
(только для тестирования!)
ACTION=="add", RUN+="/home/user/intel_gpu/test.sh"
Скрипт сам:
$ ll /home/user/intel_gpu/test.sh
-rwxrwxrwx 1 user user 56 Oct 22 01:38 /home/user/intel_gpu/test.sh*
#!/bin/sh
/bin/echo 1 >> /home/user/intel_gpu/test.output
Когда я запускаю udevadm test / module / usb_storage
, я вижу, что правило срабатывает, но test.output
не создается (или, если я создаю его вручную, это не так обновлено).
calling: test
version 234
This program is for debugging only, it does not run any program
specified by a RUN key. It may show incorrect results, because
some values may be different, or not available at a simulation run.
=== trie on-disk ===
tool version: 234
file size: 9138024 bytes
header size 80 bytes
strings 1910832 bytes
nodes 7227112 bytes
Load module index
Failed to read $container of PID 1, ignoring: Permission denied
Found container virtualization none.
timestamp of '/etc/systemd/network' changed
timestamp of '/lib/systemd/network' changed
Parsed configuration file /lib/systemd/network/99-default.link
Created link configuration context.
timestamp of '/etc/udev/rules.d' changed
Reading rules file: /lib/udev/rules.d/39-usbmuxd.rules
Reading rules file: /lib/udev/rules.d/40-usb-media-players.rules
...
Reading rules file: /etc/udev/rules.d/98-intelpwm.rules
Reading rules file: /lib/udev/rules.d/99-systemd.rules
rules contain 393216 bytes tokens (32768 * 12 bytes), 35397 bytes strings
27571 strings (233697 bytes), 24356 de-duplicated (201516 bytes), 3216 trie nodes used
value '[dmi/id]sys_vendor' is 'ASUSTeK COMPUTER INC.'
value '[dmi/id]sys_vendor' is 'ASUSTeK COMPUTER INC.'
RUN '/home/user/intel_gpu/test.sh' /etc/udev/rules.d/98-intelpwm.rules:1
ACTION=add
DEVPATH=/module/usb_storage
SUBSYSTEM=module
USEC_INITIALIZED=4988363806
run: '/home/user/intel_gpu/test.sh'
Unload module index
Unloaded link configuration context.
Что мне не хватает?
Для применения эти udev
правило необходимо использовать udevadm trigger
. Дополнительно можно сказать udevadm trigger
который событие действия инициировать.
, Если Вы просто работаете udevadm trigger
, все устройства инициированы и будут приблизительно add
действия, которые инициируют Ваш сценарий, потому что это допустимо для всех устройств.
, Если требуется работать эти udev
правило для определенного устройства, которое уже доступно, Вам, возможно, придется добавить -c, --action=ACTION
опция.
udevadm trigger --action=add /sys/<path-to-your-device>
я настоятельно рекомендовал бы ограничить соответствия Вашего udev
правило, потому что в данный момент оно действительно соответствует для любого устройства, и Вы пишете сценарий, будет работать многократно.