所有X应用程序退出后,Xorg停止工作

时间:2011-12-01 11:04:43

标签: linux xorg xserver

我有一个简单的应用程序,用于确定我的X服务器何时就绪。该应用程序用于init进程,所有X应用程序都依赖于它来完成。它不断尝试连接,当它确实获得连接时,它就会退出。

int main(int argc, const char *argv[])
{
    Display *dis;

    while(1){
        dis = XOpenDisplay(NULL);

        if(dis != 0)
            break;
        usleep(1000);
    }

    if(dis != 0)
       XCloseDisplay(dis);

    return 0;
}

我的问题是,在我升级了我的Nvidia驱动程序之后,没有一个X应用程序能够在屏幕上显示任何内容,如果它们在这个简单测试后运行的话。

另外,如果我将xeyes作为第一个应用程序运行,那么它可以工作。然后,如果我按下Ctrl-c(结束正在运行的xeyes应用程序)并开始一个新的,屏幕上不会显示任何内容,但屏幕上不会显示任何错误。

这是预期的行为吗?在最后一个X-application退出后,Xorg是否应该停止工作?

2 个答案:

答案 0 :(得分:2)

X具有“服务器生成”的概念:每当最后一个客户端与X服务器断开连接时,服务器会尝试重置自身,然后我们说它开始了新的“生成”。大多数用户永远不会超过第一代,因此多代产品未经过多次测试,因此如果您在使用多代产品时触发错误并不是一个大惊喜。触发新一代时经常会发生内存泄漏。如果您发现X服务器进入新服务器时触发了错误,请将其报告给bugs.freedesktop.org。

从您的环境描述中,您似乎正在触发新一代服务器。您可以使用“-noreset”启动X以避免重置服务器,可能隐藏任何现有错误(这是一个很好的测试!)。

作为旁注,您可以考虑使用SIGUSR1替换为方案粘贴的程序。以下文字来自“man Xserver”:

  SIGUSR1 This  signal  is  used  quite  differently from either of the above.
          When the server starts, it checks to see if it has inherited
          SIGUSR1 as SIG_IGN instead of the usual SIG_DFL.  In this case, the server
          sends a SIGUSR1 to its parent process after it has  set
          up the various connection schemes.  Xdm uses this feature to recognize
          when connecting to the server is possible.

答案 1 :(得分:0)

这显然不是预期的行为。

但是你使用这个'轮询'程序的事实向我表明你正在尝试解决其他错误。

known issues有快速启动机器,Ubuntu + Nvidia + plymouth;看看你是否可以升级系统或禁用普利茅斯?

另外,你可以查看“{停止工作”时运行的vty X是什么吗?

ps -ef | grep X
gdmtty="$(ps --no-heading -o tty -p $(pgrep X))"
stty -F "/dev/$gdmtty"
ps -f -t "$gdmtty"

(有时候关于SIGNALS的终端标志对XServer不合适,而你的Ctrl-C可能会引起问题)。