2011-01-24 31 views
4

我目前正在开发一个项目,以便在USB设备插入时运行用C语言编写的程序。udev规则有可能吗?Ubuntu Linux Udev规则:是否可以通过udev规则运行用C编写的程序?

我现在明白了,当我插上我的设备运行一个Hello World脚本。但是,它不止一次运行它。

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

当前规则:

SUBSYSTEMS == “USB”,ACTION == “添加”, 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 /游戏/酒杯工作在终端,但是,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

您如何测试以查看程序是否运行? – 2011-01-24 22:52:25

+0

好吧,我想要一个交互式程序以这种方式启动,所以在这个游戏的情况下,它会启动,我就能够玩。我已经有大约10多个小时了,我开始认为这是不可能的。 – Tyler 2011-01-27 21:14:29

回答

0

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

您似乎缺少斜线。那条路几乎肯定应该是/usr/games/blackjack,而不是user/games/blackjack

我不知道你是否在正确的端子在你的脚本类型,并不当,或者如果你只是有你的环境不同。除非UDEV系统是故意设计来重新创建终端环境,否则他们没有理由相同。

1

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

然而,这是根据我自己的实验纯粹是猜测。如果有人更了解udev可以证实这一点,那将是非常好的。

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

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

也许与udevadm control --reload-rules刷新你的规则。

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

1

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