UBUNTU:当程序通过rc.local以引导顺序运行时,XOpenDisplay(NULL)失败

时间:2012-05-09 13:41:20

标签: ubuntu x11 rc

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

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

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

任何人都可以让我知道我需要做什么吗?

大卫

2 个答案:

答案 0 :(得分:1)

感谢Tripleee。

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

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

其中'my-script'是:

#!/bin/sh
/usr/bin/'my-prog' &
一切正常。

答案 1 :(得分:0)

您的程序只应在X11启动并运行后启动。但是更好的设计是使用root权限运行的服务,但不使用X,并安排X客户端以某种方式与它通信。如果没有X就不能存在,请挂钩X11启动序列,而不是系统启动。