Polecenie Bash do skupienia określonego okna

50

Czy istnieje sposób, aby w wierszu poleceń bash skupić się na określonym oknie uruchomionego procesu. Załóżmy, że znam nazwę, numer i wszystko, czego potrzebuję.

Na przykład, jeśli mam uruchomioną jedną instancję przeglądarki Firefox, ale jest ona zminimalizowana (lub jest na niej jakieś inne okno). Potrzebuję polecenia bash, które wyświetli okno dialogowe Firefoxa i sprawi, że będzie ono aktywne.

Malabarba
źródło

Odpowiedzi:

77

Wydaje się, że polecenie wmctrl wykonuje zadanie. Został już dla mnie zainstalowany, ale jest dostępny w repozytoriach na wypadek, gdyby ktoś go potrzebował.

wmctrl -l 

Wyświetla listę aktualnie otwartych okien (w tym paneli gnome).

wmctrl -a STRING

Ustawia fokus na oknie zawierającym STRING w tytule. Nie jestem pewien, co się stanie, jeśli więcej niż jedno okno spełni ten warunek.
W moim przypadku polecenie brzmiało:

wmctrl -a Firefox
Malabarba
źródło
6
Miło widzieć, że ktoś czyta, a ja nie tylko się wałęsam. =)
Malabarba
1
Spróbuj także xdotool .
Andres Riofrio,
Jest to niesamowite, gdy ustawiasz fokus z powrotem na gdb (debugger), gdy uruchamia on cel debuggera z oknem, które kradnie fokus, np. Kvm. Użyj polecenia gdb shell wmctrl -a something, gdzie coś jest w tytule twojego terminala debuggera.
doug65536,
Dzięki bardzo, to jest czyste złoto, bałem się, że straciłem całą oczekującą pracę w oknie Chrome, które po prostu zniknęło w tle, zadziałało!
Osmar
8

Używając wmctrlw połączeniu z xdotoolmożesz przełączyć fokus na Firefox, a następnie wykonywać czynności za pomocą klawiatury lub myszy.

W tym przykładzie:

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

Wykonane są następujące kroki:

  1. Skoncentruj się na pierwszym dopasowanym oknie przeglądarki Firefox
  2. Otwórz nową kartę przeglądarki
  3. Ustawia fokus na pasku adresu
  4. Wpisz „google”
  5. Tab do pierwszego wyniku autouzupełniania w przeglądarce
  6. Naciśnij klawisz Return (lub Enter)
Krzysztof
źródło
4

Jak wygląda poniższy skrypt, którego używam na moim komputerze z Ubuntu? przypadek użycia jest taki.

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

Używam go po przypisaniu go w niestandardowym skrócie klawiaturowym. 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
swj
źródło