我正在尝试检测我是否在Gnome或KDE桌面环境中运行。
我知道我可以通过ps -aux进行检查并使用gnome或KDE进行检查,但这并不好:1)如果我在gnome桌面上但是我加载了KDE库会怎么样? 2)我需要在不使用system()或popen()或其他fork / exec组合的情况下从代码中执行此操作。
我可以阅读文件或环境。变量等等。
有什么想法吗?
谢谢,感谢任何帮助。
答案 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)
答案 3 :(得分:0)
如果您不介意看起来不一致的用户界面,则可以静态链接您的窗口工具包。它仍然可以正常工作。您还可以简单地捆绑共享库并确保LD_LIBRARY_PATH指向它们。如果你真的想要实现一些动态链接到不同工具包的东西,你可以尝试使用dlopen / dlsym,但那会很疯狂。
如果您关心跨平台/跨窗口小部件工具包的一致性,那么您最好的选择就是呈现具有本机外观的小部件本身; Swing可以渲染相同的代码看起来像GTK或Windows。我知道你没有使用Java,但是C中没有简单的解决方案(Swing只会让你中途停止,因为它没有Qt)。