Como remover ícones duplicados para programas java "iniciados" no iniciador?

45

Ao iniciar programas java (como IntelliJ IDEA e Crashplan) no iniciador do Natty's Unity, são exibidos ícones duplicados (veja a imagem). Para o IntelliJ, criei o arquivo .desktop, para o Crashplan, o arquivo .desktop é fornecido com o aplicativo. Existe algo que pode ser alterado nos arquivos .desktop (ou em outro lugar) que pode impedir que isso ocorra? Não consegui encontrar um relatório de erro para a própria unidade, mas programas como o Gnome-Do / Docky têm relatórios de erros e tiveram que fazer alterações internas em seus aplicativos para evitar isso.

Ícones duplicadosNesta imagem, o 1º ícone é aquele criado a partir do arquivo .desktop e o segundo ícone é depois de iniciá-lo. O segundo ícone desaparece ao fechar o aplicativo.

Arquivo .desktop personalizado do IntelliJ

#!/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 fornece arquivo .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
fonte
1
Eu experimentar um problema semelhante ao lançar Minecraft em Unity
Marco Ceppi
2
Graças a Deus o problema está afetando os usuários comuns (costumava ser um problema apenas para o AWN e outros entusiastas do dock) finalmente. Espero que os desenvolvedores de aplicativos Java (e não apenas Java) considere consertar isso agora. A propósito, o Eclipse parece não ter esse problema, embora nunca tenha conseguido corrigir isso no MySQL Workbench e no OpenOffice.org (tentei quando estava usando o AWN, antes do surgimento do LibreOffice).
Ivan
O problema é que os aplicativos usam nomes estúpidos de WM_CLASS que não identificam, tanto quanto me lembro.
Ivan
Se não houvesse esse problema, certamente usaria o Unity ou o AWN. Mas, na medida em que nem todos os aplicativos os suportam perfeitamente, prefiro uma barra de tarefas tradicional (porque odeio meias soluções).
Ivan

Respostas:

47

Adicione uma seqüência de caracteres StartupWMClass ao arquivo .desktop. Use o xpropcomando para obter esta classe. Por exemplo :

$ 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

Mais detalhes neste tópico (sobre o AWN, mas também funciona para o Unity)

451F
fonte
1
Isso funciona muito bem para o Crashplan, StartupWMClass=CrashPlanmas o IntelliJ precisava de um pouco mais de convencimento. Eu tive que usar informações deste ( blog.jteam.nl/2011/01/09/… ) para fazê-lo funcionar corretamente.
Tim
Como um pequeno aparte para atualizar o IntelliJ, modifiquei o script idea.vmoptions e não o script idea.sh diretamente. Adicione -javaagent:agent.jar=IntelliJ_IDEAao arquivo
Tim
1
Com o IntelliJ 11, o agent.jar não é mais necessário. StartupWMClass = jetbrains-idea
Tim
E jetbrains-idea-cepara a Community Edition. PS, muito obrigado Tim, 451F.
Synesso
2
@ Ivan: você não precisa usar os dois, você pode usar qualquer um. Então, se jetbrains-ideaé o único, o que você deseja, use-o em vez desun-awt-X11-XFramePeer
MestreLion 30/06/12
9

Para o Intellij Idea 11 no Ubuntu 11.10, é necessário adicionar no arquivo .desktop da ideia a seguinte linha:

StartupWMClass=jetbrains-idea
topr
fonte
4

Consegui consertar isso no SQLDeveloper, que é um programa java:

Usando xprop (e clicando na janela SQLDeveloper), encontrei a seguinte linha de saída:

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

Com base nos comentários encontrados acima e em https://bugs.launchpad.net/unity/+bug/757991 , adicionei a seguinte linha ao meu arquivo sqldeveloper.desktop local:

StartupWMClass=oracle-ide-boot-Launcher
Corey
fonte
1
No SQLDeveloper versão 4, o WM_CLASS foi alterado para "sun-awt-X11-XFramePeer", "oracle-ide-osgi-boot-OracleIdeLauncher", portanto, o parâmetro .desktop deve ser alterado para: StartupWMClass = oracle-ide-osgi-boot-OracleIdeLauncher
Pisu
2

