Спасибо за комментарии. Я не знаю, как описать мою задачу более точно, на самом деле мне не нужно точно xinit
(или X-сервер или около того). Может быть, да, мне нужно знать, работает ли оконный менеджер. На самом деле мне просто нужно определить, активна ли *1003* инверсия цвета (и это ответ, почему мне нужно обнаруживать, даже когда я знаю, что программе AX не нужно заботиться при в каком оконном менеджере он отображается. в 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");
}