Tuş vuruşlarını (F5) terminalden bir GUI programına nasıl gönderirim?


40

Bazı istatistikleri göstermek için Chromium (kiosk modu) ile birlikte bir Ahududu Pi kullanıyorum. Pi'nin bağlı bir klavyesi yok, bu yüzden terminalden tuş vuruşlarını Chromium (tab) işlemine göndermek için bir çözüm aradım . Normal giriş çalışıyor ancak F5bu çözümle nasıl bir şey (özel bir anahtar: tarayıcı yenileme) gönderirim?

# pidof chromium
20809 20790 20788 20786 20783
# echo 'some text' > /proc/20809/fd/0

Yanıtlar:


51

GUI programları standart girişlerinden okumaz, girişlerini X sunucusundan alırlar . Bir pencereye bir tuş vuruşu enjekte etmek için araçlar vardır. xdotool oldukça yaygın ve kullanışlıdır.

Tuş vuruşunu göndermek istediğiniz pencere kimliğini bulmanız gerekir. Bunu xdotool ile yapabilirsiniz. xdotool search --class Chrometüm Chrome pencerelerinin pencere kimlikleri listesini döndürür. Bunun birden fazla olması durumunda, istediğinizi seçmeniz gerekir. xdotool search --nameSınıf yerine başlıkla eşleşmek için kullanabilirsiniz . Ayrıca wmctrl çıktısını ayrıştırıp istediğiniz pencere kimliğini çıkarabilirsiniz.

Doğru pencere kimliğini bulduktan sonra, xdotoolbir tuş vuruşu enjekte etmek için çağırabilirsiniz . Ne yazık ki, birçok uygulama sentetik olayları, yani başka bir uygulama tarafından gönderilen tuş vuruşlarını ve fare olaylarını reddeder. Bu, Chrome'un şu anki sürümlerinde geçerlidir. Başka bir uygulamadan farklı bir mekanizma ile bir tuş vuruşunu enjekte etmek mümkündür, ancak bu pencerenin odaklanmasını gerektirir. Bunların hepsini xdotool ile yapabilirsiniz, ancak odağın hızla Chrome penceresine titremesine ve geri dönmesine neden olur. Aşağıdaki kod parçası F5, ilk Chrome penceresine gönderir (biraz keyfi bir şekilde).

xdotool search --class Chrome windowactivate --sync %1 key F5 windowactivate $(xdotool getactivewindow)

Veya xdotool'un eski sürümleriyle:

xdotool windowactivate $(xdotool search --class Chrome) &&
xdotool key F5 &&
xdotool windowactivate $(xdotool getactivewindow)

Bunun F5o pencereye gönderildiğini ve bununla ne yapacağına karar vermenin programa bağlı olduğunu unutmayın. Chrome'da bu, geçerli sekmeyi yeniden yükler.


4
--windowidbayrak artık --window(komut kadar sizi uyarır)
Louis Maddox

2
--titleSeçenek artık --name(komut sadakatle kadar uyarıyor)
jpaugh

2
yuvalama tamamen gereksiz, olması gerektiği xdotool search --class Chrome key F5
phil294

1
@Blauhirn Xdotool'ün eski sürümlerinde yuvalama gerekliydi. Ancak teşekkürler, yeni sözdizimini de gösterecek şekilde cevabımı güncelledim.
Gilles 'SO- kötülük olmayı'

Oh, ve bunu güncellediğimden beri Chrome, günümüzde sentetik olayları reddediyor.
Gilles 'SO- kötülük' dur

15

Yukarıda önerilen çözüm bu şekilde xdotool kullandı

 xdotool key --windowid <window> <keystroke>

Bu benim için işe yaramadı. Biraz deney yaptıktan sonra, ben geldim

 xdotool windowactivate --sync <window> key <keystroke>

Bir zamanlar bu çalışıyor gibi görünüyordu, bazı betikleri tanımladım ve .lircrc dosyamı burada gösterdiği gibi güncelledim:

http://pcfellow.com/ClementineRemote.html


İlk örneğinizin neden işe yaramadığını merak ediyorum? Odaklanmamış pencerelere tuş vuruşlarını göndermek iyi olurdu.
Geremia

1
@Geremia, muhtemelen xdotool belgelerinde SENDEVENT NOTLAR'da belirtilen nedenlerden dolayı çalışmaz.
Janthelme

4

Raspbian Wheezy çalıştıran Ahududu Pi'de de benzer bir durum vardı. Kiosk modunu kullanarak Chrome'daki sekmeleri döndürmem gerekiyordu (ne yazık ki, eski Chrome'da bunu yapmak için bir uzantı yüklemek artık makul değil). Kabul edilen cevap örneğinde bazı yazım hataları var veya sadece yazılım sürümlerimle çalışmıyor, işte benim için işe yarayanlar:

xdotool key --window "$(xdotool search --class Chromium | head -1)" Ctrl+Tab

4

Özel bir web sayfasını görüntülemek için Chromium kullanıyorsanız ve düzenli olarak yenilenmesini istiyorsanız, aşağıdaki etiketi ekleyebilirsiniz:

<meta http-equiv="refresh" content="5">

5 saniyede bir otomatik olarak yenilemek için (isterseniz daha kısa veya daha uzun ayarlayabilirsiniz).


2
İyi deneme, ancak Twitter,
ISS'imin

4
Bir kullanıcı betiği kullanarak bu etiketi sayfaya ekleyebilirsiniz. Pencereye bir tuşa basmaktan daha az kırılgan bir çözüm olabilir.
sherbang

2

Tarihsel olarak Auto Hot Key'i tuşlara basma gibi şeyler yapmak için kullandım, ancak bu Linux'ta bulunmuyor, ancak hızlı bir Google araması IronAHK ( http://www.ironahk.net/ ) olmadığını gösteriyor. henüz mevcut belgeler, ancak hile yapabilir.


Bağlantı artık çalışmıyor.
Antonín Procházka
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.