Como posso remover ícones duplicados de programas java “lançados” no launcher?

45

Ao lançar programas java (como IntelliJ IDEA e Crashplan) no iniciador Unity do Natty, ícones duplicados são mostrados (veja imagem). Para o IntelliJ eu 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 possa impedir que isso ocorra? Eu não consegui encontrar um relatório de bug para a unidade em si, mas programas como o Gnome-Do / Docky têm bug relatórios e tiveram que fazer alterações internas em seus aplicativos para evitar isso.

Nesta imagem, o primeiro ícone é aquele criado a partir do arquivo .desktop e o segundo ícone após o lançamento. O segundo ícone desaparece ao fechar o aplicativo.

Arquivo personalizado do IntelliJ .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 fornece o 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]=
    
por Tim 22.04.2011 / 15:59

8 respostas

46

Adicione uma string StartupWMClass ao seu arquivo .desktop. Use o comando xprop para obter essa 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 no este tópico (sobre a AWN, mas também para a Unity)

    
por 451F 05.05.2011 / 14:35
8

Para o Intellij Idea 11 no Ubuntu 11.10 é necessário adicionar na seguinte linha do arquivo .desktop da idéia:

StartupWMClass=jetbrains-idea
    
por topr 17.12.2011 / 15:19
3

Consegui corrigir isso para o SQLDeveloper, que é um programa em java:

Usando xprop (e, em seguida, 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 no link , adicionei a seguinte linha ao meu sqldeveloper local. arquivo da área de trabalho:

StartupWMClass=oracle-ide-boot-Launcher
    
por Corey 30.11.2011 / 18:20
1

Eu 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 de WM_CLASS .

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

Basicamente,oquevocêprecisafazeréidentificaroplugin.xmldamarcaEclipseaplicávelàsuaversãodoEclipseemodificarapropriedadeapplicationname.Quandoasjanelasprincipaisdoambientedetrabalhosãocriadas,oJfacechamaráoSWTDisplay.setNameeissodefinirávocêWM_CLASS.SeesteforodeclaradoWM_CLASSparaoseulançador,asinstânciasemexecuçãoencontrarãooseulançadordeencaixe.

Nãoseesqueçadefazereclipse-cleannaprimeiravez.

Tabulaçãotambémémuitomelhorada.

    
por Delete 30.05.2013 / 08:37
0

IntelliJ IDEA é iniciado por um script ($ IDEA_HOME / bin / idea.sh). Quando seu ativador é clicado, o script é executado, o 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á nenhum indicador no primeiro ícone do IDEA. No entanto, há um outro aplicativo (a partir do executável iniciado pelo lançador) em execução no momento - e é por isso que o segundo ícone IDEA é mostrado.

Espero que a correção para esse comportamento seja implementada em breve - mas não é muito simples. Teria que envolver associações de listas mantidas à mão entre as janelas e os lançadores aos quais elas deveriam estar associadas.

    
por Weirdfellow 02.05.2011 / 12:08
0

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

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 sei se ele funcionará corretamente.

    
por idbrii 04.05.2011 / 02:06
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 de área de trabalho . Ele criará uma entrada .desktop funcionando corretamente na sua pasta .local/share/applications , que deve ser reconhecida pelo ambiente de área de trabalho que você está usando. Não faz um ícone duplicado, e você pode até mudar o ícone se você quiser.

Infelizmente, usar o argumento nosplash traz de volta o problema do ícone duplicado, então não sei como consertar isso.

    
por rusins 17.03.2016 / 17:25
0

Depois de instalar o IntelliJ IDEA 2017.2.5 no Ubuntu 17.04 (com ícones Numix), tive que alterar a linha StartupWMClass=jetbrains-idea para StartupWMClass=jetbrains-idea-ce no arquivo .desktop do programa para que o ícone duplicado desaparecesse.

Eu acho que "ce" significa Community Edition que eu tenho, então eu não sei porque o valor dessa propriedade no arquivo .desktop originalmente não tinha o sufixo "ce".

    
por tom 19.10.2017 / 11:27