如何使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 , RUNIMPORT使用的脚本/程序/文件的完整路径。

  • 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'" 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值