¿Cómo puedo encontrar la ubicación (en el escritorio) de una ventana en la línea de comando?

19

Estoy tratando de escribir un pequeño script para ayudar a administrar mis ventanas a través de atajos de teclado.

Para hacer lo que quiero, necesito poder encontrar la ubicación actual y el tamaño de la ventana "activa" (enfocada). Por ubicación, me refiero a las coordenadas X, Y de la ventana en el escritorio, y por tamaño me refiero a la altura y el ancho de la ventana.

¿Existe una utilidad de línea de comandos que pueda obtener esta información?

TM.
fuente

Respuestas:

22

Puede obtener toda la información de la ventana activa actual utilizando este comando:

xwininfo -id $(xprop -root | awk '/_NET_ACTIVE_WINDOW\(WINDOW\)/{print $NF}')

o

xwininfo -id $(xdpyinfo | grep focus | grep -E -o 0x[0-9a-f]+)

Simplemente analice la salida para las coordenadas que necesita. Aquí hay algunos comandos útiles al interactuar con Windows:

  • xwininfo le dará la geometría relativa y absoluta.
  • xprop le dará mucha información, incluso si la ventana está activa, pero no es geometría
  • xdpyinfo también le proporcionará la identificación de la ventana activa, pero no información adicional.
  • wmctrl obtendrá una lista de información sobre ventanas y le permitirá seleccionar la ventana activa para su modificación, pero no información.

Por ejemplo, para cambiar el título de la ventana activa a "Nuevo nombre":

wmctrl -r :ACTIVE: -N "New Name"

O para cambiar la posición de la ventana activa:

wmctrl -r :ACTIVE: -e 0,20,20,200,400

Considere wmctrlsi solo necesita cambiar algo simple, como la geometría de la ventana. Considere usar los otros scripts mencionados anteriormente solo si desea hacer otras cosas más complejas.

Martin Owens -doctormo-
fuente
1
Solo me gustaría señalar que obtengo resultados diferentes cuando ejecuto el segundo comando. El primero funciona como era de esperar.
TM.
1
Uso Arch pero podría ayudar a alguien aquí en el futuro. El primero no funcionó para mí, el segundo no proporcionó las dimensiones correctas quizás debido al WM. Pero la combinación de los dos funcionó. xwininfo -id $(xprop -root | grep "_NET_ACTIVE_WINDOW(WINDOW)" | grep -Eo "0x[0-9a-f]{2,}")
Sev
¡Gracias! Pero estoy de acuerdo con los dos primeros comentarios. El segundo comando, xwininfo -id $(xdpyinfo | grep focus | grep -E -o 0x[0-9a-f]+)me muestra una ventana secundaria (no tiene nombre) de mi Terminal. Cuando acabo de hacer xdpyinfo | grep focus, obtengo focus: window 0x435b877, revert to Parent, y 0x435b877 es la identificación de la ventana devuelta por el primer comando (que funciona para mí). Esto está en Trusty 14.04.1 LTS
nealmcb
8

Con "xdotool" puedes interactuar fácilmente con Windows usando eventos de teclado o mouse.

Ejemplo de enviar una CtrlCsecuencia a la ventana activa:

xdotool getwindowfocus key ctrl+c # Sends CTRL+C to the current window.

Si realmente necesita la posición de la ventana:

eval $(xdotool getmouselocation --shell); echo $X $Y

Para más acciones / opciones, consulte la página del manual .

João Pinto
fuente
Interesante, pero acabo de llegar Error: Invalid key sequence 'ctrl-c'.
l0b0