4

我在 /etc/udev/rules.d/local.rules 中制作了一个脚本

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 并将权限更改为 a+x。我尝试将“子系统”更改为“总线”。我尝试将运行设置为具有相同命令的“/path/test.sh”。

4

2 回答 2

11

我不是专家,这不是答案,但我发现以下步骤可用于确定要触发的适当属性:

  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. 编写规则并检查它是否正在触发。就我而言,我只是将设备所有者更改为用户“斯蒂芬”,我很容易通过使用ls -l /dev/bus/usb/003/007. 我对这种情况的规则如下SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", OWNER="stephen":我有一个类似的规则让我困惑了一会儿,因为子系统期望ATTRSnot ATTR,这就是我建议遍历属性的原因。后一种情况下的规则变为:`SUBSYSTEM=="tty", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", OWNER="stephen"。

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

于 2012-07-03T02:04:07.440 回答
3

它不运行动作

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

于 2012-07-02T23:50:28.770 回答