Lors du lancement des 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 changé 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 comme Gnome-Do/Docky ont boguerapports et ont dû apporter des modifications internes à leurs applications pour empêcher cela.
Dans 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]=
Ajoutez une chaîne StartupWMClass dans votre fichier .desktop. Utilisez la commande xprop
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 this thread (ceci concerne AWN, mais fonctionne également pour Unity)
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
J'ai pu résoudre ce problème pour SQLDeveloper, qui est 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
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 reposant sur WM_CLASS
.
Dans le cas d'Eclipse, le lancement est également un processus en deux étapes.
En gros, vous devez identifier le plugin.xml de la marque Eclipse applicable à votre version d'Eclipse et modifier la propriété application name
. Lorsque la fenêtre principale du plan de travail est créée, Jface appelle le SWT Display.setName
et 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 dans le dock.
N'oubliez pas de faire Eclipse -clean
la première fois.
La tabulation est également beaucoup améliorée.
Après avoir installé IntelliJ IDEA 2017.2.5 sous Ubuntu 17.04 (avec les icônes Numix), je devais changer la ligne StartupWMClass=jetbrains-idea
en StartupWMClass=jetbrains-idea-ce
dans le fichier .desktop du programme pour 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".
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 outils. Ensuite, sélectionnez le bouton Créer une entrée de burea. Cela créera une entrée .desktop fonctionnant correctement dans votre dossier .local/share/applications
, 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, l'utilisation de l'argument nosplash
ramène le problème de l'icône de duplication, je ne sais donc pas comment résoudre ce problème.
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 sais pas s'il fonctionnera correctement.
IntelliJ IDEA est lancé par un script ($ IDEA_HOME/bin/idea.sh). Lorsque le lanceur est cliqué, le script est exécuté. Il lance un exécutable Java et se ferme 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 - et 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. Cela devrait impliquer une liste maintenue à la main des associations entre les fenêtres et les lanceurs auxquels ils devraient être associés.