2

我编写了一个程序,该程序在登录后在终端中以 ROOT 权限运行,但在重新启动后调用 XOpenDisplay(NULL) 时失败。该程序通过 rc.local 启动,但似乎无法看到 X11。

我需要 ROOT,因为我进行了 LibUSB 调用,如果不是 ROOT,这些调用会失败。我可以看到程序以 ROOT 权限运行,但检查环境变量显示未设置 DISPLAY。我有一个延迟循环运行,并在用户登录后进行检查,用户可以看到环境变量中设置的 DISPLAY 但程序不能。如果程序终止并在终端中运行,它可以完美运行,所以问题是程序在启动时无法与 X11 交互,并且这种状态仍然存在。

我希望程序在没有用户登录的情况下启动并运行。

谁能让我知道我需要做什么?

大卫

4

2 回答 2

1

您的程序应仅在 X11 启动并运行后启动。但更好的设计是创建一个以 root 权限运行但不使用 X 的服务,并安排一个 X 客户端以某种方式与其通信。如果没有 X 就无法生存,那么就钩入 X11 启动序列,而不是系统启动。

于 2012-05-09T13:55:50.690 回答
1

感谢tripleee解决了。

Ubuntu 现在使用 LightDM,因此将下面的行添加到/etc/lightdm/lightdm.conf

greeter-setup-script=usr/bin/'my-script'

其中“我的脚本”是:

#!/bin/sh
/usr/bin/'my-prog' &

一切正常。

于 2012-05-10T12:12:02.373 回答