我编写了一个程序,该程序在登录后在终端中以ROOT权限运行,但在重启后进行XOpenDisplay(NULL)调用时失败。该程序通过rc.local启动,但似乎无法看到X11。
我需要ROOT,因为我进行了LibUSB调用,如果不是ROOT则会失败。我可以看到该程序正在运行ROOT权限,但检查环境变量显示未设置DISPLAY。我有一个延迟循环运行并在用户登录后进行检查,用户可以在环境变量中看到DISPLAY设置,但程序不能。如果程序终止并在终端中运行它可以完美地工作,那么问题是程序在启动时无法与X11交互并且此状态仍然存在。
我希望程序在没有用户登录的情况下启动并运行。
任何人都可以让我知道我需要做什么吗?
大卫
答案 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启动序列,而不是系统启动。