StartupWMClass 不会改变 Eclipse IDE 的 WM_Class

StartupWMClass 不会改变 Eclipse IDE 的 WM_Class

我正在使用两个不同版本的 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

现在,让我烦恼的是:

应用程序按预期以自定义名称、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 源代码来修复...

答案1

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

问题是 EclipseEclipse不管其版本如何都使用它作为窗口类。

如果您想要同时使用多个 Eclipse 版本并正确对窗口进行分组,并且能够将应用程序图标固定为收藏,则应该编辑plugin.xml您正在使用的软件包。

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

<eclipse-root>/plugins/org.eclipse.epp.package.jee_<current-version>

改变属性

plugin/extension/product/@name
plugin/extension/product/property[@name=appName]/@value

(不确定哪一个就足够了)设置为您喜欢的任何值。您应该将相同的值放入.desktop文件中StartupWMClass

答案2

我想这不是答案,但你可以测试我的桌面文件。两个文件都以日食火星在一个Ubuntu 15.04GNOME 3.16环境。

有了这个桌面文件,我有两个正在运行的实例不是分组。

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

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

xprop WM_CLASS

给出

WM_CLASS(STRING) = "Eclipse", "Eclipse"

这是真的

答案3

StartupWMClass 仅用于对具有相同类名的窗口进行分组。如果程序支持 gtk 选项,则需要考虑使用 exec 命令更改类。

我刚刚在以应用模式运行的浏览器上尝试了此操作,目前类选项在 chrome 或 chromium 中不起作用,因此我使用了 Epiphany。这是我的 Trello 桌面启动器的一个示例。

[Desktop Entry]
Version=1.0
Type=Application
Exec=epiphany https://trello.com/ -a --profile=/epiphany/trello --class=trello
Icon=/MyIcons/trello.png
StartupNotify=true
Terminal=false
Name=Trello
StartupWMClass=trello

相关内容