StartupWMClass 不会改变 Eclipse IDE 的 WM_Class

Dav*_*ght 5 gnome eclipse 14.04 15.04

我正在使用两个不同版本的 Eclipse。由于插件之间的冲突,我决定分别安装这两个版本,除了一个小问题外,它工作得很好。我正在使用 Ubuntu-Gnome (14.04 LTS),我编辑了一个版本的 .desktop 文件,如下所示:

[Desktop Entry]
Encoding=UTF-8
Version=1.0
Type=Application
Name=Custom Eclipse 
Icon=custom-icon
Path=/opt/custom-eclipse/
Exec=/opt/custom-eclipse/custom-eclipse
StartupNotify=true
StartupWMClass=custom-eclipse
Run Code Online (Sandbox Code Playgroud)

现在,困扰我的是以下几点:

应用程序按预期以自定义名称、WM_Class 和图标启动,但是,当应用程序完成启动时,这些属性由于某种原因而发生更改,并由 gnome-shell 与其他 eclipse 安装分组。

如果我输入xprop WM_CLASS终端并单击它返回的窗口WM_CLASS(STRING) = "Eclipse", "Eclipse"

编辑: 我最近刚刚从 Unity 桌面切换到 GNOME shell,并且使用 Unity 窗口没有组合在一起。

另一个编辑: 我将 ubuntu 版本更新为 15.04,将 gnome-shell 更新为 3.14.4,但不幸的是问题仍然存在。我开始认为这只能通过编辑 Eclipse 源代码来解决...

小智 5

StartupWMClass 不会改变实际的应用程序窗口类,而只是告诉桌面管理器应该使用什么窗口类来标识应用程序窗口。

问题是 Eclipse 使用Eclipse作为窗口类,尽管它的版本。

如果您想一次使用多个 Eclipse 版本并正确分组窗口,并且能够将应用程序图标固定为收藏夹,您应该编辑plugin.xml您正在使用的包。

对于Eclipse的Java EE IDE我成功地编辑plugin.xml

<eclipse-root>/plugins/org.eclipse.epp.package.jee_<current-version>
Run Code Online (Sandbox Code Playgroud)

改变属性

plugin/extension/product/@name
plugin/extension/product/property[@name=appName]/@value
Run Code Online (Sandbox Code Playgroud)

(不确定哪个就足够了)到您喜欢的任何值。您应该在.desktop文件中放入与StartupWMClass.


A.B*_*.B. 1

我想,这不是答案,但您可以测试我的桌面文件。这两个文件都在具有GNOME 3.16环境的Ubuntu 15.04中启动Eclipse Mars

对于桌面文件,我有两个分组的正在运行的实例。

cat ~/.local/share/applications/opt_eclipse_cpp.desktop

[Desktop Entry]
Encoding=UTF-8
Version=1.0
Type=Application
Name=Eclipse C++
Comment=Eclipse Integrated Development Environment
Icon=eclipse
Exec=/opt/eclipse-cpp/eclipse/eclipse
StartupNotify=true
StartupWMClass=Eclipse-CPP
Run Code Online (Sandbox Code Playgroud)

cat ~/.local/share/applications/opt_eclipse.desktop

[Desktop Entry]
Encoding=UTF-8
Version=1.0
Type=Application
Name=Eclipse JEE
Comment=Eclipse Integrated Development Environment
Icon=eclipse
Exec=/opt/eclipse-jee/eclipse/eclipse
StartupNotify=true
StartupWMClass=Eclipse-Java
Run Code Online (Sandbox Code Playgroud)

xprop WM_CLASS
Run Code Online (Sandbox Code Playgroud)

给出

WM_CLASS(STRING) = "Eclipse", "Eclipse"
Run Code Online (Sandbox Code Playgroud)

这是真的