Wie kann ich doppelte Symbole für "gestartete" Java-Programme im Launcher entfernen?

45

Beim Starten von Java-Programmen (wie IntelliJ IDEA und Crashplan) im Unity-Launcher von Natty werden doppelte Symbole angezeigt (siehe Abbildung). Für IntelliJ habe ich die .desktop-Datei erstellt, für Crashplan wird die .desktop-Datei mit der Anwendung geliefert. Gibt es etwas, das in den .desktop-Dateien (oder anderswo) geändert werden kann, um dies zu verhindern? Ich konnte nicht einen Fehlerbericht für die Einheit selbst , sondern Programme wie Gnome-Do / Docky haben finden Bug Berichte und interne Änderungen an ihren Anwendungen machen musste , dies zu verhindern.

Doppelte SymboleIn diesem Bild ist das erste Symbol das aus der .desktop-Datei erstellte und das zweite Symbol nach dem Start. Das zweite Symbol verschwindet beim Schließen der Anwendung.

Benutzerdefinierte IntelliJ .desktop-Datei

#!/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 bieten .desktop-Datei

[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]=
Tim
quelle
1
Ich habe ein ähnliches Problem beim Starten von Minecraft in Unity
Marco Ceppi
2
Gott sei Dank wird das Problem die Mainstream-Benutzer betreffen (es war früher nur ein Problem für AWN und andere Dock-Enthusiasten). Ich hoffe, dass Java (und nicht nur Java) -Anwendungsentwickler dies jetzt beheben können. Übrigens, Eclipse scheint kein solches Problem zu haben, obwohl ich es noch nie geschafft habe, dieses Problem für MySQL Workbench und OpenOffice.org zu beheben (versucht, als ich AWN verwendete, bevor LibreOffice aufgetaucht ist).
Ivan
Das Problem betrifft Anwendungen, die dumme, nicht identifizierende WM_CLASS-Namen verwenden, soweit ich mich erinnern kann.
Ivan
Wenn es kein solches Problem gäbe, würde ich mit Sicherheit Unity oder AWN verwenden. Aber soweit nicht jede Anwendung sie perfekt unterstützt, bevorzuge ich eine traditionelle Taskleiste (weil ich halbe Lösungen hasse).
Ivan

Antworten:

47

Fügen Sie Ihrer .desktop-Datei eine StartupWMClass- Zeichenfolge hinzu. Verwenden Sie den xpropBefehl, um diese Klasse abzurufen. Beispielsweise :

$ 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

Weitere Details in diesem Thread (dies betrifft AWN, funktioniert aber auch für Unity)

451F
quelle
1
Dies funktioniert gut für Crashplan, StartupWMClass=CrashPlanaber IntelliJ brauchte ein bisschen mehr Überzeugungsarbeit. Ich musste Informationen von diesem ( blog.jteam.nl/2011/01/09/… ) verwenden, um es richtig zum Laufen zu bringen.
Tim
Neben dem Update von IntelliJ habe ich das idea.vmoptions-Skript und nicht das idea.sh-Skript direkt geändert. In -javaagent:agent.jar=IntelliJ_IDEAauf die Datei.
Tim
1
Mit IntelliJ 11 ist die Datei agent.jar nicht mehr erforderlich. StartupWMClass = Jetbrains-Idee
Tim
Und jetbrains-idea-cefür die Community Edition. PS, vielen Dank Tim, 451F.
Synesso
2
@Ivan: Sie müssen beide nicht verwenden, können Sie entweder ein. Wenn jetbrains-ideaes sich also um das Einzigartige handelt, das Sie möchten, verwenden Sie es anstelle vonsun-awt-X11-XFramePeer
MestreLion
9

Für Intellij Idea 11 unter Ubuntu 11.10 muss in der .desktop-Datei der Idee folgende Zeile hinzugefügt werden:

StartupWMClass=jetbrains-idea
topr
quelle
4

Ich konnte dieses Problem für SQLDeveloper beheben, bei dem es sich um ein Java-Programm handelt:

Mit xprop (und anschließendem Klicken auf das SQLDeveloper-Fenster) habe ich die folgende Ausgabezeile gefunden:

WM_CLASS(STRING) = "sun-awt-X11-XFramePeer", "oracle-ide-boot-Launcher"

Basierend auf den obigen Kommentaren und in https://bugs.launchpad.net/unity/+bug/757991 habe ich meiner lokalen Datei sqldeveloper.desktop die folgende Zeile hinzugefügt:

StartupWMClass=oracle-ide-boot-Launcher
Corey
quelle
1
In SQLDeveloper Version 4 wurde WM_CLASS in "sun-awt-X11-XFramePeer", "oracle-ide-osgi-boot-OracleIdeLauncher" geändert. Der Parameter .desktop sollte daher geändert werden in: StartupWMClass = oracle-ide-osgi-boot-OracleIdeLauncher
Pisu
2

Ich habe das Update für Eclipse 4.x und 3.x hier dokumentiert .

