我编写了一个 xlib C应用程序。我需要它的不同行为,取决于它是否在没有X服务器启动的情况下通过CLI与xinit ./myapp
一起运行,以及是否在普通KDE桌面上运行。
argv [0] 在两种情况下都返回相同的值(即看不到xinit
前缀)。
如何确定何时使用xinit
来启动我的应用?
答案 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");
}