Я пытаюсь определить, работаю ли я на Gnome или KDE окружение рабочего стола.
Я знаю, что могу проверить через ps -aux и grepping либо gnome, либо KDE, но это не очень хорошо: 1) что если я нахожусь на рабочем столе gnome, но у меня загружены библиотеки KDE? 2) Мне нужно сделать это из кода без использования system () или popen () или другой комбинации fork / exec.
Я могу читать файлы или env. переменные или что-то еще.
Есть идеи?
спасибо, любая помощь приветствуется.
Выберите набор оконных менеджеров, которые вам нужны: metacity, xfwm4, flwm и т. Д. Вы можете найти их в своем grep ps
(или выполните поиск через / proc ). Библиотеки Gnome не обязательно означают, что кто-то запускает всю среду рабочего стола gnome, но тогда Gnome и KDE не являются оконными менеджерами. Если вам важны WM, ищите их.
По крайней мере, в Opensuse есть переменные окружения WINDOWMANAGER, WINDOW_MANAGER
eike@lixie:~> echo $WINDOWMANAGER
/usr/bin/startkde
eike@lixie:~> echo $WINDOW_MANAGER
/usr/bin/startkde
eike@lixie:~>
Вы можете статически связать свой набор оконных инструментов, если не возражаете против непоследовательного внешнего вида пользовательского интерфейса. Он по-прежнему будет работать нормально. Вы также можете просто связать разделяемые библиотеки и убедиться, что LD_LIBRARY_PATH указывает на них. Если вы действительно хотите реализовать что-то, что будет динамически связываться с различными наборами инструментов, вы можете попробовать что-нибудь с dlopen / dlsym, но это было бы безумием.
Если вы заботитесь о согласованности кросс-платформенных / кросс-виджетных инструментов, лучше всего будет что-то, что само визуализирует нативно выглядящие виджеты; Swing может отображать один и тот же код, чтобы он выглядел как GTK или Windows. Я знаю, что вы не используете Java, но на C нет простого решения (Swing в любом случае поможет вам только частично, потому что он не работает с Qt).