Diese Lösung ist für glx-dock, auch bekannt als Cairo-dock, aber funktioniert für alle Taskleisten, die darauf angewiesen sind WM_CLASS.

Im Falle von Eclipse ist der Start ebenfalls ein zweistufiger Prozess.

        Bildbeschreibung hier eingeben

Grundsätzlich müssen Sie die für Ihre Eclipse-Version zutreffende Eclipse-Branding-Datei plugin.xml identifizieren und die application nameEigenschaft ändern . Wenn das Hauptfenster der Workbench erstellt wird, ruft Jface die SWT auf Display.setNameund dies setzt Sie auf WM_CLASS. Wenn dies die deklarierte WM_CLASS für Ihren Launcher ist, finden laufende Instanzen ihren Dock-Launcher.

Vergiss nicht, es eclipse -cleanbeim ersten Mal zu tun .

Das Durchblättern wurde ebenfalls stark verbessert.

Bildbeschreibung hier eingeben

Löschen
quelle
0

IntelliJ IDEA wird von einem Skript gestartet ($ IDEA_HOME / bin / idea.sh). Wenn der Starter angeklickt wird, wird das Skript ausgeführt, das eine ausführbare Java-Datei startet und sofort beendet. Unity stellt fest, dass die von Ihnen gestartete Anwendung (das Skript) bereits beendet wurde. Daher ist auf dem ersten IDEA-Symbol keine Anzeige zu sehen. Es gibt jedoch eine andere Anwendung (von der vom Launcher gestarteten ausführbaren Datei), die derzeit ausgeführt wird. Aus diesem Grund wird das zweite IDEA-Symbol angezeigt.

Ich hoffe, dass das Update für dieses Verhalten bald implementiert wird - aber es ist nicht sehr einfach. Es müsste eine von Hand gepflegte Listenzuordnung zwischen Fenstern und Startern geben, denen sie zugeordnet werden sollten.

Seltsamer Kerl
quelle
0

Bei CrashPlan können Sie versuchen, die App-Datei CrashPlan.desktop nach / usr / share / applications zu verschieben. Nur Apps, die dort leben, können im Launcher gesperrt werden.

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

Verwenden Sie dann den Bindestrich, um CrashPlan auszuführen.

Möglicherweise können Sie mit IntelliJ IDEA etwas Ähnliches tun. Da jedoch ein Skript ausgeführt wird, bin ich mir nicht sicher, ob es ordnungsgemäß funktioniert.

idbrii
quelle
Ich habe beide .desktop-Dateien in ~ / .local / share / applications und habe keine Probleme damit, sie für den Launcher zu sperren. Ich gehe davon aus, dass Sie verfügbar sind, um von Launcher gestartet zu werden, aber noch nicht gestartet sind, wenn Sie sagen, gesperrt ...
Tim
Hm. Ich kann sie nicht im Launcher ablegen. Ich habe meine mit alacarte (Menu Editor) gemacht. Vielleicht liegt es daran, dass ich ~ / .local mit einer anderen Stelle verknüpft habe ... Zeigen Ihre Apps das laufende Dreieck (linke Seite) und das aktive Dreieck (rechte Seite) an?
idbrii
Ja, für die "gestartete" Version des Symbols. Sie können das laufende Dreieck im ersten Schuss sehen. Ich habe noch ein paar Nachforschungen angestellt und denke, ich habe eine funktionierende Problemumgehung für die doppelten Symbole. Werde hier eine Antwort posten.
Tim
@ 451F hat mich auf die Antwort geschlagen, ich habe seiner Antwort in meinen Kommentaren etwas hinzugefügt, wie man IntelliJ dazu bringt, besser zu arbeiten.
Tim
0

Keine der anderen Antworten funktionierte für mich, aber am Ende fand ich tatsächlich eine noch einfachere Lösung.

Öffnen Sie Intellij-Idea und finden Sie in der oberen Leiste das Dropdown-Menü Tools . Wählen Sie dann die Schaltfläche Create Desktop Entry . Es wird ein ordnungsgemäß funktionierender .local/share/applicationsDesktop- Eintrag in Ihrem Ordner erstellt, der von der verwendeten Desktop-Umgebung erkannt werden sollte. Es wird kein doppeltes Symbol erstellt, und Sie können das Symbol sogar ändern, wenn Sie möchten.

Leider nosplashbringt die Verwendung des Arguments das Problem mit doppelten Symbolen zurück, sodass ich nicht sicher bin, wie ich das beheben soll.

Rusins
quelle
0

IntelliJ IDEA 2017.02.05 unter Ubuntu 17.04 (mit Numix Icons) Nach der Installation hatte ich die Linie zu ändern , StartupWMClass=jetbrains-ideaum StartupWMClass=jetbrains-idea-cein dem Programm der .desktop - Datei , so dass das doppelte Symbol verschwinden würde.

Ich vermute, "ce" steht für die Community Edition, die ich besitze, daher weiß ich nicht, warum der Wert dieser Eigenschaft in der .desktop-Datei ursprünglich nicht das Suffix "ce" hatte.

tom
quelle