首页 文章

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

提问于
浏览
4

我正在开发一个项目,用于在插入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规则解释 .

3 回答

  • 0

    如果用C编写程序,可以使用libudev . 它具有简单的API,允许枚举和监控设备 . Here你会找到很好的教程 .

  • 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

    如果您可以运行shell脚本,则可以运行可执行文件 . 它是否由C创建并不重要 .

    你似乎错过了一个斜线 . 那道路几乎肯定应该 /usr/games/blackjack ,而不是 user/games/blackjack .

    我不知道你是否在你的终端中正确输入了它并且在你的脚本中不正确,或者你只是让你的环境不同 . 除非故意设计UDEV系统来重建您的终端环境,否则他们没有理由相同 .

相关问题