Perintah Bash untuk memfokuskan jendela tertentu

50

Apakah ada cara, di bash command line, untuk memberikan fokus ke jendela spesifik dari proses yang sedang berjalan. Anggaplah saya tahu nama proses, nomor, dan apa pun yang saya butuhkan.

Sebagai contoh, jika saya memiliki satu contoh Firefox berjalan, tetapi diminimalkan (atau ada jendela lain di atasnya). Saya memerlukan perintah bash yang memunculkan dan memberikan fokus ke jendela Firefox, dengan menjadikannya jendela aktif.

Malabarba
sumber

Jawaban:

78

Perintah wmctrl tampaknya melakukan pekerjaan itu. Itu sudah diinstal untuk saya, tetapi tersedia di repositori jika ada yang membutuhkannya.

wmctrl -l 

Daftar jendela yang saat ini terbuka (termasuk panel gnome).

wmctrl -a STRING

Memberikan fokus ke jendela yang berisi STRING dalam judulnya. Saya tidak yakin apa yang terjadi jika lebih dari satu jendela memenuhi kondisi itu.
Dalam kasus saya, perintahnya adalah:

wmctrl -a Firefox
Malabarba
sumber
6
Senang melihat seseorang membaca dan saya tidak hanya mengoceh pada diri saya sendiri. =)
Malabarba
1
Coba juga xdotool .
Andres Riofrio
Ini luar biasa untuk mengatur fokus kembali ke gdb (debugger) ketika meluncurkan target debugger dengan jendela yang mencuri fokus, seperti kvm. Gunakan perintah gdb shell wmctrl -a something, di mana ada sesuatu dalam judul terminal debugger Anda.
doug65536
Terima kasih banyak, ini adalah emas murni, saya takut saya kehilangan semua pekerjaan saya yang tertunda di beberapa jendela Chrome yang entah bagaimana menghilang di latar belakang, itu berhasil!
Osmar
9

Menggunakan wmctrldalam kombinasi dengan xdotoolAnda dapat mengalihkan fokus ke Firefox dan kemudian melakukan tindakan keyboard atau mouse.

Dalam contoh ini:

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

Langkah-langkah berikut dijalankan:

  1. Berikan fokus ke jendela Firefox pertama yang cocok
  2. Buka tab browser baru
  3. Menempatkan fokus di bilah alamat
  4. Ketik "google"
  5. Tab ke hasil pelengkapan otomatis browser pertama
  6. Tekan tombol Kembali (atau Enter)
Christopher
sumber
4

Bagaimana skrip di bawah ini yang saya gunakan di ubuntu pc saya? use case seperti ini.

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

Saya menggunakannya setelah menetapkannya di pintasan khusus keyboard. 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
sumber