如何检测Linux操作系统使用的是KDE还是Gnome环境

7

我需要通过编程的方式在Linux系统上确定正在运行的窗口管理器。

以下是如何使用伪代码:

if(WindowManagerOfOS.isKDE()){
      do.anyThing();
}

我该怎么做?这个可行吗?

1
我无法在我的电脑上测试这个,但是请尝试查看UIManager.getSystemLookAndFeelClassName()在任何一个上返回了什么。 - Adam
相关链接:https://dev59.com/1k_Ta4cB1Zd3GeqPA3Sb - Mechanical snail
2个回答

10

一个用户可能同时安装了两个,但只运行其中一个,这种情况下两个环境变量都会存在。你需要检查正在运行的进程。 - Adam
Tomaz,我将使用“KDE_SESSION_VERSION”来检查这个问题。问题是KDE没有桌面... - Carlos Spohr
1
我忘记写注释了...在我的KDE本地Linux Mint 12中,System.getenv("XDG_CURRENT_DESKTOP")打印出null。 - Carlos Spohr
4
不,这已被弃用,请勿使用。在Gnome3/Fedora16上也未设置。 - Andy Ross

1
官方答案是你不应该关心。两个桌面都遵循现有的标准。两者都可以运行彼此的软件。你想做什么?如果你正在寻找一个特定的服务,只有一个发行版默认提供,那么你应该直接寻找这个服务。

5
这不是对于问题的回答,应该作为评论发表。 - jobukkit
我打算投票认为这是一个可以的答案。也许不是最好的,但它有效,因为有时候我们需要说“不要那样做”,当人们想知道如何“那样做”时。 - Russia Must Remove Putin
1
有许多人关心并应该知道的地方,第一个例子是在xdg-utils中http://cgit.freedesktop.org/xdg/xdg-utils/tree/scripts/xdg-utils-common.in看到detectDE(),它被xdg-su/xdg-terminal等使用,以确定我们的图形sudo包装器应该使用哪个shell。还有一些东西,例如设置壁纸等,没有任何固定的api或标准来覆盖。 Variety壁纸应用程序在以下脚本中执行此操作http://bazaar.launchpad.net/~peterlevi/variety/trunk/view/head:/data/scripts/set_wallpaper - simotek
@Andy 错了!基于这种假设构建的脚本将失败。你必须能够检测到KDE,才能正确调用konsole而不是gnome-terminal,例如。 - tatsu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接