Comando Bash per focalizzare una finestra specifica


50

C'è un modo, nella riga di comando di bash, di focalizzare una finestra specifica di un processo in esecuzione. Supponiamo di conoscere il nome, il numero e qualsiasi altra cosa di cui abbia bisogno.

Ad esempio, se ho una singola istanza di Firefox in esecuzione, ma è ridotta a icona (o c'è un'altra finestra sopra di essa). Ho bisogno di un comando bash che richiami e dia fuoco alla finestra di Firefox, rendendola la finestra attiva.

Risposte:


78

Il comando wmctrl sembra fare il lavoro. Era già installato per me, ma è disponibile nei repository nel caso qualcuno ne abbia bisogno.

wmctrl -l 

Elenca le finestre attualmente aperte (inclusi i pannelli di gnome).

wmctrl -a STRING

Dà il focus su una finestra che contiene STRING nel suo titolo. Non sono sicuro di cosa accada se più di una finestra soddisfa tale condizione.
Nel mio caso il comando era:

wmctrl -a Firefox

6
Bello vedere qualcuno che sta leggendo e non sto solo vagando per me stesso. =)
Malabarba,

1
Prova anche xdotool .
Andres Riofrio,

Questo è fantastico per riportare lo stato attivo su gdb (debugger) quando lancia un target di debugger con una finestra che ruba lo stato attivo, come kvm. Usa il comando gdb shell wmctrl -a something, dove qualcosa è qualcosa nel titolo del tuo terminale debugger.
doug65536,

Grazie mille, questo è oro puro, temevo di aver perso tutto il mio lavoro in sospeso in una finestra di Chrome che in qualche modo è scomparsa sullo sfondo, ha funzionato!
Osmar,

9

Usando wmctrlin combinazione con xdotoolè possibile spostare lo stato attivo su Firefox e quindi eseguire azioni da tastiera o mouse.

In questo esempio:

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

Vengono eseguiti i seguenti passaggi:

  1. Concentrati sulla prima finestra di Firefox corrispondente
  2. Apri una nuova scheda del browser
  3. Mette lo stato attivo nella barra degli indirizzi
  4. Digita "google"
  5. Scheda per il primo risultato di completamento automatico del browser
  6. Premere il tasto Invio (o Invio)

4

Come è lo script seguente che uso nel mio PC Ubuntu? il caso d'uso è così.

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

Lo sto usando dopo averlo assegnato nella scorciatoia personalizzata da tastiera. 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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.