Documentei a correção para o Eclipse 4.xe 3.x aqui .

Esta solução é para o glx-dock, também conhecido como Cairo-dock, mas funciona para todas as barras de tarefas que dependem WM_CLASS.

No caso do eclipse, o lançamento também é um processo de duas etapas.

        insira a descrição da imagem aqui

Basicamente, o que você precisa fazer é identificar o plugin.xml de marca do Eclipse aplicável à sua versão do Eclipse e modificar a application namepropriedade. Quando a janela principal do ambiente de trabalho é criada, o Jface chama o SWT Display.setNamee isso define WM_CLASS. Se este for o WM_CLASS declarado para o iniciador, as instâncias em execução encontrarão o iniciador do dock.

Não se esqueça de fazer eclipse -cleanna primeira vez.

Tabular também é muito melhorado.

insira a descrição da imagem aqui

Excluir
fonte
0

O IntelliJ IDEA é iniciado por um script ($ IDEA_HOME / bin / idea.sh). Quando o iniciador é clicado, o script é executado, que inicia um executável java e sai imediatamente. O Unity percebe que o aplicativo que você iniciou (o script) já saiu - é por isso que não há indicador no primeiro ícone da IDEA. No entanto, há outro aplicativo (do executável iniciado pelo iniciador) em execução no momento - e é por isso que o segundo ícone do IDEA é exibido.

Espero que a correção desse comportamento seja implementada em breve - mas não é muito simples. Teria que envolver uma lista de associações mantidas à mão entre janelas e lançadores aos quais eles deveriam estar associados.

Weirdfellow
fonte
0

Para o CrashPlan, você pode tentar mover o arquivo de aplicativo CrashPlan.desktop para / usr / share / applications. Somente aplicativos que moram lá podem ser bloqueados no iniciador.

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

Em seguida, tente usar o traço para executar o CrashPlan.

Você pode fazer algo semelhante com o IntelliJ IDEA, mas como ele está executando um script, não tenho certeza se ele funcionará corretamente.

idbrii
fonte
Eu tenho os dois arquivos .desktop em ~ / .local / share / applications e não tenho nenhum problema em travá-los no iniciador. Estou assumindo que você quer dizer disponível para ser iniciado a partir Lançador mas ainda não iniciado quando você diz trancada ...
Tim
Hum. Não consigo colocá-los no iniciador. Fiz o meu com o alacarte (Editor de menus). Talvez seja porque eu tenha ~ / .local vinculado a outro lugar ... Seus aplicativos mostram o triângulo em execução (lado esquerdo) e o triângulo ativo (lado direito)?
Idbrii 5/05
Para a versão "iniciada" do ícone, sim. Você pode ver o triângulo de corrida no primeiro tiro. Pesquisei um pouco mais e acho que tenho uma solução alternativa para os ícones duplicados. Irá postar uma resposta aqui.
Tim
O @ 451F me venceu na resposta, adicionei um pouco à resposta dele nos meus comentários sobre como fazer o IntelliJ funcionar melhor.
Tim
0

Nenhuma das outras respostas funcionou para mim, mas no final encontrei uma solução ainda mais simples.

Abra o Intellij-Idea e, na barra superior, encontre o menu suspenso Ferramentas . Em seguida, selecione o botão Criar entrada da área de trabalho . Ele criará uma entrada .desktop funcionando corretamente em sua .local/share/applicationspasta, que deve ser reconhecida por qualquer ambiente de área de trabalho que você esteja usando. Ele não cria um ícone duplicado e você pode até mudar o ícone, se quiser.

Infelizmente, o uso do nosplashargumento traz de volta o problema do ícone duplicado, por isso não tenho certeza de como consertar isso.

rusins
fonte
0

Depois de instalar o IntelliJ IDEA 2017/02/05 no Ubuntu 17.04 (com ícones Numix) eu tive que mudar a linha StartupWMClass=jetbrains-ideapara StartupWMClass=jetbrains-idea-ceem arquivo .desktop do programa para o ícone duplicado desapareceria.

Eu acho que "ce" significa Community Edition, então não sei por que o valor dessa propriedade no arquivo .desktop originalmente não estava com o sufixo "ce".

tom
fonte