2012-07-02 111 views
4

我做出/etc/udev/rules.d/local.rules脚本运行的东西时,USB设备插入不工作

SUBSYSTEM=="usb", SYSFS{idVendor=="b58e"}, SYSFS{idProduct=="9e84"}, ACTION=="add", RUN+="notify-send USB" 

我再重装的udev与

sudo udevadm control --reload-rules 

我试图删除一切,但子系统并运行。我试过运行'='而不是'+ =',我厌倦了ATTR而不是SYSFS。我试过“sudo service udev restart”和“sudo reload udev”。我拔下设备,然后重新插入,并且不运行该操作。我尝试将其重命名为70-local.rules,并将权限更改为+ x。我试过把'子系统'改成'公交车'。我试着将运行设置为“/path/test.sh”,它具有相同的命令。

回答

9

我不是专家,这不是一个答案,但我发现在确定适当的属性来触发有用以下步骤:

  1. 使用udevadm找到设备路径,lsusb ,或usb-devices。我通常只使用lsusb并让我的shell中的选项卡完成。在我的情况下,路径是/dev/bus/usb/003/007
  2. 使用udevadm来标识规则写入的设备属性。就我而言,我使用udevadm info -a --attribute-walk --root --name=/dev/bus/usb/003/007
  3. 编写规则并检查它是否触发。在我的情况下,我只是将设备所有者更改为用户“stephen”,我很容易通过使用ls -l /dev/bus/usb/003/007来检查它是否正常工作。我对这种情况的规则如下所示:SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", OWNER="stephen"。我有一个类似的规则,我困惑了一会儿,因为子系统期望ATTRS不是ATTR,这就是为什么我建议走属性。在后一种情况下的规则变成:`SUBSYSTEM ==“tty”,ATTRS {idVendor} ==“0403”,ATTRS {idProduct} ==“6001”,OWNER =“stephen”。

而且,当然,man udev总是有帮助的。正如您所说,您应该努力确定您的规则正确触发,并且可能会最好,只需在设备上执行快速的所有权更改,就像我第一步所做的那样。你有时会碰到不好的属性或符号链接,它是

+0

对我来说这是ATTR,udev规则指定RUN命令将程序文件作为输入。它必须被标记为可执行文件,并且必须具有#!如果它是一个解释的顶部。小组的东西意识到它正在工作,但运行是错误的。这终于奏效了。谢谢! – ForeverConfused

3

它不运行的操作

不,它运行的动作。问题是它不知道在哪里发送通知,因为在udev启动时没有运行通知框架。您将需要通过系统总线发送DBus消息,并让用户守护程序捕获消息并发布通知。

+1

谢谢。我改变了文件,只包含SUBSYSTEM ==“usb”,ACTION ==“add”,RUN =“echo 1>/tmp/foo”。它似乎并没有制作文件。我尝试了使用或不使用SYSFS的东西。 – ForeverConfused

+2

现在它回显“1>/tmp/foo”。 –

+0

我尝试了[SUBSYSTEM ==“usb”,ACTION ==“add”,RUN =“touch/tmp/asdfg”]与运行[RUN =“gimp”] [RUN =“echo'1'>/tmp/foo“]以可能的方式重新加载。仍然没有运气。 Udev在重新启动时说'udev启动/运行,进程5038',所以我知道它正在运行。有没有办法确认它是否需要我的配置文件,或者如果它不能解析它们,就会吐出错误? – ForeverConfused