Ubuntu Linux Udev规则:是否可以通过udev规则运行用C语言编写的程序?

我目前正在开发一个项目,在USB设备插入时运行用C语言编写的程序。udev规则有可能吗?

当我插入我的设备时,我目前已经运行了一个Hello World脚本。 但是,它运行不止一次。

当前path:/etc/udev/rules.d/98-local.rules

目前的规则:

SUBSYSTEMS ==“usb”,ACTION ==“add”,RUN + =“/ usr / local / bin / USB.sh”

脚本path:/usr/local/bin/USB.sh

脚本:

#!/bin/bash echo 'Hello World!' >>"/home/<username>/Desktop/udev.out" exit 

我试过这样的事情来获得可执行文件的运行:

  #!/bin/bash usr/games/blackjack exit 

在terminal中inputusr / games / blackjack,但在插入USB设备时不起作用。 不过,我知道脚本正在运行,因为我已经将它们组合在同一个文件中,并且已经创build了Hello World。

我也尝试从我的用户帐户运行可执行文件,如下所示:

 SUBSYSTEMS=="usb", ACTION=='add", RUN+="/bin/su tyler -c '/usr/local/bin/USB.sh'" 

但是,这也不起作用。

这是设备权限的问题还是只是不可能运行一个可执行文件?

*注意:我已经详细阅读了http://deactivated.net/writing_udev_rules.html中的udev规则解释。

如果你用C编写程序,你可以使用libudev 。 它有简单的API,允许枚举和监视设备。 在这里你会发现很好的教程。

另一个原因可能是udev似乎在自己的环境中运行。 这就像你会从一个tty运行你的程序:它开始,但没有xserver …

但是,这是基于我自己的实验的纯粹的猜测。 如果有人更好地认识udev,就可以证实这一点。

编辑:将以下内容添加到您的脚本:

 set -x xhost local:YOURUSERNAME export DISPLAY=:0.0 

也许用udevadm control --reload-rules重新加载你udevadm control --reload-rules

(来源: http : //ubuntuforums.org/showthread.php?t=994233 )

如果你可以运行一个shell脚本,你可以运行一个可执行文件。 它是否由C创建并不重要。

你似乎缺少一个斜线。 这条路几乎肯定应该是/usr/games/blackjack ,而不是user/games/blackjack

我不知道你是否已经在你的终端里正确地输入了它,如果你的脚本不正确,或者你的环境不一样。 除非UDEV系统是故意设计来重新创建你的终端环境,否则他们没有理由相同。