在 Natty 的 Unity 启动器中启动 Java 程序(如 IntelliJ IDEA 和 Crashplan)时,会显示重复的图标(见图)。对于 IntelliJ,我创建了 .desktop 文件,对于 Crashplan,.desktop 文件随应用程序提供。是否可以在 .desktop 文件(或其他地方)中更改某些内容以防止发生这种情况?我找不到 Unity 本身的错误报告,但 Gnome-Do/Docky 等程序有漏洞 报告并且必须对其应用程序进行内部更改以防止这种情况发生。
在此图中,第一个图标是从 .desktop 文件创建的图标,第二个图标是启动后创建的图标。关闭应用程序时,第二个图标会消失。
自定义 IntelliJ .desktop 文件
#!/usr/bin/env xdg-open
[Desktop Entry]
Version=1.0
Type=Application
Terminal=false
Icon[en_US]=/opt/idea/bin/idea128.png
Name[en_US]=IntelliJ IDEA
Exec=/opt/idea/bin/idea.sh
Name=IntelliJ IDEA
Icon=/opt/idea/bin/idea128.png
StartupNotify=true
Crashplan 提供 .desktop 文件
[Desktop Entry]
Version=1.0
Encoding=UTF-8
Name=CrashPlan
Categories=;
Comment=CrashPlan Desktop UI
Comment[en_CA]=CrashPlan Desktop UI
Exec=/usr/local/crashplan/bin/CrashPlanDesktop
Icon=/usr/local/crashplan/skin/icon_app_64x64.png
Hidden=false
Terminal=false
Type=Application
GenericName[en_CA]=
答案1
添加启动WMClass字符串放入你的 .desktop 文件中。使用xprop
命令获取此类。例如:
$ xprop|grep WM_CLASS
WM_CLASS(STRING) = "sun-awt-X11-XFramePeer", "java-lang-Thread"
$ cat /usr/share/applications/PHPStorm.desktop | grep StartupWM
StartupWMClass=sun-awt-X11-XFramePeer
更多详情这线程(关于 AWN,但也适用于 Unity)
答案2
对于 Ubuntu 11.10 下的 Intellij Idea 11,需要在 idea 的 .desktop 文件中添加以下行:
StartupWMClass=jetbrains-idea
答案3
我可以为 SQLDeveloper(一个 Java 程序)修复此问题:
使用 xprop(然后单击 SQLDeveloper 窗口),我发现以下输出行:
WM_CLASS(STRING) = "sun-awt-X11-XFramePeer", "oracle-ide-boot-Launcher"
根据上述评论以及https://bugs.launchpad.net/unity/+bug/757991,我在本地 sqldeveloper.desktop 文件中添加了以下行:
StartupWMClass=oracle-ide-boot-Launcher
答案4
IntelliJ IDEA 由脚本 ($IDEA_HOME/bin/idea.sh) 启动。单击其启动器时,将执行该脚本,启动一个 Java 可执行文件并立即退出。Unity 注意到您启动的应用程序(脚本)已经退出 - 这就是第一个 IDEA 图标上没有指示器的原因。但是,目前还有另一个(来自启动器启动的可执行文件)应用程序正在运行 - 这就是显示第二个 IDEA 图标的原因。
我希望能尽快修复此问题 - 但这不是一件容易的事情。它必须涉及手动维护的列表关联,以关联应关联的窗口和启动器。