Программно определить среду рабочего стола в Linux на C

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

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

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

Есть идеи?

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

9
задан Jessica 17 August 2010 в 12:48
поделиться

3 ответа

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

1
ответ дан 5 December 2019 в 01:19
поделиться

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

eike@lixie:~> echo $WINDOWMANAGER
/usr/bin/startkde
eike@lixie:~> echo $WINDOW_MANAGER
/usr/bin/startkde
eike@lixie:~>
2
ответ дан 5 December 2019 в 01:19
поделиться

Вы можете статически связать свой набор оконных инструментов, если не возражаете против непоследовательного внешнего вида пользовательского интерфейса. Он по-прежнему будет работать нормально. Вы также можете просто связать разделяемые библиотеки и убедиться, что LD_LIBRARY_PATH указывает на них. Если вы действительно хотите реализовать что-то, что будет динамически связываться с различными наборами инструментов, вы можете попробовать что-нибудь с dlopen / dlsym, но это было бы безумием.

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

0
ответ дан 5 December 2019 в 01:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: