UBUNTU:程序在启动序列中通过rc.local运行时,XOpenDisplay(NULL)失败

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

我需要ROOT,因为我做了LibUSB调用,如果不是ROOT,这些失败。 我可以看到程序运行ROOT权限,但环境variables的检查显示没有设置DISPLAY。 我有一个延迟循环运行,用户login后进行检查,用户可以在环境variables中看到DISPLAY,但程序不能。 如果程序终止并在terminal中运行,那么它的工作原理是完美的,所以问题在于程序在启动时不能和X11交互,这种状态依然存在。

我希望程序能够在没有用户login的情况下运行。

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

大卫

解决感谢tripleee。

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

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

其中“我的脚本”是:

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

一切正常。

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