Por que alguns aplicativos abertos aparecem como "pontos de interrogação" no iniciador do Unity?

22

Estou tendo um problema com alguns programas que possuem lançadores em unidade, mas depois criam um ícone separado após o lançamento. É possível que o iniciador rastreie as janelas que gera para organizar melhor? Ou isso é um bug no próprio Unity?

insira a descrição da imagem aqui

Pode não importar, mas esse programa específico é mono e o ícone gerado é listado como painel.

Andrew Redd
fonte
@ j-johan-edwards: Não tenho certeza de qual programa vincular, mas é o KeePass2 disponível no Centro de Software.
Andrew Redd
Em alguns casos, você pode aliviar este definindo a StartupWMClasspropriedade no lançador de desktop do aplicativo: askubuntu.com/questions/36434/...
Glutanimate

Respostas:

23

O que está acontecendo

Problemas como este estão relacionados à estrutura de correspondência de aplicativos do Unity. Para simplificar os detalhes técnicos, janelas e aplicativos de programas são duas coisas separadas para o Ubuntu. O Ubuntu precisa 'adivinhar' qual aplicativo possui uma janela específica. E às vezes esse palpite falha e um ponto de interrogação aparece no iniciador.

A falha pode ser devido a:

  1. Um erro no BAMF (a estrutura de correspondência de aplicativos mencionada acima).
  2. Uma descrição incorreta do aplicativo (também conhecido como arquivo '.desktop').
  3. A falta de qualquer descrição do aplicativo. Os executáveis ​​que iniciam janelas não possuem esses metadados.

O aplicativo mostrado na pergunta (KeePass2) sofre de um problema do tipo 1 que foi relatado ao rastreador de erros apropriado .

Exemplos de problemas

Os exemplos abaixo são técnicos, destinados a programadores que desejam que seu próprio aplicativo seja exibido corretamente no iniciador do Ubuntu.

Problema 3 - Nenhuma descrição do aplicativo

Para que um aplicativo se integre ao Unity - ou seja, seja pesquisável no Dash e colocado no iniciador - ele precisa ter uma entrada na área de trabalho. Essas entradas são colocados no /usr/share/applications/, /usr/local/share/applications/e $HOME/.local/share/applications/(os dois últimos sendo por software de terceiros, em todo o sistema e de utilizador somente respectivamente). Eles terminam com uma .desktopextensão e seguem este formato básico:

[Desktop Entry]
Type=Application
Name=My Application's Name
Icon=/file/path/of/my/icon
Exec=/file/path/of/my/executable

Esta entrada inicia um programa chamando o Execexecutável. Sempre que esse programa exibir uma janela ou caixa de diálogo, o Unity notará que seu executável "pertence" a esta descrição do aplicativo e usará o dado Namee Icono iniciador.

Este é um exemplo de barebones. A especificação formal abrange muitos recursos avançados.

Problema 2 - Descrição incorreta do aplicativo

Vamos supor que my_app.desktopexista em um diretório de aplicativo válido, mas:

  • /file/path/of/my/icon não existe no sistema de arquivos.
  • /file/path/of/my/icon não é uma imagem.
  • a entrada usa sintaxe incorreta ou tags inválidas.

Em qualquer um dos casos acima, o Ubuntu não conseguirá listar corretamente a janela do aplicativo no iniciador.

Problema 1 - Um bug no BAMF

No Ubuntu 11.10, o BAMF possui vários bugs que impedem a correspondência correta de aplicativos. As armadilhas comuns (temporárias) incluem:

  • O Execcaminho é um link simbólico em vez de um arquivo regular
  • O executável é um script que inicia o executável principal.

Nesses casos, os programadores não têm opção a não ser usar uma solução alternativa, como remover a abstração do link simbólico ou vincular diretamente ao executável. Nenhum deles é exigido pela própria especificação de entrada da área de trabalho.

Jjed
fonte
Mais uma coisa. Você pode ter .desktoparquivos para o mesmo aplicativo em ~/.local/share/applications/e /usr/share/applications/. O primeiro arquivo substitui o segundo, mesmo que o ícone não esteja especificado nele.
1

A janela pode ser correspondida apenas ao aplicativo se a propriedade WM_CLASS tiver sido definida. Para fazer isso no X11, você usa:

XSetClassHint( display, window, &class_hints );

Você precisa passar um ponteiro para uma estrutura XClassHint com os campos 'res_name' e 'res_class'.

Bram
fonte
-1

Eu tive alguns problemas com o 16.04, incluindo os ícones acinzentados e, às vezes, o touchpad ficava irregular (Acer V15 nitro) e o centro de software (talvez outros ícones também) não abria no ícone (apenas em um comando do terminal). Encontrei uma recomendação em algum lugar para desinstalar e reinstalar o software gnome. Desde que eu fiz isso, todo o sistema ficou 100% estável, sem mais ícones acinzentados e funciona perfeitamente. Parecia assustador inicialmente quando reinicializei após essa alteração - muitas mensagens do sistema durante a reinicialização - faça-o por sua conta e risco.

sudo apt-get autoremove gnome-software && sudo apt-get install gnome-software
Steve
fonte
2
Isso não tem nenhuma relação com a questão.
Martin Thornton