【问题标题】:Ubuntu Linux Udev rules: Is it possible to run program written in C through udev rules?Ubuntu Linux Udev 规则:是否可以通过 udev 规则运行用 C 编写的程序?
【发布时间】:2011-01-24 20:59:07
【问题描述】:

我目前正在做一个项目,以在插入 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 规则说明。

【问题讨论】:

  • 如何测试程序是否运行?
  • 嗯,我想要一个交互式程序以这种方式启动,所以在这个游戏的情况下,它会启动并且我可以玩它。我已经花了大约 10 多个小时,我开始认为这是不可能的。
  • 你的两个 bash 脚本在 shebang (`#!/bin/bash). That probably doesn't matter in this case (the scripts will be invoked with the default /bin/sh`) 前面都有一个额外的空间,但你应该修复它。

标签: linux ubuntu executable udev


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    但是,这纯粹是基于我自己的实验的推测。如果更了解 udev 的人能证实这一点,那就太好了。

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

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

    也许用udevadm control --reload-rules重新加载你的规则。

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

    【讨论】:

      【解决方案3】:

      如果你可以运行一个 shell 脚本,你就可以运行一个可执行文件。不管是不是C创建的。

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

      我不知道您是否在终端中正确输入了它而在脚本中输入不正确,或者您的环境是否不同。除非 UDEV 系统是专门为重新创建您的终端环境而设计的,否则它们没有理由相同。

      【讨论】:

      • 这应该有助于启动进程,但看起来 Tyler 期望程序以交互方式运行,如果可能的话,这将需要更多的关注,而不仅仅是让路径正确.
      • 本是正确的。 PS。 Ben,你能告诉我你在说什么护理吗?也许是为了给我指明正确的方向?我有点不知所措。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-04
      • 2013-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多