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

时间:2018-06-26 13:24:31

标签: c command-line-interface x11 xlib kde

我编写了一个 xlib C应用程序。我需要它的不同行为,取决于它是否在没有X服务器启动的情况下通过CLI与xinit ./myapp一起运行,以及是否在普通KDE桌面上运行。

argv [0] 在两种情况下都返回相同的值(即看不到xinit前缀)。

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

1 个答案:

答案 0 :(得分:0)

感谢评论。我不知道如何更精确地描述我的任务,实际上我不需要确切地xinit(或X服务器左右)。也许是的,我需要知道窗口管理器正在运行。实际上,我只需要确定kwin color inversion 是否处于活动状态(这就是为什么我需要检测的答案,即使我知道 AX程序不应该具有以确保它显示在哪个窗口管理器中。(位于上述网址中)。但是要准确确定反演是相当复杂的。但是因为我已经在KDE中永久启用了反转,所以我可以测试Window Manager是否正在运行...

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

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");
}