在C中以编程方式检测Linux中的桌面环境

时间:2010-08-16 19:49:53

标签: c linux desktop environment

我正在尝试检测我是否在Gnome或KDE桌面环境中运行。

我知道我可以通过ps -aux进行检查并使用gnome或KDE进行检查,但这并不好:1)如果我在gnome桌面上但是我加载了KDE库会怎么样? 2)我需要在不使用system()或popen()或其他fork / exec组合的情况下从代码中执行此操作。

我可以阅读文件或环境。变量等等。

有什么想法吗?

谢谢,感谢任何帮助。

4 个答案:

答案 0 :(得分:2)

至少在Opensuse上有环境变量WINDOWMANAGER,WINDOW_MANAGER

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

答案 1 :(得分:1)

选择一组您关心的窗口管理器:metacity,xfwm4,flwm等。您可以在ps的grep中查找(或搜索/ proc)。 Gnome库并不一定意味着有人在运行整个gnome桌面环境,但Gnome和KDE不是窗口管理器。如果WM是你关心的,那就找那些。

答案 2 :(得分:1)

Not sure how standard this is, but it is consistent in Fedora 21, Slackware 14.1 and Ubuntu 14.04. (More welcome) try $ echo $DESKTOP_SESSION Hope this helps.

答案 3 :(得分:0)

如果您不介意看起来不一致的用户界面,则可以静态链接您的窗口工具包。它仍然可以正常工作。您还可以简单地捆绑共享库并确保LD_LIBRARY_PATH指向它们。如果你真的想要实现一些动态链接到不同工具包的东西,你可以尝试使用dlopen / dlsym,但那会很疯狂。

如果您关心跨平台/跨窗口小部件工具包的一致性,那么您最好的选择就是呈现具有本机外观的小部件本身; Swing可以渲染相同的代码看起来像GTK或Windows。我知道你没有使用Java,但是C中没有简单的解决方案(Swing只会让你中途停止,因为它没有Qt)。