Gdy pojawi się nowe urządzenie, udev jest powiadamiany. Zwykle tworzy plik urządzenia w /dev
oparciu o wbudowane reguły¹. Możesz zastąpić te reguły, aby zmienić lokalizację pliku urządzenia lub uruchomić dowolny program. Oto przykładowa taka zasada udev:
KERNEL=="sd*", ATTRS{vendor}=="Yoyodine", ATTRS{serial}=="123456789", NAME="keepass/s%n", RUN+="/usr/local/sbin/keepass-drive-inserted /dev/%k%n"
NAME=
Dyrektywa zmienia lokalizację pliku urządzenia, włączyłem go do celów ilustracyjnych, ale nie jest to użyteczne dla przypadku użycia. Te ATTRS
zasady identyfikacji urządzenia; uruchom, udevinfo -a -n /dev/sdz
gdy dysk będzie dostępny, /dev/sdz
aby zobaczyć, jakie ma atrybuty. Uważaj, że możesz używać ATTRS
reguł tylko z jednej sekcji danych udevinfo
wejściowych (dodatkowo możesz używać ATTR
reguł z sekcji początkowej). Zobacz Zrozumienie wyniku działania `udevadm info -a -n / dev / sdb`, aby uzyskać więcej tła. Ta reguła przechodzi do pliku o nazwie coś takiego /etc/udev/rules.d/local-storage-keypass.rules
.
Umieść polecenia, które chcesz uruchomić, w skrypcie podanym w RUN
dyrektywie. Coś jak:
#!/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' &
Jeśli masz problemy z uruchomieniem programu GUI ze skryptu wywołanego przez udev, zobacz Czy mogę uruchomić program graficzny na pulpicie innego użytkownika jako root?
¹ Nie w nowoczesnych systemach, w których /dev
działa udevtmpfs.
udevadm info -a -n /dev/sdX
, nie można dopasowywać na podstawie wielu przodków. Możesz dopasować tylko na podstawie danych z samego urządzenia i jednego przodka. Jest to omówioneman 7 udev
, ale jest to mały komentarz, który można łatwo przeoczyć.