我有一个包含 keepass2 密码数据库的 USB 密钥,我想在将其插入计算机时执行一些操作,即:
- 自动将其安装到某个特定位置
- 正确安装后,在密码数据库文件上启动keepass2
我猜任务很简单,但我找不到如何做到这一点。
我使用的是 Ubuntu 12.10,它会自动将设备安装为“媒体 USB 密钥”,并尝试打开其上的图像(即使没有)。
禁用 ubuntu 自动安装(这样就不会冲突)的最佳方法是什么?
答案1
当新设备出现时,乌德夫被通知。它通常/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 触发的脚本运行 GUI 程序时遇到问题,请参阅我可以以 root 身份在另一个用户的桌面上启动图形程序吗?
¹不在现代系统上,而/dev
在 udevtmpfs 上。
答案2
最好的方法是为此设备编写您自己的 udev 规则。不幸的是,我无法提供任何有关如何执行此操作的提示,因为我从未这样做过。因此,除非其他人有更详细的答案,否则请搜索“udev 规则”并在 /lib/udev 中查找示例。您的自定义 udev 规则应位于 /etc/udev/rules.d 中