Belirli bir pencereye odaklanmak için Bash komutu


49

Bash komut satırında, çalışan bir işlemin belirli bir penceresine odak vermenin bir yolu var mı? Sürecin adını, numarasını ve ihtiyacım olan her şeyi bildiğimi varsayın.

Örneğin, çalışan bir Firefox örneğim varsa, ancak simge durumuna küçültülmüşse (veya üzerinde başka bir pencere varsa). Aktif pencere yaparak Firefox penceresine odaklanan ve odak veren bir bash komutuna ihtiyacım var.

Yanıtlar:


76

Wmctrl komutu işi yapıyor gibi görünüyor. Benim için zaten kurulmuştu, ancak birinin ihtiyacı olması durumunda depolarda mevcut.

wmctrl -l 

Açık pencereleri (gnome paneller dahil) listeler.

wmctrl -a STRING

Başlığını STRING içeren bir pencereye odaklar. Birden fazla pencere bu şartı yerine getirirse ne olacağından emin değilim.
Benim durumumda emir şuydu:

wmctrl -a Firefox

6
Birinin okuduğunu görmek güzel ve ben sadece kendime başıboş dolaşmıyorum. =)
Malabarba

1
Ayrıca xdotool'u deneyin .
Andres Riofrio

Bu, kvm gibi, odağı çalan bir pencereli bir hata ayıklayıcı hedefi başlattığında odağı tekrar gdb'ye (debugger) ayarlamak için harika. Gdb komutunu kullanın shell wmctrl -a something, bir şey ayıklayıcınızı terminali başlığında bir şeydir.
doug65536

Çok teşekkürler, bu saf altın, korkarım ki beklemedeki tüm işlerimi bir şekilde arka planda kaybolan bir Chrome penceresinde kaybettim, işe yaradı!
Osmar

8

Sizinle wmctrlbirlikte kullanmak , xdotoolodağı Firefox'a geçirebilir ve ardından klavye veya fare eylemleri gerçekleştirebilir.

Bu örnekte:

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

Aşağıdaki adımlar yürütülür:

  1. İlk eşleşen Firefox penceresine odaklanın
  2. Yeni bir tarayıcı sekmesi aç
  3. Odağı adres çubuğuna yerleştirir
  4. "Google" yazın
  5. İlk tarayıcı otomatik tamamlama sonucuna sekme
  6. Geri Dön (veya Enter) tuşuna basın

4

Ubuntu bilgisayarımda kullandığım aşağıdaki komut dosyası nasıl? kullanım durum böyle.

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

Özel kısayol klavyesinde atadıktan sonra kullanıyorum. 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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.