Comment puis-je supprimer les icônes en double pour les programmes Java "lancés" dans le lanceur?

45

Lors du lancement de programmes Java (tels que IntelliJ IDEA et Crashplan) dans le lanceur Unity de Natty, des icônes en double sont affichées (voir l'image). Pour IntelliJ, j'ai créé le fichier .desktop. Pour Crashplan, le fichier .desktop est fourni avec l'application. Y a-t-il quelque chose qui peut être modifié dans les fichiers .desktop (ou ailleurs) qui peut empêcher cela de se produire? Je ne pouvais pas trouver de rapport de bogue pour l'unité elle-même, mais des programmes tels que Gnome-Do / Docky ont des rapports de bogues et ont dû apporter des modifications internes à leurs applications pour empêcher cela.

Icônes en doubleDans cette image, la première icône est celle créée à partir du fichier .desktop et la deuxième après son lancement. La seconde icône disparaît lors de la fermeture de l'application.

Fichier IntelliJ .desktop personnalisé

#!/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 fournit un fichier .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]=
Tim
la source
1
Je rencontre un problème similaire lors du lancement de Minecraft dans Unity
Marco Ceppi
2
Merci mon Dieu, le problème touche les utilisateurs grand public (auparavant, il ne concernait que AWN et les autres amateurs de dock), enfin. J'espère que les développeurs d'applications Java (et pas seulement Java) envisageront de résoudre ce problème maintenant. En passant, Eclipse ne semble pas avoir un tel problème, alors que je n’ai jamais réussi à résoudre ce problème pour MySQL Workbench et OpenOffice.org (essayé lorsque j’utilisais AWN, avant l’émergence de LibreOffice).
Ivan
Le problème concerne les applications qui doivent utiliser des noms WM_CLASS stupides et non identifiants, pour autant que je m'en souvienne.
Ivan
S'il n'y avait pas un tel problème, j'utiliserais certainement Unity ou AWN. Mais dans la mesure où toutes les applications ne les supportent pas parfaitement, je préfère une barre de tâches traditionnelle (parce que je déteste les demi-solutions).
Ivan

Réponses:

47

Ajoutez une chaîne StartupWMClass dans votre fichier .desktop. Utilisez la xpropcommande pour obtenir cette classe. Par exemple :

$ 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

Plus de détails dans ce fil (ceci concerne AWN, mais fonctionne également pour Unity)

451F
la source
1
Cela fonctionne très bien pour Crashplan StartupWMClass=CrashPlanmais IntelliJ avait besoin d’un peu plus de conviction. Je devais utiliser les informations de cela ( blog.jteam.nl/2011/01/09/… ) pour que cela fonctionne correctement.
Tim
Un petit aparté pour mettre à jour IntelliJ, j’ai modifié le script idea.vmoptions et non le script idea.sh directement. Ajouter -javaagent:agent.jar=IntelliJ_IDEAau fichier.
Tim
1
Avec IntelliJ 11, le fichier agent.jar n’est plus nécessaire. StartupWMClass = jetbrains-idea
Tim
Et jetbrains-idea-cepour l'édition communautaire. PS, merci beaucoup Tim, 451F.
Synesso
2
@ Ivan: vous n'êtes pas obligé d'utiliser les deux, vous pouvez utiliser l' un ou l' autre. Donc, si jetbrains-ideaest l'unique, celui que vous voulez, utilisez-le au lieu desun-awt-X11-XFramePeer
MestreLion
9

Pour Intellij Idea 11 sous Ubuntu 11.10, il est nécessaire d’ajouter à la ligne suivante du fichier .desktop de l’idée:

StartupWMClass=jetbrains-idea
topr
la source
4

J'ai pu résoudre ce problème pour SQLDeveloper, un programme java:

En utilisant xprop (puis en cliquant sur la fenêtre SQLDeveloper), j'ai trouvé la ligne de sortie suivante:

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

Sur la base des commentaires trouvés ci-dessus et dans https://bugs.launchpad.net/unity/+bug/757991 , j'ai ajouté la ligne suivante à mon fichier sqldeveloper.desktop local:

StartupWMClass=oracle-ide-boot-Launcher
Corey
la source
1
Dans SQLDeveloper version 4, WM_CLASS a été remplacé par "sun-awt-X11-XFramePeer", "oracle-ide-osgi-boot-OracleIdeLauncher", le paramètre .desktop doit donc être remplacé par: StartupWMClass = oracle-ide-osgi-boot-OracleIdeLauncher
Pisu
2

J'ai documenté le correctif pour Eclipse 4.x et 3.x ici .

Cette solution est pour glx-dock, alias Cairo-dock, mais fonctionne pour toutes les barres de tâches qui en dépendent WM_CLASS.

Dans le cas d’éclipse, le lancement est également un processus en deux étapes.

        entrez la description de l'image ici

En gros, vous devez identifier le plugin.xml de la marque Eclipse applicable à votre version d'Eclipse et modifier la application namepropriété. Lorsque la fenêtre principale du plan de travail est créée, Jface appelle le SWT Display.setNameet définit WM_CLASS. S'il s'agit du WM_CLASS déclaré pour votre programme de lancement, les instances en cours d'exécution trouveront leur programme de lancement du dock.

N'oubliez pas de le faire eclipse -cleanla première fois.

La tabulation est également beaucoup améliorée.

entrez la description de l'image ici

Effacer
la source
0

IntelliJ IDEA est lancé par un script ($ IDEA_HOME / bin / idea.sh). Lorsque le lanceur est cliqué, le script est exécuté, ce qui lance un exécutable java et se termine immédiatement. Unity remarque que l'application que vous avez démarrée (le script) est déjà terminée - c'est pourquoi il n'y a pas d'indicateur sur la première icône IDEA. Cependant, une autre application (à partir de l'exécutable démarré par le programme de lancement) est en cours d'exécution - c'est pourquoi la deuxième icône IDEA est affichée.

J'espère que la solution à ce problème sera bientôt mise en œuvre - mais ce n'est pas très simple. Il faudrait impliquer une liste maintenue à la main des associations entre les fenêtres et les lanceurs auxquels ils devraient être associés.

Weirdfellow
la source
0

Pour CrashPlan, vous pouvez essayer de déplacer votre fichier d'application CrashPlan.desktop vers / usr / share / applications. Seules les applications qui y résident peuvent être verrouillées dans le lanceur.

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

Ensuite, essayez d’utiliser le tiret pour exécuter CrashPlan.

Vous pourrez peut-être faire quelque chose de similaire avec IntelliJ IDEA, mais comme il exécute un script, je ne suis pas sûr que cela fonctionnera correctement.

idbrii
la source
J'ai les deux fichiers .desktop dans ~ / .local / share / applications et je n'ai aucun problème à les verrouiller dans le lanceur. Je suppose que vous parlez de disponible pour être lancé à partir de Launcher mais pas encore lancé quand vous dites verrouillé ...
Tim
Hm. Je ne suis pas capable de les placer dans le lanceur. J'ai fait le mien avec alacarte (éditeur de menu). C’est peut-être parce que mon ~ / .local est lié à un autre endroit ... Vos applications affichent-elles le triangle actif (côté gauche) et le triangle actif (côté droit)?
Idbrii
Pour la version "lancée" de l'icône, oui. Vous pouvez voir le triangle en cours d'exécution dans le premier coup. J'ai fait quelques recherches supplémentaires et je pense avoir une solution de contournement pour les icônes dupliquées. Publierai une réponse ici.
Tim
@ 451F m'a battu à la réponse, j'ai ajouté un peu à sa réponse dans mes commentaires sur la façon de faire mieux fonctionner IntelliJ.
Tim
0

Aucune des autres réponses n'a fonctionné pour moi, mais j'ai finalement trouvé une solution encore plus simple.

Ouvrez Intellij-Idea et, dans la barre supérieure, recherchez le menu déroulant des outils . Ensuite, sélectionnez le bouton Créer une entrée de bureau . Cela créera une entrée .desktop fonctionnant correctement dans votre .local/share/applicationsdossier, qui devrait être reconnue par l’environnement de bureau que vous utilisez. Cela ne crée pas une icône en double et vous pouvez même changer l'icône si vous le souhaitez.

Malheureusement, utiliser l' nosplashargument ramène le problème de l'icône de duplication, donc je ne sais pas comment résoudre ce problème.

Rusins
la source
0

Après l'installation d'IntelliJ IDEA 2017.2.5 sous Ubuntu 17.04 (avec les icônes Numix), j'ai dû modifier la ligne StartupWMClass=jetbrains-ideaen StartupWMClass=jetbrains-idea-cedans le fichier .desktop du programme afin que l'icône en double disparaisse.

J'imagine que "ce" correspond à Community Edition que j'ai, alors je ne sais pas pourquoi la valeur de cette propriété dans le fichier .desktop n'avait pas à l'origine le suffixe "ce".

à M
la source