Come posso rimuovere le icone duplicate per i programmi Java "lanciati" nel programma di avvio?


45

Quando si lanciano programmi Java (come IntelliJ IDEA e Crashplan) nel programma di avvio di Natty Unity, vengono visualizzate icone duplicate (vedere l'immagine). Per IntelliJ ho creato il file .desktop, per Crashplan il file .desktop viene fornito con l'applicazione. C'è qualcosa che può essere cambiato nei file .desktop (o da qualche altra parte) che può impedire che ciò accada? Non sono riuscito a trovare una segnalazione di bug per l'unità stessa, ma programmi come Gnome-Do / Docky hanno segnalazioni di bug e hanno dovuto apportare modifiche interne alle loro applicazioni per evitarlo .

Icone duplicateIn questa immagine la prima icona è quella creata dal file .desktop e la seconda icona è dopo averlo lanciato. La seconda icona scompare quando si chiude l'applicazione.

File IntelliJ personalizzato .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 fornisce il file .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
Riscontro un problema simile quando lancio Minecraft in Unity
Marco Ceppi

2
Grazie a Dio il problema si ripercuote sugli utenti mainstream (in passato era un problema solo per AWN e altri appassionati di dock). Spero che gli sviluppatori di applicazioni Java (e non solo Java) prenderanno in considerazione di risolvere questo problema ora. A proposito, Eclipse sembra non avere questo problema, mentre non sono mai riuscito a risolvere questo problema per MySQL Workbench e OpenOffice.org (provato quando stavo usando AWN, prima che LibreOffice fosse emerso).
Ivan,

Il problema riguarda le applicazioni che usano i nomi stupidi di non identificazione di WM_CLASS per quanto posso ricordare.
Ivan,

Se non ci fosse un tale problema, utilizzerei sicuramente Unity o AWN. Ma poiché non tutte le applicazioni le supportano perfettamente, preferisco una barra delle applicazioni tradizionale (perché odio le mezze soluzioni).
Ivan,

Risposte:


47

Aggiungi una stringa StartupWMClass al tuo file .desktop. Utilizzare il xpropcomando per ottenere questa classe. Per esempio :

$ 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

Altri dettagli in questo thread (questo riguarda AWN, ma funziona anche per Unity)


1
Questo funziona alla grande per Crashplan StartupWMClass=CrashPlanma IntelliJ aveva bisogno di un po 'più convincente. Ho dovuto usare le informazioni da questo ( blog.jteam.nl/2011/01/09/… ) per farlo funzionare correttamente.
Tim

Come piccolo accorgimento per aggiornare IntelliJ ho modificato direttamente lo script idea.vmoptions e non lo script idea.sh. Aggiungi -javaagent:agent.jar=IntelliJ_IDEAal file.
Tim

1
Con IntelliJ 11 agent.jar non è più necessario. StartupWMClass = idea di jetbrains
Tim

E jetbrains-idea-ceper la Community Edition. PS, grazie un sacco Tim, 451F.
Synesso,

2
@Ivan: non è necessario utilizzare entrambi, è possibile utilizzare uno dei due . Quindi, se jetbrains-ideaè l'unico, quello che vuoi, sun-awt-X11-XFramePeer
usalo al

9

Per Intellij Idea 11 in Ubuntu 11.10 è necessario aggiungere alla seguente riga del file .desktop dell'idea:

StartupWMClass=jetbrains-idea

4

Sono stato in grado di risolvere questo problema per SQLDeveloper, che è un programma Java:

Usando xprop (e quindi facendo clic sulla finestra SQLDeveloper), ho trovato la seguente riga di output:

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

Sulla base dei commenti trovati sopra e in https://bugs.launchpad.net/unity/+bug/757991 , ho aggiunto la seguente riga al mio file sqldeveloper.desktop locale:

StartupWMClass=oracle-ide-boot-Launcher

1
In SQLDeveloper versione 4 WM_CLASS modificato in "sun-awt-X11-XFramePeer", "oracle-ide-osgi-boot-OracleIdeLauncher", quindi il parametro .desktop dovrebbe essere cambiato in: StartupWMClass = oracle-ide-osgi-boot-OracleIdeLauncher
Pisu,

2

Ho documentato la correzione per Eclipse 4.xe 3.x qui .

Questa soluzione è per glx-dock aka Cairo-dock ma funziona per tutte le barre delle applicazioni su cui si basano WM_CLASS.

Nel caso di eclissi, anche il lancio è un processo in due fasi.

        inserisci qui la descrizione dell'immagine

Fondamentalmente, ciò che devi fare è identificare il plugin.xml di branding Eclipse applicabile alla tua versione Eclipse e modificare la application nameproprietà. Quando viene creata la finestra principale del workbench, Jface chiamerà SWT Display.setNamee questo ti imposterà WM_CLASS. Se questo è il WM_CLASS dichiarato per il tuo launcher, le istanze in esecuzione troveranno il loro launcher dock.

Non dimenticare di farlo eclipse -cleanla prima volta.

Anche la tabulazione è molto migliorata.

inserisci qui la descrizione dell'immagine


0

IntelliJ IDEA è avviato da uno script ($ IDEA_HOME / bin / idea.sh). Quando si fa clic sul suo lanciatore, viene eseguito lo script, che avvia un eseguibile Java e termina immediatamente. Unity nota che l'applicazione che hai avviato (lo script) è già uscita - ecco perché non c'è alcun indicatore sulla prima icona IDEA. Tuttavia, al momento esiste un'altra applicazione (dall'eseguibile avviato dal programma di avvio), ed è per questo che viene mostrata la seconda icona IDEA.

