我正在开发一个项目,用于在插入USB设备时运行用C语言编写的程序。这是否可以使用udev规则?
当我插入设备时,我现在已经运行了Hello World脚本。但是,它不止一次运行它。
当前路径:/etc/udev/rules.d/98-local.rules
现行规则:
SUBSYSTEMS ==“usb”,ACTION ==“add”, RUN + = “/ USR / local / bin中/ USB.sh”
脚本的路径:/usr/local/bin/USB.sh
脚本:
#!/bin/bash
echo 'Hello World!' >>"/home/<username>/Desktop/udev.out"
exit
我尝试过这样的东西来运行可执行文件:
#!/bin/bash
usr/games/blackjack
exit
键入usr / games / blackjack在终端中工作但是在插入USB设备时它不起作用。但是,我知道脚本正在运行,因为我已经将它们组合在同一个文件中,并且已经创建了hello world。
我也试过从我的用户帐户运行可执行文件,如下所示:
SUBSYSTEMS=="usb", ACTION=='add", RUN+="/bin/su tyler -c '/usr/local/bin/USB.sh'"
然而,这也不起作用。
是设备权限问题还是无法运行可执行文件?
*注意:我已经在http://reactivated.net/writing_udev_rules.html广泛阅读了udev规则解释。
答案 0 :(得分:1)
另一个原因可能是udev似乎在自己的环境中运行。这就像你从一个tty运行你的程序:它确实开始了,但是没有xserver ......
然而,这是基于我自己的实验的纯粹推测。如果有更好地了解udev的人可以证实这一点,那就太好了。
编辑:将以下内容添加到您的脚本中:
set -x
xhost local:YOURUSERNAME
export DISPLAY=:0.0
也许可以使用udevadm control --reload-rules
重新加载规则。
答案 1 :(得分:1)
答案 2 :(得分:0)
如果您可以运行shell脚本,则可以运行可执行文件。它是否由C创建无关紧要。
你似乎错过了一个斜线。该路径几乎肯定应该是/usr/games/blackjack
,而不是user/games/blackjack
。
我不知道您是否在终端中正确输入了它,并且在脚本中输入不当,或者您的环境不同。除非故意设计UDEV系统来重建您的终端环境,否则他们没有理由相同。