¿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

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


26

Es tan simple como esto:

xdotool getactivewindow getwindowname

¡Buena suerte, espero que funcione para ti!


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)

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/devel@xfree86.org/msg05809.html , donde el autor escribe un programa C corto para convertir la identificación de la ventana en PID, listo.


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'

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.