连接特定音量时触发动作


10

我有一个包含我的keepass2密码数据库的USB密钥,当它插入计算机时,我想执行一些操作,即:

  • 自动将其挂载到特定位置
  • 正确完成安装后,在密码数据库文件上启动keepass2

我猜很简单的任务,但是我找不到怎么做。

我使用的是Ubuntu 12.10,它会自动将该设备安装为“媒体USB密钥”,并尝试在其上打开映像(即使没有映像)。

做到这一点并禁用ubuntu自动挂载的最佳方法是什么(这样就不会发生冲突)?

Answers:


8

当出现新设备时,会通知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' &

如果您无法通过udev触发的脚本运行GUI程序,请参阅我可以以root用户身份在另一个用户的桌面上启动图形程序吗?

¹ 不在/devudevtmpfs 所在的现代系统上。


1
重要注意事项:使用中的信息编写规则时udevadm info -a -n /dev/sdX,无法基于多个祖先进行匹配。您只能基于设备本身和单个祖先的数据进行匹配。这已在中进行了介绍man 7 udev,但其中的一个小注释很容易被忽略。
Patrick

1

最好的方法是为此设备编写自己的udev规则。不幸的是,由于我从未这样做,所以我无法提供任何提示。因此,除非别人有更详细的答案,否则请谷歌搜索“ udev规则”,并在/ lib / udev中查找示例。您的自定义udev规则应放在/etc/udev/rules.d中


谢谢(你的)信息。这至少将使我的搜索更有效率。
ereOn 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.