Preciso de uma lista com apenas os aplicativos que estão atualmente abertos / em execução no Dash, aqueles que possuem pequenas flechas brancas no lado esquerdo do ícone.
Existe alguma maneira de obtê-lo?
14.04
unity-dash
process
launcher
ovidb
fonte
fonte
Respostas:
A maneira de fazê-lo com
qdbus
eorg.ayatana.bamf
interface.Lista de aplicativos abertos por
.desktop
arquivo:Usando
org.ayatana.bamf.matcher.RunningApplications
eorg.ayatana.bamf.view.Name
métodosfonte
Pergunta interessante.
Como sempre, existem diferentes maneiras de obter uma lista desses aplicativos, cada um deles com anúncios e desvantagens específicos.
Obtendo uma lista de processos, representados no Iniciador, usando a lista de janelas
Como apenas aplicativos com uma janela (mapeada) aparecem no Iniciador, usando:
(
wmctrl
não está instalado por padrão), podemos obter uma lista de janelas abertas e o ID do processo ao qual as janelas pertencem. O formato da saída é:onde estão as informações mais importantes:
0x05204641
); esta é a janela -id12618
); esse é o ID do processo (pid) ao qual a janela pertence e,verhaal (~) - gedit
); este é o nome da janela .Assim que tivermos o pid, podemos procurar o nome do processo correspondente pelo comando:
Podemos criar um script das etapas acima e listar os resultados das janelas existentes, parecendo (usando
python
):Complicações
Isso parece simples. No entanto, como sempre, a realidade é um pouco mais complicada. Existem algumas exceções e complicações que precisamos cuidar:
Idle
(python
IDE) outkinter
são essas janelas.wmctrl
, mas não aparecem separadamente no Dash.LibreOffice
que todos os módulos têm o nome do processosoffice.bin
. Ao mesmo tempo, executar o comandosoffice.bin
não funcionará. Caso você precise identificar os módulos (Calc
,Writer
etc.) separadamente, precisará obter informações adicionais, como o nome da janela, por exemplo.gnome-terminal
, como aparece na lista de processos, como na saída deps -e ww
. Em 14,04,gnome-terminal
aparece comognome-terminal
, no entanto, em 15.04 / 15.10 mostra:/usr/lib/gnome-terminal/gnome-terminal-server
.O que precisamos consertar pelo menos
Para corrigir os problemas mais importantes acima, você precisa:
adicione uma verificação se a janela é uma janela "real" ou "normal", verificando com
Se a saída incluir a linha:
A janela é uma janela válida no sentido do Unity Launcher
gnome-terminal
in15.x
(supondo que você queira que o nome do processo apresentado sejagnome-terminal
), precisamos adicionar uma exceção para renomear o nome do processognome-terminal
se ele aparecer como/usr/lib/gnome-terminal/gnome-terminal-server
Roteiro
Como usar
O script precisa
wmctrl
:copie o script acima em um arquivo vazio, salve-o como
get_running.py
execute-o pelo comando:
Ele produzirá como:
ou execute com o argumento
-list
:Notas
Na sua pergunta, não está completamente claro qual é exatamente o objetivo da lista encontrada. Se você precisar ter o nome do aplicativo, como aparece na interface (nomes "legíveis"), uma abordagem completamente diferente pode ser adequada:
.desktop
arquivo/usr/share/applications
. Na maioria dos casos, podemos concluir o nome do processo e o nome da interface do aplicativo a partir de seu.desktop
arquivo. Usando essas informações, é possível criar relativamente fácil uma lista de aplicativos GUI em execução, apresentada pelo nome "legível".Também neste caso, no entanto, a realidade também é mais complicada do que a teoria, conforme explicado aqui .
fonte