Обнаружение среды рабочего стола в Linux программно в C - PullRequest
9 голосов
/ 16 августа 2010

Я пытаюсь определить, работаю ли я в среде рабочего стола Gnome или KDE.

Я знаю, что могу проверить с помощью ps -aux и grep либо gnome, либо KDE, но это не хорошо: 1) чтоесли я нахожусь на рабочем столе gnome, но у меня загружены библиотеки KDE?2) Мне нужно сделать это из кода без использования system () или popen () или другой комбинации fork / exec.

Я могу читать файлы или env.переменные или что-то еще.

Любые идеи?

спасибо, любая помощь приветствуется.

Ответы [ 4 ]

2 голосов
/ 16 августа 2010

По крайней мере на Opensuse есть переменные окружения WINDOWMANAGER, WINDOW_MANAGER

eike@lixie:~> echo $WINDOWMANAGER
/usr/bin/startkde
eike@lixie:~> echo $WINDOW_MANAGER
/usr/bin/startkde
eike@lixie:~>
1 голос
/ 25 июня 2015

Не уверен, насколько это стандартно, но это согласуется в Fedora 21, Slackware 14.1 и Ubuntu 14.04.(Больше приветствия)

попробуй

 $ echo $DESKTOP_SESSION

Надеюсь, это поможет.

1 голос
/ 17 августа 2010

Выберите набор оконных менеджеров, которые вас интересуют: metacity, xfwm4, flwm и т. Д. Вы можете найти их в своем grep ps (или выполнить поиск через / proc). Библиотеки Gnome не обязательно означают, что кто-то использует всю рабочую среду gnome, но тогда Gnome и KDE не являются оконными менеджерами. Если вам нужны WM, поищите их.

0 голосов
/ 17 августа 2010

Вы можете статически связать свой оконный инструментарий, если не возражаете против непостоянного интерфейса.Это все еще будет работать нормально.Вы также можете просто связать совместно используемые библиотеки и убедиться, что LD_LIBRARY_PATH указывает на них.Если вы на самом деле хотели реализовать что-то, что бы динамически связывалось с различными наборами инструментов, вы могли бы попробовать что-то с помощью dlopen / dlsym, но это было бы безумно.Ваша лучшая ставка - это то, что будет отображать нативные виджеты;Swing может отображать один и тот же код, чтобы он выглядел как GTK или Windows.Я знаю, что вы не используете Java, но в C нет простого решения (Swing все равно добьется вашего успеха, поскольку Qt не работает).

...