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


45

在Natty的Unity启动器中启动Java程序(如IntelliJ IDEA和Crashplan)时,将显示重复的图标(参见图片)。对于IntelliJ,我创建了.desktop文件,对于Crashplan,该.desktop文件随应用程序一起提供。.desktop文件(或其他位置)中是否可以进行某些更改以防止这种情况发生?我找不到统一的错误报告,但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
我在Unity中启动Minecraft时遇到了类似的问题
Marco Ceppi

2
谢谢上帝,这个问题最终影响到了主流用户(这以前只是AWN和其他基座发烧友的问题)。我希望Java(不仅是Java)应用程序开发人员现在可以考虑解决此问题。顺便说一下,Eclipse似乎没有这个问题,尽管我从未设法为MySQL Workbench和OpenOffice.org修复此问题(在LibreOffice出现之前,我在使用AWN时曾尝试过)。
伊万

据我所知,问题在于应用程序使用愚蠢的WM_CLASS名称。
伊万

如果没有这样的问题,我肯定会使用Unity或AWN。但是,由于并非每个应用程序都能完美地支持它们,所以我更喜欢传统的任务栏(因为我讨厌半解决方案)。
伊万

Answers:


47

将一个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

线程中有更多故障(这与AWN有关,但也适用于Unity)


1
这对于Crashplan非常有效,StartupWMClass=CrashPlan但是IntelliJ需要更多说服力。我必须使用此信息(blog.jteam.nl/2011/01/09/…)才能使其正常工作。
蒂姆(Tim)

除了更新IntelliJ之外,我还直接修改了idea.vmoptions而不是idea.sh脚本。添加-javaagent:agent.jar=IntelliJ_IDEA到文件。
蒂姆

1
使用IntelliJ 11,不再需要agent.jar。StartupWMClass = jetbrains-idea
Tim

jetbrains-idea-ce对于社区版。PS,谢谢一堆Tim,451F。
Synesso 2012年

2
@Ivan:您不必同时使用两者,您可以使用其中之一。所以,如果jetbrains-idea是唯一的,你想要的,用它来代替sun-awt-X11-XFramePeer
MestreLion

9

对于Ubuntu 11.10下的Intellij Idea 11,必须在该创意的.desktop文件中添加以下行:

StartupWMClass=jetbrains-idea

4

我能够通过Java程序SQLDeveloper修复此问题:

使用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

1
在SQLDeveloper版本4中,WM_CLASS更改为“ sun-awt-X11-XFramePeer”,“ oracle-ide-osgi-boot-OracleIdeLauncher”,因此.desktop参数应更改为:StartupWMClass = oracle-ide-osgi-boot-OracleIdeLauncher
Pisu 2014年

2

我已经在此处记录了Eclipse 4.x和3.x的修复程序。

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

在日食的情况下,发射也是一个两步过程。

        在此处输入图片说明

基本上,您需要做的是确定适用于您的Eclipse版本的Eclipse品牌标记plugin.xml并修改该application name属性。创建工作台主窗口后,Jface将调用SWT Display.setName,这将为您设置WM_CLASS。如果这是您的启动器声明的WM_CLASS,则正在运行的实例将找到其坞站启动器。

不要忘记eclipse -clean第一次做。

制表符也大大改善了。

在此处输入图片说明


0

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

我希望此行为的修复将很快实施-但这不是一个非常简单的方法。它必须包含窗口和应该与其关联的启动器之间的手动维护列表关联。


0

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

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

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

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


我在〜/ .local / share / applications中都有两个.desktop文件,并且没有任何问题将它们锁定到启动器。我假设您的意思是可以从启动器启动,但是当您说锁定时尚未启动……
蒂姆,

嗯 我无法将它们放在启动器中。我用alacarte(菜单编辑器)制作了我的。也许是因为我有〜/ .local链接到其他地方...您的应用是否显示正在运行的三角形(左侧)和活动的三角形(右侧)?
idbrii 2011年

对于图标的“启动”版本,是。您可以在第一张照片中看到正在运行的三角形。我做了一些进一步的研究,认为我对重复的图标有一个解决方法。将在这里发布答案。
蒂姆(Tim)

@ 451F击败了我,我在关于如何使IntelliJ更好地工作的评论中添加了一些内容。
蒂姆(Tim)

0

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

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

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


0

在Ubuntu 17.04下安装IntelliJ IDEA 2017.2.5(带有Numix图标)后,我不得不在程序的.desktop文件中将该行更改StartupWMClass=jetbrains-ideaStartupWMClass=jetbrains-idea-ce,以便重复的图标消失。

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.