我正在尝试创建一个 udev 规则,以便在通过 USB 连接手机时解锁我的电脑。我找不到该规则正在运行,因此我尝试了一个更简单的规则。这是规则(匿名):
KERNEL=="sd?1", ATTRS{idVendor}=="****", ATTRS{idProduct}=="****", SYMLINK+="phone", RUN+="touch /home/user/udev.touch"
我知道规则正在运行,因为phone -> sdc1
正在创建链接但尚未创建文件。我是否必须启用安全设置才能让文件运行外部程序?
答案1
您必须在 RUN 键中使用完整路径,因为(man udev
)
如果没有给出绝对路径,则程序应位于 /lib/udev 中,否则必须指定绝对路径。程序名称和参数以空格分隔。可以使用单引号来指定带空格的参数。
然而,(bash)脚本本身应该正常运行,也就是说您不需要指定路径。
答案2
我在使用 udev 时遇到了同样的问题。我几乎尝试了所有方法,让脚本在添加和删除设备时正常工作。
这是我编写的代码:
ACTION=="add", KERNEL=="sda1", SUBSYSTEMS=="scsi", ATTRS{model}=="AVV207-0 ", SYMLINK+="Lacie", MODE="0666", RUN+="/bin/sh /usr/bin/udev/lacie-add.sh", OPTIONS="last_rule"
ACTION=="remove", KERNEL=="sda1", RUN+="/bin/sh /usr/bin/udev/lacie-del.sh", OPTIONS="last_rule"
添加OPTIONS="last_rule"
参数就成功了。
答案3
我也遇到过这个问题,我可以确认从 12.04 开始您需要指定完整bash
路径和完整bash
脚本才能使 RUN 命令正常工作。