Comando Bash para focar uma janela específica

42

Existe uma maneira, na linha de comando bash, de dar foco a uma janela específica de um processo em execução. Suponho que eu saiba o nome, número e qualquer outra coisa que eu precise.

Por exemplo, se eu tiver uma única instância do Firefox em execução, mas ela está minimizada (ou há outra janela em cima dela). Eu preciso de um comando bash que traga e dê foco à janela do Firefox, tornando-a a janela ativa.

    
por Malabarba 19.05.2010 / 16:02

3 respostas

67

O comando wmctrl parece fazer o trabalho. Já foi instalado para mim, mas está disponível nos repositórios, caso alguém precise.

wmctrl -l 

Lista janelas abertas no momento (incluindo os painéis do gnome).

wmctrl -a STRING

Dá foco a uma janela contendo STRING no título. Não sei o que acontece se mais de uma janela atender a essa condição.
No meu caso, o comando era:

wmctrl -a Firefox
    
por 19.05.2010 / 16:25
8

Usando wmctrl em combinação com xdotool , você pode alternar o foco para o Firefox e executar ações de teclado ou mouse.

Neste exemplo:

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

As etapas a seguir são executadas:

  1. Concentre-se na primeira janela do Firefox correspondente
  2. Abra uma nova guia do navegador
  3. Coloca o foco na barra de endereço
  4. Digite "google"
  5. Tabulação para o primeiro resultado de preenchimento automático do navegador
  6. Pressione a tecla Return (ou Enter)
por 04.08.2015 / 05:40
3

Como é o script abaixo que eu uso no meu pc ubuntu? caso de uso é assim.

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

Estou usando-o depois de atribuí-lo no atalho personalizado do teclado. ctrl + 1, ctrl + 2, ...

cat 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
    
por 07.02.2014 / 05:36