¿Es posible recuperar el proceso / título de la ventana activa en Gnome?

28

Necesito una solución para obtener la información de ventana activa (enfocada) actual en un escritorio Gnome 2. Estoy principalmente interesado en el proceso que ejecuta esa ventana y el título de la ventana.

¿Es posible?

SOLUCIÓN:

Obtener el título de la ventana:

xwininfo -root -children | grep $(printf '%x\n' $(xdotool getwindowfocus)) | grep -oEi '"[^"]+"' | head -1

Obteniendo el nombre del proceso:

ps -e | grep $(xdotool getwindowpid $(xdotool getwindowfocus)) | grep -v grep | awk '{print $4}'

o:

cat /proc/$(xdotool getwindowpid $(xdotool getwindowfocus))/comm
Rogach
fuente

Respuestas:

17

Puede usar xdotool , una herramienta versátil de automatización de ventanas X.

focused_window_id=$(xdotool getwindowfocus)
active_window_id=$(xdotool getactivewindow)
active_window_pid=$(xdotool getwindowpid "$active_window_id")

(No sé cuál es la diferencia entre enfocado y activo).

(Pensé que wmctrl podría hacer esto, pero aparentemente no).

Gilles 'SO- deja de ser malvado'
fuente
26

Es tan simple como esto:

xdotool getactivewindow getwindowname

¡Buena suerte, espero que funcione para ti!

eric
fuente
Esto funciona, ¿alguien puede explicar por qué fue rechazado?
lfzawacki
8

Más simple (IMO) que la solución de OP (es decir ps, sin grepy awk), para obtener el nombre del proceso:

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

O si quieres un final de línea:

echo $(cat /proc/$(xdotool getwindowpid $(xdotool getwindowfocus))/comm)
Skippy le Grand Gourou
fuente
Sí, cat /proc/es agradable (y podría decirse que es más rápido, ya que no implica englobar todo el psresultado). Lo agregué a la solución en el cuerpo de la pregunta, para que los futuros usuarios puedan encontrarlo.
Rogach
4

Pruebe el comando xwininfo, http://www.xfree86.org/4.2.0/xwininfo.1.html , definitivamente devuelve el título de la ventana y, en lo que respecta al proceso, bueno ...

X le asignó un ID y se convirtió en el PID principal de la ventana y también lo ocultaría de manera predeterminada, por lo tanto, suponiendo que Gnome tenga soporte para NET_WM_PID, como lo indica este parche de 2001, http://mail.gnome.org/ archives / gtk-devel-list / 2001-October / msg00238.html , luego podemos revisar esta publicación, http://www.mail-archive.com/[email protected]/msg05809.html , donde el autor escribe un programa C corto para convertir la identificación de la ventana en PID, listo.

rhoyerboat
fuente
Pero parece que eso xwininfome obliga a seleccionar manualmente la ventana necesaria. Esperaba una forma de obtener la ventana enfocada de bash.
Rogach
Algo como en `xwininfo -root -children | grep -oEi 'ID de ventana: (? [0-9a-zA-Z] +) | grep -oEi '(? 0-9a-zA-Z)' - editar: mi dedo se deslizó, mi expresión regular para la identificación de la ventana era mala. consulte este otro sitio para obtener diferentes referencias: davygoat.com/software/rizzle/How_it_works.html
rhoyerboat
Este comando solo proporciona la identificación de la ventana "raíz", y no la activa :(
Rogach
1

Sé que la pregunta es antigua, pero creo que xproptambién debería mencionarse aquí. Está disponible en X. Se puede usar de forma interactiva:

  1. escriba xpropy seleccione la ventana que desea con el cursor del mouse, luego
  2. WM_NAMEte da el título de la ventana, te _NET_WM_PIDda el pid

O puede decir directamente xpropqué ventana necesita al pasar -idu -nameopción. Utilizando awkpuedes obtener la identificación de la ventana activa y volver a pasarla así xprop(tomada de aquí ):

xprop -id $(xprop -root -f _NET_ACTIVE_WINDOW 0x " \$0\\n" _NET_ACTIVE_WINDOW | awk "{print \$2}")

Finalmente, usando Your Favourite Tool ™ (p. Ej. grepO sed) puede obtener los valores necesarios. Por ejemplo, para pidla salida del comando anterior se puede canalizar a sed:sed -nE 's/^_NET_WM_PID.*= ([0-9]+)/\1/p'

jjj
fuente