No mundo Unix com o Sistema X Window (X11) there's, não há conceito de “aplicativo”. Existem vários conceitos que se sobrepõem, mas não correspondem exatamente:
- packages - o nome que você seleciona em um gerenciador de pacotes para instalar o aplicativo. Se você não instalá-lo através de um gerenciador de pacotes, pode não haver um nome de pacote formal. Um pacote pode incluir vários aplicativos.
-
executáveis - o arquivo que é executado para executar o aplicativo. Os executáveis têm um nome de arquivo, que pode ou não ser informativo (é quando o caminho para o aplicativo é
/usr/bin/foo
, não quando é/opt/myapp/bin/run
ou/home/alice/work/dev/a.out
). - processes - a instância da aplicação na memória. Executar um executável cria um processo. Exatamente o que pode ser considerado um nome de processo é complexo e um pouco dependente do sistema, não vou discuti-lo completamente aqui. Na maioria dos casos, você pode considerar o nome do processo como o nome do arquivo do executável.
-
toplevel windows - um programa GUI, por definição de “GUI”, cria pelo menos um deles. Uma janela tem várias coisas que cuidam de nomes de algum tipo, todos os quais podem ser recuperados como propriedades e têm um pouco enganoso nomes:
-
WM_NAME
é de fato o título da janela. É o que os gerenciadores de janelas exibem na barra de título e nas listas de tarefas. Ele é feito para ser legível e freqüentemente muda durante a vida útil da janela (por exemplo, ao abrir um arquivo diferente, alternar para outra guia, etc.). -
WM_ICON_NAME
é semelhante aWM_NAME
, mas é usado ao mostrar um ícone representando uma janela. -
WM_CLASS
é um par de nomes, o nome da instância e o nome da classe. Esses nomes são usados por mecanismos de configuração, como X resources ; consulte "Xterm" ou "xterm" no arquivo de configuração para uma breve introdução. Esses nomes são normalmente os mesmos por padrão, exceto que a classe é capitalizada e a instância não é. Eu acho que o nome da classe é o melhor candidato para "nome do aplicativo" - mas um programa pode exibir várias janelas de nível superior com classes diferentes.
-
- Um aplicativo pode ter um menu com um item chamado "Sobre", que exibe uma janela contendo um nome. O que ele coloca lá é puramente a escolha do desenvolvedor do aplicativo.
Processe visualizadores, não apenas baseados em texto como ps
, top
e htop
, mas também a maioria dos GUIs, como gnome-system-properties e lxtask, exiba apenas informações sobre processos, não sobre janelas de nível superior .
Há uma razão técnica para isso: não há uma maneira robusta de identificar qual processo exibe qual janela. É possível, mas muito incomum, ter vários processos desenhando na mesma janela. Mais comumente, pode não haver processo exibindo uma janela, porque o X11 é transparente à rede - um aplicativo pode enviar instruções para a interface de exibição (o servidor X) pela rede. Não há mecanismo infalível para rastrear janelas criadas por conexões remotas.
Se o aplicativo for cooperativo (e a maioria é), duas propriedades de janela permitem rastrear a janela para um processo:
-
_NET_WM_PID
: o ID do processo que criou a janela. -
WM_CLIENT_MACHINE
: o nome do host da máquina em que o processo é executado.
Veja Qual processo criou essa janela do X11? para obter mais detalhes . Você pode consultar a propriedade _NEW_WM_PID
com ferramentas de linha de comando, como xprop
, xdotool
, wmctrl
, etc. Com xprop
, você pode exibir todas as propriedades. Com xdotool
e xprop
, clique em uma janela para exibir informações sobre ela. wmctrl
pode listar informações sobre todas as janelas.
xprop _NET_WM_PID WM_CLIENT_MACHINE # and click on a window
xdotool selectwindow getwindowpid # and click on a window
wmctrl -lp
Dado o ID do processo, você pode obter informações sobre o processo, como o caminho para seu executável. Por exemplo, execute o seguinte comando e clique em uma janela para exibir informações sobre o aplicativo que exibe a janela.
ps -o args= -p $(xdotool selectwindow getwindowpid)
Para ver o caminho para o executável, no Linux:
readlink /proc/$(xdotool selectwindow getwindowpid)/exe
¹ Existem projetos como o Wayland e o Mir que se esforçam para substituir o X11, mas considerando quantos aplicativos existem para o X11, eles estão avançando lentamente e só são viáveis se eles mantêm compatibilidade suficiente.