使用udev规则在USB插入上运行脚本


17

我试图设置一个脚本,使其在每次插入USB设备时都能运行。我创建了文件/etc/udev/rules.d/90-local.rules并添加了以下规则:

ACTION=="add", SUBSYSTEM=="usb", KERNEL=="sd*", SYSFS{model}=="Cruzer*", RUN+="sh /home/jesse/Documents/Scripts/cruzer.sh"

问题在于,连接驱动器后,什么也不会发生。出于调试目的,脚本被操纵为发送带有notify-send的通知,该脚本已安装并且可以在终端上正常运行。

脚本的路径是正确的,因为我已经在终端中运行了该确切命令而没有任何麻烦。


您的防病毒软件正在运行吗?这是会触发任何数量的AV程序采取措施的行为。尽管我希望收到警告,但如果您禁用了通知,则除了在日志中,您可能看不到它。我建议先禁用Internet,然后再禁用AV程序,然后再次尝试。
zenbike 2011年

在未安装AV的情况下运行Ubuntu 11.04。
JTeK 2011年

@zenbike:为什么添加自定义udev规则会触发防病毒程序?
user1686'7

在设备插入时启动任何脚本都可能导致AV集中出现误报,以扫描可移动设备。为什么,我不知道。我确实知道,这是发生在拇指驱动器和Avira AV上的出厂安装脚本所引起的。
zenbike 2011年

Answers:


6

我有同样的问题。这为我工作:

尝试将脚本复制到其中/usr/local/bin并更改.rules文件中的目录。

另外,我不知道什么是SYSFS,但是我更喜欢使用ATTR属性。

以下是我.rules文件的内容:

ACTION=="add", SUBSYSTEM=="block", KERNEL=="sd[a-z]1", ATTRS{vendor}=="SanDisk ", RUN+="/usr/local/bin/backup.sh"

ATTRS{vendor}=="SanDisk "部分是否意味着只会Sandisk被检测到?
blade19899 2012年

7

notify-send 需要访问您的DBus会话总线,它不能访问有两个原因:

  • 没有有关会话的信息。当由udev开始,你的脚本知道什么有关,或者如果你在所有记录在您登录的位置。X11的多座位仍然很棘手,但是用户切换对X11和控制台会话均有效。许多人还通过网络使用SSH,VNC和NX。

    DISPLAY=:0将有一半的时间有效,但这充其量只是在猜测。)

  • 被DBus政策拒绝。即使您的脚本以某种方式找到了您的X11会话,由于运行脚本root而不是您的用户帐户,它也将无法发送通知。


2
for LINE in $(find /proc/ -maxdepth 2 -name environ -exec grep -z "^DBUS_SESSION_BUS_ADDRESS" {} \; | sort -uz | tr '\0' '\n'); do eval $LINE ... done;通过通知发送为我解决了问题
mlt 2012年

1

您可以尝试通过供应商和产品ID匹配设备。以下自定义规则适用于我:

ACTION=="add", SUBSYSTEM=="usb", ATTR{idVendor}=="0763", ATTR{idProduct}=="019b", RUN+="/usr/bin/aconnect 20 128"

连接设备后,可以在lsusb输出或dmesg中看到idVendor和idProduct。


我试过了,但是也不管用...(ATTR {idProduct} ==“ 5530”)...还需要供应商吗?我不这么认为……
JTeK 2011年

在这种情况下,问题可能出在脚本本身。例如,它可能取决于$ PATH env变量。为了进行测试,请尝试像export PATH =“''一样运行它;/home/jesse/Documents/Scripts/cruzer.sh
Aleh

1

遵循Aleh的回答:如果您还想监视remove事件,则需要查找名为的环境变量ID_SERIAL。它包含由下划线分隔的供应商和产品ID:

ACTION=="add|remove", SUBSYSTEM=="usb", ENV{ID_SERIAL}=="0763_019b" RUN+="/usr/bin/aconnect 20 128"

现在,该规则也更短了。


0

也许,您可能需要sleep在脚本中添加一个,以便使USB设备有机会“安顿”下来?例如,usb 3g调制解调器,模式切换以获取/ dev / ttyUSB并由内核启动并运行。


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.