如何使udev规则有效?
我想学习udev规则。 这是我做的:
victor@X301A1:~$ ls /etc/udev/rules.d/ 70-persistent-cd.rules 70-persistent-net.rules README
然后:
victor@X301A1:~$ sudo gedit /etc/udev/rules.d/01-my-first-udev.rules
我的规则:
ACTION=="add", RUN+="echo HELLO ! > /home/victor/udev_test_log.txt"
保存文件后:
sudo udevadm control --reload-rules
我预计连接USB设备会在文件中写入但没有任何反应。 我哪里错了?
在RUN中,您必须将路径放入脚本。 见man udev
:
将程序添加到要为特定设备执行的程序列表中。 这只能用于非常短的运行任务。 长时间运行事件过程可能会阻止此设备或从属设备的所有其他事件。 需要立即将长时间运行的任务与事件过程本身分离。
例如,创建一个新脚本,在/lib/udev
使用sudo -H gedit /lib/udev/hello.sh
说出hello.sh
并将下一行放入其中:
#!/bin/bash echo HELLO ! > /home//udev_test_log.txt
使用您的用户名更改
。 保存文件,关闭它并使其可执行:
chmod +x /lib/udev/hello.sh
在/etc/udev/rules.d/01-my-first-udev.rules
文件中添加一条新规则,如下所示:
ACTION=="add", RUN+="/lib/udev/hello.sh"
实际上,我无法得到这方面的参考; 但这是Try&Error得到的东西。
-
udev
需要在PROGRAM
,TEST
,RUN
或IMPORT
使用的脚本/程序/文件的完整路径。 -
udev
不支持重定向操作。 -
udev
可以使用参数处理命令。 -
udev
有可变替换。
所以你可以写多function脚本(不只是盲/单任务脚本:)),确保它适用于我的例子:
KERNEL=="2-1.2:1.[0-9]*", DRIVER!="usb-storage", RUN+="/bin/sh -c 'echo -n %k,%p > /home/sneetsher/Desktop/%n.txt'"
-
/bin/sh
绝对路径 -
>
重定向在shell内部处理 -
-c '...'
2个命令参数 -
%k
,%p
,%n
udev变量(设备内核名称,设备路径,设备编号)
所以对于你的情况:
ACTION=="add", RUN+="/bin/sh -c 'echo HELLO ! > /home/victor/udev_test_log.txt'"