Este é um exemplo específico de um problema genérico para o qual ainda não consegui encontrar uma solução.
Eu tenho um programa (Android Virtual Device Manager) que inicia 'subprogramas' (emuladores ou dispositivos virtuais) de dentro de si (também pode ser iniciado de outro lugar). Quero que quaisquer instâncias desses programas sejam agrupadas no mesmo ícone do Unity.
Eu criei um .desktop
arquivo para tentar fazer isso, mas não sei exatamente como fazê-lo. O arquivo da área de trabalho é o seguinte:
#!/usr/bin/env xdg-open
[Desktop Entry]
Version=1.0
Type=Application
Terminal=false
Name=Android Virtual Device
Icon=/home/ben/.icons/android.svg
Exec=/home/ben/usr/bin/android avd
StartupWMClass=Android Virtual Device Manager
Pelo que entendi, StartupWMClass
é o que preciso definir para conseguir isso corretamente. Eu obtive os dois nomes de classe ('Android Virtual Device Manager' e 'emulator64-arm') usando xprop WM_CLASS
nas janelas repsectivas. Ambos funcionam individualmente (o ícone do iniciador está corretamente anexado ao programa, não importa como ele é iniciado), mas não consigo fazê-lo funcionar para ambos.
Estou assumindo que, de alguma forma, preciso definir dois valores para, StartupWMClass
mas não consegui fazê-lo corretamente (ou saber se é uma operação válida). Eu tentei, separados por dois pontos como variáveis de ambiente, separados por vírgula, aspas, etc. e não consigo encontrar nenhuma dica na documentação oficial .
Alguma sugestão?
EDITAR:
Outro exemplo, mais pedante, mas provavelmente mais identificável, está com Matlab
. Estou executando o 2013a e a tela inicial que mostra inicialmente e o programa tem WM_CLASS
valores completamente diferentes . Isso significa que, quando clico no meu iniciador StartupWMClass=com-mathworks-util-PostVMInit
, a tela inicial aparece com um Unity
ícone diferente (padrão Desconhecido) , enquanto o restante aparece agrupado no meu iniciador.
Usando xprop WMCLASS
e clicando primeiro na tela inicial, e depois repetindo com uma Matlab
sessão ativa , obtenho a seguinte saída do terminal:
ben@ben-OptiPlex-9010:~$ xprop WM_CLASS
WM_CLASS(STRING) = "MATLAB", "MATLAB"
ben@ben-OptiPlex-9010:~$ xprop WM_CLASS
WM_CLASS(STRING) = "sun-awt-X11-XFramePeer", "com-mathworks-util-PostVMInit"
Se eu pudesse especificar algo ao longo das linhas de:
StartupWMClass=com-mathworks-util-PostVMInit&&MATLAB
Isso funcionaria perfeitamente (pois ambos funcionam separadamente), mas eu não tenho idéia da sintaxe, se é que ela existe. Só sei que nada do que tentei funcionou até agora.
Qualquer ajuda ou uma resposta definitiva de qualquer forma seria ótima, pois acredito que este é um elemento fundamental de uma área de trabalho que funcione bem.
Drawers
desse link e, pelo que eles mostram, ele simplesmente agrupa os links. Quando você clica em qualquer subitem, ele ainda é criado com seu próprio ícone noUnity
iniciador, que é o que estou tentando pararRespostas:
Mesmo problema para mim com Starcraft II lançado jogar playonlinux. Primeiro, o iniciador de aplicativos:
(WM_CLASS(STRING) = "Blizzard Launcher.exe", "Wine")
e então o próprio jogo:(WM_CLASS(STRING) = "SC2.exe", "Wine")
Eu acho que o vinho está definindo a classe com o executável binário.
Eu dei uma olhada no código bamf (método bamf_matcher.c, insert_desktop_file_class_into_table ()):
No meu caso, trapaceio criando 2 arquivos da área de trabalho com as mesmas chaves, mas com o StartupWMClass. Isso não é perfeito porque ainda tenho 2 ícones Uniy no iniciador, mas o importante é que sei por que :-).
fonte
Eu sei que essa pergunta é muito antiga, mas depois de passar pelo mesmo problema, acho que finalmente criei uma solução alternativa para isso e decidi compartilhar com qualquer pessoa com esse problema:
Como não podemos definir várias WMClasses para um único arquivo .desktop, por que não definir todas as janelas para uma única WMClass?
Nós podemos fazer algo assim (Obviamente, substituir
Window 1
,Window 2
epotatoes
com seus nomes janelas e WMClass desejado):E no arquivo .desktop, podemos fazer o seguinte:
StartupWMClass=potatoes
Tadam! Todas as janelas estão agrupadas agora.
Mas, ei, estamos fazendo isso manualmente toda vez que o programa é aberto? Claro que não.
Podemos apenas criar um script bash que faça isso automaticamente a cada meio segundo:
E, finalmente, defina o .sh que criamos para executar sempre que o sistema operacional for inicializado:
Espero que minha resposta seja útil para qualquer pessoa que esteja navegando nesta pergunta.
fonte