Spero che la correzione per questo comportamento sarà presto implementata, ma non è molto semplice. Dovrebbe coinvolgere un elenco di associazioni gestite manualmente tra finestre e launcher a cui dovrebbero essere associati.


0

Per CrashPlan, puoi provare a spostare il file dell'app CrashPlan.desktop in / usr / share / applicazioni. Solo le app che vivono lì possono essere bloccate nel programma di avvio.

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

Quindi prova a utilizzare il trattino per eseguire CrashPlan.

Potresti essere in grado di fare qualcosa di simile con IntelliJ IDEA, ma dal momento che esegue uno script, non sono sicuro che funzionerà correttamente.


Ho entrambi i file .desktop in ~ / .local / share / applicazioni e non ho problemi a bloccarli nel programma di avvio. Suppongo che intendi disponibile per essere lanciato da Launcher ma non ancora lanciato quando dici bloccato ...
Tim

Hm. Non sono in grado di inserirli nel programma di avvio. Ho fatto il mio con alacarte (Menu Editor). Forse è perché ho ~ / .local collegato ad altrove ... Le tue app mostrano il triangolo in esecuzione (lato sinistro) e il triangolo attivo (lato destro)?
idbrii,

Per la versione "lanciata" dell'icona, sì. Puoi vedere il triangolo in esecuzione nel primo colpo. Ho fatto qualche ricerca in più e penso di avere una soluzione alternativa funzionante per le icone duplicate. Posta una risposta qui.
Tim

@ 451F mi ha battuto alla risposta, ho aggiunto un po 'alla sua risposta nei miei commenti su come far funzionare meglio IntelliJ.
Tim

0

Nessuna delle altre risposte ha funzionato per me, ma alla fine ho effettivamente trovato una soluzione ancora più semplice.

Apri Intellij-Idea e, nella barra superiore, trova il menu a discesa degli strumenti . Quindi, selezionare il pulsante Crea voce desktop . Creerà una voce .desktop correttamente funzionante nella tua .local/share/applicationscartella, che dovrebbe essere riconosciuta dall'ambiente desktop che stai utilizzando. Non crea un'icona duplicata e puoi anche cambiare l'icona se lo desideri.

Sfortunatamente, usare l' nosplashargomento riporta il problema con l'icona duplicata, quindi non sono sicuro di come risolverlo.


0

Dopo l'installazione di IntelliJ IDEA 2017/02/05 sotto Ubuntu 17.04 (con icone Numix) ho dovuto cambiare la linea StartupWMClass=jetbrains-ideaa StartupWMClass=jetbrains-idea-cenel file .desktop del programma quindi l'icona duplicato sarebbe scomparso.

Suppongo che "ce" sia l'acronimo di Community Edition che ho, quindi non so perché il valore di questa proprietà nel file .desktop in origine non avesse il suffisso "ce".

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.