Kích hoạt một hành động khi một âm lượng cụ thể được kết nối


10

Tôi có một khóa USB chứa cơ sở dữ liệu mật khẩu keepass2 của tôi và tôi muốn thực hiện một số hành động khi nó được cắm vào máy tính của tôi, cụ thể là:

  • Tự động gắn nó vào một số vị trí cụ thể
  • Khi việc gắn kết được thực hiện đúng cách, khởi chạy keepass2 trên tệp cơ sở dữ liệu mật khẩu

Tôi đoán những nhiệm vụ đơn giản, nhưng tôi không thể tìm ra cách để làm điều đó.

Tôi đang sử dụng Ubuntu 12.10 và nó tự động gắn thiết bị dưới dạng "khóa usb phương tiện" và cố gắng mở các hình ảnh trên đó (mặc dù không có).

Cách tốt nhất để làm điều đó và vô hiệu hóa tính năng tự động cài đặt Ubuntu (để nó không xung đột) là gì?

Câu trả lời:


8

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ị /devdự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 ATTRSquy tắc xác định thiết bị; chạy udevinfo -a -n /dev/sdzkhi ổ đĩ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 ATTRScá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 ATTRcá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.


1
Lưu ý quan trọng về điều này: Khi viết quy tắc sử dụng thông tin từ 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 trong man 7 udev, nhưng là một bình luận nhỏ dễ bị bỏ qua.
Patrick

1

Cách tốt nhất để làm điều này sẽ là viết (các) quy tắc udev của riêng bạn cho thiết bị này. Thật không may, tôi không thể đưa ra bất kỳ lời khuyên nào về cách làm điều này vì tôi chưa bao giờ làm như vậy. Vì vậy, trừ khi người khác có câu trả lời chi tiết hơn, hãy tìm google 'quy tắc udev' và tìm trong / lib / udev để biết ví dụ. Các quy tắc udev tùy chỉnh của bạn sẽ xuất hiện trong /etc/udev/rules.d


Cảm ơn bạn về thông tin. Điều này ít nhất sẽ làm cho các tìm kiếm của tôi hiệu quả hơn.
vào
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.