Как определить, работает ли приложение xlib из xinit? - PullRequest
0 голосов
/ 26 июня 2018

Я пишу приложение xlib C. Мне нужно другое поведение, в зависимости от того, работает ли он с xinit ./myapp из CLI, когда X-сервер не запущен, от запуска на обычном рабочем столе KDE.

argv [0] возвращает одинаковое значение в обоих случаях (т.е. не видит префикс xinit).

Как я могу определить, когда xinit использовался для запуска моего приложения?

1 Ответ

0 голосов
/ 13 июля 2018

Спасибо за комментарии. Я не знаю, как описать мою задачу более точно, на самом деле мне не нужно точно 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");
}
...