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?

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


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-)

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.


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.