Comando bash para enfocar una ventana específica

50

¿Hay alguna manera, en la línea de comando bash, de enfocar una ventana específica de un proceso en ejecución? Suponga que sé el nombre del proceso, el número y cualquier otra cosa que necesite.

Por ejemplo, si tengo una sola instancia de Firefox ejecutándose, pero está minimizada (o hay alguna otra ventana encima). Necesito un comando bash que aparezca y enfoque la ventana de Firefox, convirtiéndola en la ventana activa.

Malabarba
fuente

Respuestas:

78

El comando wmctrl parece hacer el trabajo. Ya estaba instalado para mí, pero está disponible en los repositorios en caso de que alguien lo necesite.

wmctrl -l 

Enumera las ventanas abiertas actualmente (incluidos los paneles de gnomos).

wmctrl -a STRING

Da foco a una ventana que contiene STRING en su título. No estoy seguro de qué sucede si más de una ventana cumple con esa condición.
En mi caso el comando fue:

wmctrl -a Firefox
Malabarba
fuente
66
Es bueno ver que alguien está leyendo y no estoy divagando solo. =)
Malabarba
1
Prueba también con xdotool .
Andres Riofrio
Esto es increíble para volver a establecer el foco en gdb (depurador) cuando lanza un objetivo de depurador con una ventana que roba el foco, como kvm. Use el comando gdb shell wmctrl -a something, donde algo es algo en el título de su terminal depurador.
doug65536
Muchas gracias, esto es oro puro, tenía miedo de perder todo mi trabajo pendiente en alguna ventana de Chrome que simplemente desapareció en el fondo de alguna manera, ¡funcionó!
Osmar
9

Utilizando wmctrlen combinación con xdotoolusted puede cambiar el foco a Firefox y luego realizar acciones de teclado o mouse.

En este ejemplo:

wmctrl -R firefox && \
  xdotool key --clearmodifiers ctrl+t ctrl+l && \
  xdotool type --delay=250 google && \
  xdotool key --clearmodifiers Tab Return

Se ejecutan los siguientes pasos:

  1. Centrarse en la primera ventana de Firefox coincidente
  2. Abra una nueva pestaña del navegador
  3. Pone el foco en la barra de direcciones
  4. Escribe "google"
  5. Pestaña al primer resultado de autocompletar del navegador
  6. Presione la tecla Retorno (o Intro)
Christopher
fuente
4

¿Cómo es el siguiente script que uso en mi PC ubuntu? El caso de uso es así.

   $ ./focus_win.sh 1            # focus on a application window that executed at first
   $ ./focus_win.sh 2            # second executed application window

Lo estoy usando después de asignarlo en el atajo personalizado del teclado. Ctrl + 1, Ctrl + 2, ...

gato focus_win.sh

#! /bin/sh

if [ "" = "$1" ] ; then
    echo "usage $0 <win index>"
    exit 1;
fi

WIN_ID=`wmctrl -l | cut -d ' ' -f1 | head -n $1 | tail -n 1`

if [ "" = "$WIN_ID" ] ; then
    echo "fail to get win id of index $1"
    exit 1;
fi
wmctrl -i -a $WIN_ID
swj
fuente