Descubra o aplicativo com o mouse

11

Muitas vezes acontece comigo que um aplicativo faz uma pergunta e me pergunto a qual aplicativo exato essa janela pertence, porque, se eu olhar no Launcher, não há um aplicativo que esteja focado no momento (nenhum triângulo branco no lado direito do ícone) quando foco a janela da mensagem)

Existe uma maneira de descobrir o pertencimento de uma janela aberta?

rubo77
fonte

Respostas:

11

Usando xdotool

Primeiro verifique se xdotoolestá disponível no seu sistema:

sudo apt-get install xdotool

O comando a seguir imprimirá o nome do processo da janela atualmente em foco:

cat "/proc/$(xdotool getwindowpid "$(xdotool getwindowfocus)")/comm"

Para ter mais tempo para focar a janela / clicar nela, você pode preceder uma pequena duração do sono:

sleep 5 && cat "/proc/$(xdotool getwindowpid "$(xdotool getwindowfocus)")/comm"

O nome do processo deve ser exibido após um curto período de tempo.


Usando wininfo

O Wininfo é um utilitário gráfico que exibe várias informações nas janelas e suas propriedades, incluindo o PID (ID do processo) associado à janela:

imagem do PID no wininfo

wininfo deve estar disponível nos repositórios oficiais:

sudo apt-get install wininfo

Após determinar o PID da janela, você pode procurar o nome do processo associado a ele. Existem várias maneiras de fazer isso, por exemplo, observando /proc:

$ cat /proc/17002/comm
gnome-terminal

Esse seria o nome do processo associado ao PID 17002.

Uma maneira mais elegante que permite inspecionar o contexto da árvore de processos, conforme sugerido por @Rmano :

$ pstree -a -s -l -p -u 17002
init,1
  └─lightdm,1900
      └─lightdm,3202 --session-child 12 19
          └─lxsession,3307,glutanimate -s LXDE -e LXDE
              └─openbox,3362 --config-file /home/glutanimate/.config/openbox/lxde-rc.xml
                  └─gnome-terminal,17002
                      ├─bash,1841
                      ├─bash,2332
                      ├─bash,2424
                      │   └─pstree,2484 -a -s -l -p -u 17002
                      ├─gnome-pty-helpe,1840
                      ├─{gnome-terminal},1835
                      ├─{gnome-terminal},1836
                      ├─{gnome-terminal},1842
                      └─{gnome-terminal},2269

Obviamente, você também pode combinar pstreecom a xdotoolopção acima (obrigado a @ rubo77 por apontar isso!):

sleep 2; pstree -spaul $(xdotool getwindowpid "$(xdotool getwindowfocus)")

Fontes:

/unix//q/38867/29245

http://www.linuxquestions.org/questions/debian-26/how-to-find-the-process-associated-with-a-top-level-x-window-907125/

/superuser//q/632979/170160

Glutanimado
fonte
1
+1 para a boa resposta. Se o PID é de uma criança do aplicativo principal, você pode sugerir o uso de pstree -a -s -l -p -u $PIDque é bastante bom ...
Rmano
@Rmano: Oh, isso é legal! Eu adicionei à resposta.
Glutanimate
O echo $()comando não é necessário.
Pausado até novo aviso.
@DennisWilliamson Obrigado pelo ponteiro. Editado.
Glutanimate
1
xdotool getwindowpid "$(xdotool getwindowfocus)"xdotool getwindowfocus getwindowpid
Veedrac
2

Você pode criar um atalho de teclado com este comando:

zenity --info --text $(xprop $win_id WM_CLASS | cut -d" " -f4-)
TuKsn
fonte
1
Essa é uma solução muito boa, +1. No entanto, um problema menor: se o aplicativo não atribuir um WMCLASS adequado (o que geralmente ocorre com diálogos criptográficos), o xprop não ajudará em nada.
precisa saber é o seguinte
Você teve um exemplo para um aplicativo (pop-up) que não funcionou, obrigado.
TuKsn 8/08/14
1
Não tenho nada específico em mãos, mas lembro-me de ter problemas com vários aplicativos Java e outros programas obscuros que não tinham o WMCLASS definido (ou definido como algo genérico como java-window). Encontrei esses tipos de problemas há algum tempo atrás, quando estava tentando implementar regras específicas de aplicativos na minha configuração do gerenciador de janelas.
Glutanimate
1
Você está certo que há um problema semelhante com aplicativos criados com QML / qt -> bugreports.qt-project.org/browse/QTBUG-29396
TuKsn
Como você cria um atalho de teclado para isso? Eu tentei, como mostrado abaixo, mas zenity não aparece
rubo77
2

Você pode usar xproppara obter o ID do processo da janela clicada:

xprop $win_id _NET_WM_PID

depois analise-o com pstree:

pstree -spaul $(xprop $win_id _NET_WM_PID | cut -d" " -f3-)

Você pode redirecionar para uma janela de informações de texto com

pstree -spaul $(xprop $win_id _NET_WM_PID | cut -d" " -f3-)|zenity --text-info --title "pstree of clicked Window"

Tentei criar um atalho de teclado para este último comando (se você precisar dele regularmente), mas por algum motivo Isso não funciona.

rubo77
fonte
0

Com o xdtool e o yad instalados, você pode ter um ótimo aplicativo GUI.

#!/bin/bash
while true; do cat "/proc/$(xdotool getwindowpid "$(xdotool 
getwindowfocus)")/comm"; sleep 1; echo -e '\f'; done | yad --no- 
buttons --no-focus --geometry 250x10 --fixed --text-info -- 
title="Active window" --listen
Peter Bauer
fonte