Коли з’являється новий пристрій, 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' &
Якщо у вас виникли проблеми із запуском програми GUI зі сценарію, запущеного у udev, див. Чи можна запустити графічну програму на робочому столі іншого користувача як root?
¹ Не в сучасних системах, де /dev
є у udevtmpfs.
udevadm info -a -n /dev/sdX
, ви не можете відповідати на основі кількох предків. Можна порівнювати лише на основі даних самого пристрою та одного предка. Це висвітленоman 7 udev
, але це невеликий коментар, який легко не помітити.