Я пытаюсь познакомиться с Udev под Ubuntu 13.10.
Вот мое первое простое правило 95.usbbackup.rules:
ACTION=="add", SUBSYSTEMS="usb", RUN+="/usr/local/bin/my_backup.sh"
и вот скрипт (который был chmodded + x) my_backup.sh:
#!/bin/bash
touch /tmp/test
Ничего не происходит, когда я подключаю внешние диски. Как я могу проверить (журнал, команда, что угодно), сработало ли правило?
большое спасибо
SUBSYSTEMS=="usb"
. Т.е. double,==
который проверяет равенство, а не single,=
который присваивает значение ключу.Ответы:
Я почти уверен, что это должно сработать. Перезагружали ли вы свои правила udev после редактирования своих правил?
udevadm control --reload-rules && udevadm trigger
как корень.источник
KERNEL!="sdz*"
и вы должны получить все (кроме SDZ [1-9])udevadm monitor
Вы можете дать команду от имени root следующим образом:
Это покажет, когда правило сработало.
источник
udevadm monitor
просто показывает события udev, но не если соответствующее правило было запущено. Однако вы можете найти событие, которое должно вызвать правило, но тогда вы не знаете, работает ли ваше правило.Я использую ядро 3.0.35, но у меня работает следующее.
Чтобы получить путь для устройства, вы можете сделать что-то вроде этого:
Вы получите больше информации, чем вам нужно, но вы заинтересованы в DEVPATH. Затем, чтобы увидеть, какие правила udev выполняются, вы запускаете это:
Я не думаю, что это на самом деле выполняет правила, документация говорит, что это «имитирует» события для данного устройства. Для получения дополнительной информации посетите эту справочную страницу: https://www.freedesktop.org/software/systemd/man/udevadm.html.
источник
С версией udev / systemd 241 и аналогичной с правами root:
Или сделать его постоянным, снова как root:
PS: самый частый пока что ИМХО неправильный ответ выглядит так:
udevadm -d test / devices / где / is / my / device | & less... но это имеет ряд проблем. Основные из них:
where/is/my/device
? Утомительно, сложно и подвержено ошибкам.Сравнение старых ответов с недавним выводом udev версии 241,
udevadm test
похоже, показывает меньше информации, чем раньше.udevadm -d test
это всего лишь симуляция ! Каждый раз, когда он предупреждает:Эта программа предназначена только для отладки, она не запускает никаких программ, указанных ключом RUN. Он может показывать неверные результаты, потому что некоторые значения могут отличаться или не быть доступными во время симуляции.
udevadm test
предназначен для разработки нового правила, а не для устранения неполадок с нарушенными, отсутствующими или переопределенными правилами.источник
У меня была такая же проблема с Raspberry Pi 3 B +. Я пытался вызвать скрипт при вставке USB-накопителя. Правила не регистрируются в системном журнале, поэтому становится очень трудно понять, какое правило сработало или какое правило не удалось.
Итак, я сделал следующее:
sudo /etc/init.d/udev restart
и когда я проверил, это сработало.
Часть информации, которая может или не может быть полезной, состоит в том, что файловые системы доступны только для udev, пока не будет выполнена команда на шаге 2.
источник
udevadm test $(udevadm info --query=path --name=device_name)
должен сказать вам, какие команды будут выполняться на подключаемом устройстве, ссылаясь на соответствующиеudev
правила. Например:источник