C 如何检测xinit是否运行xlib应用程序?

C 如何检测xinit是否运行xlib应用程序?,c,command-line-interface,x11,xlib,kde,C,Command Line Interface,X11,Xlib,Kde,我编写了一个xlibc应用程序。我需要它的不同行为,这取决于它是否在正常KDE桌面上运行,而不是在no X服务器启动时从CLI运行xinit./myapp argv[0]在这两种情况下返回相同的值(即不显示xinit前缀) 如何确定何时使用xinit启动我的应用程序?谢谢您的评论。我不知道如何更准确地描述我的任务,实际上我不需要确切地描述xinit(或X服务器等)。也许是的,我需要知道窗口管理器正在运行。事实上,我只需要确定kwin的颜色反转是否处于活动状态(这就是为什么我需要检测的原因,即使我

我编写了一个xlibc应用程序。我需要它的不同行为,这取决于它是否在正常KDE桌面上运行,而不是在no X服务器启动时从CLI运行
xinit./myapp

argv[0]在这两种情况下返回相同的值(即不显示
xinit
前缀)


如何确定何时使用xinit启动我的应用程序?

谢谢您的评论。我不知道如何更准确地描述我的任务,实际上我不需要确切地描述
xinit
(或X服务器等)。也许是的,我需要知道窗口管理器正在运行。事实上,我只需要确定
kwin
的颜色反转是否处于活动状态(这就是为什么我需要检测的原因,即使我知道X程序不必关心它在哪个窗口管理器下显示。在上面的URL中)。但准确地确定反演是相当复杂的。但因为我在KDE中永久打开了反转,所以我可以测试窗口管理器是否正在运行

目前,使用建议的解决方案,我至少能够解决我的特殊情况。但不确定它是否足够便携

fp = popen("/usr/bin/xprop -root _NET_SUPPORTING_WM_CHECK", "r");
if (fp == NULL) {
    printf("Failed to run `/usr/bin/xprop -root _NET_SUPPORTING_WM_CHECK`\n" );
    exit(1);
}
fgets(cmdout, sizeof(cmdout), fp);
pclose(fp);
i = strncmp(cmdout, "_NET_SUPPORTING_WM_CHECK(WINDOW): window id #", 40);
if (i == 0) {
    inverted_colors = 1;
    printf ("Window manager detected.\n");
} else {
    inverted_colors = 0;
    printf ("No window manager detected.\n");
}

我不确定我是否理解这个问题。xinit将启动X服务器,因此在这两种情况下都可以假设X服务器正在运行。据我所知,没有办法确定这样的事情。你只是在寻找窗口管理器是否正在运行吗?如果是这样的话,也许会有帮助。除了使用
xinit
,还有其他方法可以在没有DE/window管理器的情况下启动X,因此检查
xinit
可能不是一个好主意。