Détecter l’environnement de bureau sous Linux par programmation en C

J’essaie de détecter si je cours sur un environnement de bureau Gnome ou KDE.

Je sais que je peux vérifier via un ps -aux et écumer gnome ou KDE mais ce n’est pas bien: 1) et si je suis sur un bureau gnome mais que les librairies KDE sont chargées? 2) Je dois le faire à partir du code sans utiliser system () ou popen () ou une autre combinaison fork / exec.

Je peux lire des fichiers ou env. variables ou autre.

Des idées?

merci, toute aide est appréciée.

Choisissez un ensemble de gestionnaires de fenêtres qui vous intéressent: metacity, xfwm4, flwm, etc. Vous pouvez rechercher ceux de votre grep de ps (ou rechercher dans / proc). Les bibliothèques Gnome ne signifient pas nécessairement que quelqu’un gère tout l’environnement de bureau gnome, mais Gnome et KDE ne sont pas des gestionnaires de fenêtres. Si les MW sont ce que vous aimez, cherchez-les.

Au moins sur Opensuse il y a les variables d’environnement WINDOWMANAGER, WINDOW_MANAGER

 eike@lixie:~> echo $WINDOWMANAGER /usr/bin/startkde eike@lixie:~> echo $WINDOW_MANAGER /usr/bin/startkde eike@lixie:~> 

Vous pouvez lier statiquement votre boîte à outils de fenêtre si vous ne vous souciez pas d’une interface graphique incohérente. Cela fonctionnera toujours bien. Vous pouvez également regrouper simplement les bibliothèques partagées et vous assurer que LD_LIBRARY_PATH leur est associé. Si vous vouliez réellement implémenter quelque chose qui serait lié dynamicment à différents toolkits, vous pourriez essayer quelque chose avec dlopen / dlsym, mais ce serait insensé.

Si vous vous souciez de la cohérence entre les outils cross-platform / cross-widget, votre meilleur pari serait quelque chose qui rend les widgets natifs eux-mêmes; Swing peut rendre le même code pour ressembler à GTK ou Windows. Je sais que vous n’utilisez pas Java, mais il n’y a pas de solution facile en C (Swing ne vous laissera que partiellement parce qu’il ne fait pas Qt).

Pas sûr de la qualité de ce standard, mais il est cohérent dans Fedora 21, Slackware 14.1 et Ubuntu 14.04. (Plus de bienvenue)

essayer

  $ echo $DESKTOP_SESSION 

J’espère que cela t’aides.