Khi một thiết bị mới xuất hiện, udev được thông báo. Nó thường tạo một tệp thiết bị /dev
dựa trên các quy tắc dựng sẵn. Bạn có thể ghi đè các quy tắc này để thay đổi vị trí tệp thiết bị hoặc chạy chương trình tùy ý. Đây là một quy tắc udev mẫu như vậy:
KERNEL=="sd*", ATTRS{vendor}=="Yoyodine", ATTRS{serial}=="123456789", NAME="keepass/s%n", RUN+="/usr/local/sbin/keepass-drive-inserted /dev/%k%n"
Lệnh NAME=
này thay đổi vị trí của tệp thiết bị, tôi đã đưa nó vào mục đích minh họa nhưng có lẽ nó không hữu ích cho trường hợp sử dụng của bạn. Các ATTRS
quy tắc xác định thiết bị; chạy udevinfo -a -n /dev/sdz
khi ổ đĩa có sẵn /dev/sdz
để xem nó có thuộc tính gì. Coi chừng bạn chỉ có thể sử dụng ATTRS
các quy tắc từ một phần của udevinfo
đầu vào (ngoài ra, bạn có thể sử dụng ATTR
các quy tắc từ phần ban đầu). Xem Hiểu đầu ra của `udevadm thông tin -a -n / dev / sdb` để có thêm nền tảng. Quy tắc này đi vào một tập tin gọi là một cái gì đó như /etc/udev/rules.d/local-storage-keypass.rules
.
Đặt các lệnh bạn muốn chạy trong tập lệnh được đưa ra trong lệnh RUN
. Cái gì đó như:
#!/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' &
Nếu bạn gặp sự cố khi chạy chương trình GUI từ tập lệnh được kích hoạt từ udev, hãy xem Tôi có thể khởi chạy chương trình đồ họa trên máy tính để bàn của người dùng khác dưới quyền root không?
¹ Không trên các hệ thống hiện đại, nơi /dev
đang udevtmpfs.
udevadm info -a -n /dev/sdX
, bạn không thể khớp dựa trên nhiều tổ tiên. Bạn chỉ có thể khớp dựa trên dữ liệu từ chính thiết bị và một tổ tiên duy nhất. Điều này được đề cập trongman 7 udev
, nhưng là một bình luận nhỏ dễ bị bỏ qua.