如何在启动器中删除“已启动”java程序的重复图标?

在Natty的Unity启动器中启动java程序(如IntelliJ IDEA和Crashplan)时,会显示重复的图标(见图)。 对于IntelliJ,我创建了.desktop文件,对于Crashplan,.desktop文件随应用程序提供。 是否有可以在.desktop文件(或其他地方)中更改的内容可以防止这种情况发生? 我找不到团结本身的错误报告,但像Gnome-Do / Docky这样的程序有bug 报告 ,不得不对其应用程序进行内部更改以防止这种情况发生。

重复的图标 在此图像中,第一个图标是从.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]= 

StartupWMClass字符串添加到.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 

这个post中的更多deatils(关于AWN,但也适用于Unity)

对于Ubuntu 11.10下的Intellij Idea 11,必须在以下行添加想法的.desktop文件:

 StartupWMClass=jetbrains-idea 

我能够为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 

我在这里记录了Eclipse 4.x和3.x的修复程序。

此解决方案适用于glx-dock又名Cairo-dock,但适用于依赖WM_CLASS所有任务栏。

在eclipse的情况下,启动也是一个两步过程。

在此处输入图像描述

基本上,您需要做的是识别适用于您的Eclipse版本的Eclipse branding plugin.xml并修改application name属性。 创建工作台主窗口时,Jface将调用SWT Display.setName ,这将设置WM_CLASS。 如果这是您的启动器声明的WM_CLASS,那么运行实例将找到它们的底座启动器。

不要忘记第一次做eclipse -clean

通过标签也得到了很大改善。

在此处输入图像描述

IntelliJ IDEA由脚本($ IDEA_HOME / bin / idea.sh)启动。 单击其启动器后,将执行脚本,该脚本将启动java可执行文件并立即退出。 Unity注意到您启动的应用程序(脚本)已经退出 – 这就是为什么第一个IDEA图标上没有指示符的原因。 但是,此时还有另一个(从启动器启动的可执行文件)应用程序运行 – 这就是显示第二个IDEA图标的原因。

我希望很快就会实现对这种行为的修复 – 但这不是一个非常简单的方法。 它必须涉及他们应该关联的窗口和发射器之间的手动维护列表关联。

对于CrashPlan,您可以尝试将应用程序文件CrashPlan.desktop移动到/ usr / share / applications。 只有住在那里的应用才能锁定到启动器中。

 sudo mv ~/Desktop/CrashPlan.desktop /usr/share/applications/. 

然后尝试使用破折号运行CrashPlan。

您可以使用IntelliJ IDEA执行类似的操作,但由于它正在运行脚本,因此我不确定它是否能正常工作。

没有其他答案对我有用,但最后我实际上找到了一个更简单的解决方案。

打开Intellij-Idea,在顶部栏找到工具下拉菜单。 然后,选择“ 创建桌面条目”按钮。 它将在.local/share/applications文件夹中创建一个正常工作的.desktop条目,该条目应该被您正在使用的任何桌面环境识别。 它不会生成重复的图标,您甚至可以根据需要更改图标。

不幸的是,使用nosplash参数会带来重复的图标问题,因此我不确定如何解决这个问题。

在Ubuntu 17.04下安装IntelliJ IDEA 2017.2.5(带有Numix图标)后,我不得不在程序的.desktop文件StartupWMClass=jetbrains-idea更改为StartupWMClass=jetbrains-idea-ce ,这样重复的图标就会消失。

我猜“ce”代表我所拥有的Community Edition,所以我不知道为什么.desktop文件中这个属性的值最初没有“ce”后缀。