Когда появляется новое устройство, udev получает уведомление. Обычно он создает файл устройства в соответствии /dev
со встроенными правилами¹. Вы можете переопределить эти правила, чтобы изменить местоположение файла устройства или запустить произвольную программу. Вот пример такого правила udev:
KERNEL=="sd*", ATTRS{vendor}=="Yoyodine", ATTRS{serial}=="123456789", NAME="keepass/s%n", RUN+="/usr/local/sbin/keepass-drive-inserted /dev/%k%n"
NAME=
Директива изменяет местоположение файла устройства, я включил его для иллюстрации , но это, вероятно , не полезно для вашего использования. Эти ATTRS
правила идентификации устройства; запустить, udevinfo -a -n /dev/sdz
когда диск доступен, /dev/sdz
чтобы увидеть, какие атрибуты у него есть. Помните, что вы можете использовать ATTRS
правила только из одного раздела udevinfo
ввода (кроме того, вы можете использовать ATTR
правила из начального раздела). Смотрите дополнительную информацию о выводе `udevadm info -a -n / dev / sdb` . Это правило входит в файл с именем что-то вроде /etc/udev/rules.d/local-storage-keypass.rules
.
Поместите команды, которые вы хотите запустить, в сценарий, указанный в RUN
директиве. Что-то типа:
#!/bin/sh
set -e
if [ -d /media/keypass-drive ]; then
[ "$(df -P /media/keypass-drive | awk 'NR==2 {print $1}')" = "$(df -P /media | awk 'NR==2 {print $1}')" ]
else
mkdir /media/keypass-drive
fi
mount "$1" /media/keypass-drive
su ereon -c 'keypass2' &
Если у вас возникли проблемы с запуском программы с графическим интерфейсом из сценария, запущенного из udev, см. Раздел Могу ли я запустить графическую программу на рабочем столе другого пользователя с правами root?
¹ Не в современных системах, где /dev
есть udevtmpfs.
udevadm info -a -n /dev/sdX
, вы не можете сопоставить на основе нескольких предков. Вы можете сопоставить только на основе данных от самого устройства и одного предка. Это покрытоman 7 udev
, но это небольшой комментарий, который легко пропустить.