Komut satırında X tuşunu ve işaretçi tutamaçlarını değiştirme


20

X sunucusu yakalayıcılarını listelemek ve yönetmek için hangi komut satırı araçları vardır? (Bu anahtar ve işaretçi kapmak gibi kapmak, yani belirli bir uygulama için belirli bir tuş veya fare düğmesinin kullanımını kısıtlamak veya belirli bir ekran alanında kalmak için fare işaretçisini daraltmak.) Ben varsayımsal bir xgrabyardımcı programı arıyorum gibi şeyleri göster

Key     0x00f00ba5  0x123   0
Button  0x00f00ba5  2       
Pointer 0x00abcdef  

bir çağrı olduğuna dair anlam XGrabKey(display, 0x123, 0, 0x00f00ba5, ...)ve böylece ile ilgili XGrabButton, XGrabPointer, XGrabKeyboard, XGrabServer(mümkünse). Görüntü formatı önemli değil, istediğim, kimin ne aldığını görmenin bir yolu ve muhtemelen bu kapmaları iptal etmenin bir yolu (mümkünse, X11 API'nin buna izin verip vermediğinden emin değilim).

Yanıtlar:


21

X'in son sürümleri (X.org sunucusu ≥1.11) bu işlemde tanıtılan birkaç hata ayıklama tuş takımını destekler . Tetiklendiğinde, bunlar kepçelerle ilgili eylemleri gerçekleştirir.

Varsayılan olarak ( en azından son sürümlerde ), bunlar devre dışıdır (varsayılan tuş haritasından yoksundur).

Eğer varsa Ancak, xdotoolyüklü, o ise komut satırında yürüterek, onları aramak için mümkün:

xdotool key NameOfKey

NameOfKeyetkinleştirmek istediğiniz tuş takımı nerede . Örneğin, X sunucu günlüğüne etkin yakalayıcıların bir listesini yazdırmak için kullanın xdotool key XF86LogGrabInfo.

İlgili anahtar kelimeler:

XF86LogGrabInfoŞu anda basılmamış olan bir tuştaki yakalama gibi pasif yakalayıcıları değil , yalnızca etkin yakalayıcıları listelediğini unutmayın . Pasif bir tutuş hakkında bilgi almak xdotool key XF86LogGrabInfoistiyorsanız, ilginizi çeken tuş akoruna veya fare düğmesi kombinasyonuna basılıyken kapmayı etkinleştirmeniz gerekir . Gibi bir şey yapın:

  1. Koşmak sleep 1; xdotool key XF86LogGrabInfo
  2. 1 saniye içinde tuş akoruna veya fare düğmesi kombinasyonuna basın.
  3. 1 saniye sonra tuşu / düğmeyi bırakın.
  4. X sunucusu günlüğündeki “Active grab…” bilgilerini kontrol edin (sık sık /var/log/Xorg.0.log).

2
Deborg üzerinde Xorg 1.12.4 ile test xdotool key XF86LogGrabInfoedildiğinde, X günlüğünde yalnızca iki giriş tetiklenir: “Şu anda etkin olan tüm aygıt yakalayıcılarını yazdırma:” hemen ardından “Etkin aygıt yakalayıcılarının son listesi”. Yine de pencere yöneticim bir sürü anahtar tutuyor. Bu işi yakalanmış anahtarlar için gördün mü?
Gilles 'SO- kötü olmayı kes'

4
@Gilles - hayır, böyle çalıştırırsanız herhangi bir çıktı elde edemezsiniz ... ile çalıştırmayı deneyin sleep 2; xdotool key "XF86LogGrabInfo"ve hemen bir tuşa (örneğin "Win" tuşu) çok hızlı basmaya başlayın, sonra bazı çıktılar göreceksiniz Xorg.log. Veya xdotooltuşlarını + tuşlarına XF86LogGrabInfoaynı anda basmak için kullanın , burada olduğu
don_crissti

@don_crissti Ah, anlıyorum, XF86LogGrabInfosadece şu anda basılan bir tuş hakkında bilgi yazdırıyor mu? Bu onun kullanışlılığını sınırlar. Terminolojiyi doğru anlarsam, tüm kapmakları - pasif kapmaları listelemek istiyorum.
Gilles 'SO- kötü olmayı bırak

Muhtemelen bunu, sanal bir klavye olmadan, tuş kombinasyonlarının yazılı kapsamlı bir aramasıyla birleştirmenin akıllıca bir yolu vardır. Kesinlikle bilgimin dışında.
Adam Katz

Teşekkürler! Bu xfsettingsdbenim Win+ Lkısayolumu çaldığını keşfetmeme yardımcı oldu .
Mikel

8

Mevcut olabilecek tek bir tuşun veya düğmenin pasif kepçeleri 1 için elden hiçbir şey bilmiyorum , ancak tüm klavyenin veya fare cihazının aktif kapmalarını listelemek için birkaç yol var.

  1. Tüm platformlarda, ancak yalnızca Xorg 1.11 ve sonraki sürümleriyle (veya düzeltme eki uygulanmış daha eski bir sürümle), yakalama verilerini bu düzeltme eki notlarında açıklandığı gibi günlüğe dökmek için kısayol tuşlarını eşleyin .
  2. Solaris 11'de (Solaris 11 Express 2010.11 veya gerçek Solaris 11 sürümü), X Sunucusundan Bilgi Alma /usr/demo/Xserver/mdb/list_Xserver_devicegrab_clientbölümünde açıklandığı gibi hata ayıklayıcı komut dosyalarını kullanın . Burada Xorg 1.11 kısayol tuşlarının şu anda kapsamadığı sunucu kapmak için de bir tane var.

1 Aktif ve pasif kapmaların tanımı için http://tronche.com/gui/x/xlib/input/pointer-grabbing.html adresine bakın .


4

Bu Mekanik salyangozun cevabına bir ektir -

Xorg günlüğündeki girdiler çözülemez. Onları ayrıştıran ve insan tarafından izlenebilir bir biçimde sunan bir program yazdım:

https://gist.github.com/CyberShadow/6412d11aea64144f8905cc0b8196f38e

Kullanmak için önce xdotool key XF86LogGrabInfoMekanik salyangoz cevabında açıklandığı gibi çalıştırın . Ardından, yukarıda bağlantılı programı çalıştırın. Xorg günlük dosyası adresinde bulunmuyorsa /var/log/Xorg.0.log, --xorg-logseçeneğini kullanarak konumunu belirleyebilirsiniz . Ayrıntılar --helpiçin bakınız.


1
Burada belirtilen öz, D dilinde programlanmıştır. Yürütülebilir bir dosya elde etmek için, paketler gdc(GNU D derleyici) kurulabilir ve libx11-devdaha sonra çalıştırılabilir gdc -o xorg-show-grabs xorg-show-grabs.d -lX11.
Stéphane Gourichon
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.