Descubre la aplicación bajo el mouse

11

A menudo me sucede que una aplicación aparece una pregunta y me pregunto a qué aplicación exacta pertenece esta ventana, porque si miro en el Iniciador no hay ninguna aplicación que tenga foco actualmente (no hay un triángulo blanco en el lado derecho del icono cuando enfoco la ventana del mensaje)

¿Hay alguna manera de descubrir la pertenencia de una ventana abierta?

rubo77
fuente

Respuestas:

11

Usando xdotool

Primero asegúrese de que xdotoolesté disponible en su sistema:

sudo apt-get install xdotool

El siguiente comando imprimirá el nombre del proceso de la ventana actualmente en foco:

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

Para tener más tiempo para enfocar la ventana / hacer clic en ella, puede anteponer una pequeña duración del sueño:

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

El nombre del proceso debe mostrarse después de un corto período de tiempo.


Usando wininfo

Wininfo es una utilidad gráfica que muestra información variada sobre ventanas y sus propiedades, incluido el PID (ID de proceso) asociado a la ventana:

imagen de PID en wininfo

wininfo debería estar disponible en los repositorios oficiales:

sudo apt-get install wininfo

Una vez determinado el PID de la ventana, puede buscar el nombre del proceso asociado. Hay varias formas de hacer esto, por ejemplo, mirando /proc:

$ cat /proc/17002/comm
gnome-terminal

Este sería el nombre del proceso asociado con el PID 17002.

Una forma más elegante que permite inspeccionar el contexto del árbol de procesos, como lo sugiere @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

Por supuesto, también puede combinarse pstreecon la xdotoolopción anterior (¡gracias a @ rubo77 por señalar esto!):

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

Fuentes:

/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

Glutanimato
fuente
1
+1 por la buena respuesta. Si el PID es de un hijo de la aplicación principal, puede sugerir el uso del pstree -a -s -l -p -u $PIDcual es bastante agradable ...
Rmano
@Rmano: ¡Oh, eso está bien! Lo agregué a la respuesta.
Glutanimate
El echo $()en sus comandos no es necesario.
Pausado hasta nuevo aviso.
@DennisWilliamson Gracias por el puntero. Editado
Glutanimate
1
xdotool getwindowpid "$(xdotool getwindowfocus)"xdotool getwindowfocus getwindowpid
Veedrac
2

Puede crear un método abreviado de teclado con este comando:

zenity --info --text $(xprop $win_id WM_CLASS | cut -d" " -f4-)
TuKsn
fuente
1
Esa es una muy buena solución, +1. Sin embargo, un problema menor: si la aplicación no asigna un WMCLASS adecuado (que a menudo es el caso con diálogos crípticos), xprop no será de ninguna ayuda.
Glutanimate
¿Tenía un ejemplo para una aplicación (ventana emergente) que no funcionó, gracias.
TuKsn
1
No tengo nada específico a la mano, pero sí recuerdo haber tenido problemas con varias aplicaciones Java y otros programas oscuros que no tenían configurado WMCLASS (o establecido en algo genérico como java-window). Me encontré con este tipo de problemas hace un tiempo cuando intentaba implementar reglas específicas de la aplicación en la configuración de mi administrador de ventanas.
Glutanimate
1
Tiene usted razón hay un problema similar con aplicaciones creadas con QML / qt -> bugreports.qt-project.org/browse/QTBUG-29396
TuKsn
¿Cómo se crea un atajo de teclado para esto? Lo intenté, como se muestra a continuación, pero el zenity no aparece
rubo77
2

Puede usar xproppara obtener la ID de proceso de la ventana en la que se hizo clic:

xprop $win_id _NET_WM_PID

luego analizarlo con pstree:

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

Esto se puede redirigir a una ventana de información de texto con

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

Traté de crear un método abreviado de teclado para este último comando (si lo necesita con regularidad), pero por alguna razón Esto no funciona.

rubo77
fuente
0

Con xdtool y yad instalados, puede tener una buena aplicación 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
fuente