gpt4 book ai didi

linux - Xorg 在所有 X 应用程序退出后停止工作

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:28:01 27 4
gpt4 key购买 nike

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

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 应用程序)并启动一个新应用程序,屏幕上什么也没有显示,但屏幕上也没有错误出现。

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

最佳答案

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.

关于linux - Xorg 在所有 X 应用程序退出后停止工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8340314/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com