Olaylar cihazından tuş girişini yakalama ve eşleme (Dokunmatik Yüzey tuşunun eşlemesini aç)


10

Ubuntu 13.10 yüklü bir Lenovo IdeaPad Yoga 13'üm var. Cihazın klavyesinde "Dokunmatik Yüzey Aç / Kapat" düğmesi vardır ( F5). Klavyenin F*düğmeleri ters çevrilmiş (bu yüzden + F5tuşuna Fnbasmam gerekiyor F5ve F5aslında geçiş tuşu).

Düğmenin aslında (belirli cihazlar gibi Dokunmatik Yüzey yerine) klavye tarafından okunduğunu öğrendim /dev/input/event3. Böylece sudo input-events 3düğmenin 190 tarama kodunu gönderdiğini anlayabildim:

Çıktı sudo lsinput:

/dev/input/event3
   bustype : BUS_I8042
   vendor  : 0x1
   product : 0x1
   version : 43907
   name    : "AT Translated Set 2 keyboard"
   phys    : "isa0060/serio0/input0"
   bits ev : EV_SYN EV_KEY EV_MSC EV_LED EV_REP

Çıktı sudo input-events 3:

23:13:03.849392: EV_MSC MSC_SCAN 190
23:13:03.849392: EV_SYN code=0 value=0
23:13:03.855413: EV_MSC MSC_SCAN 190
23:13:03.855413: EV_SYN code=0 value=0

xevBunun dışında başka hiçbir program (örneğin ) okuyamaz gibi görünüyor input-events. Dizüstü bilgisayarımdaki Dokunmatik Yüzey'i değiştirmesini sağlamak için bu düğmeyi eşlemenin bir yolu var mı? Öyleyse, bunu nasıl yapabilirim?

Yanıtlar:


7

Görüldüğü gibi çekirdek onu aldı, ancak tanınmadığından şikayet etti.

Bu sorunu yaşayan veya işletim sistemi tarafından okunmayan bir anahtarı eşlemek isteyen herkes için okumaya devam edin.

Bir terminal açın ve çalıştırın dmesg | grep -A 1 -i setkeycodes. Bu size bunun gibi birden fazla giriş verecektir:

[    9.307463] atkbd serio0: Unknown key pressed (translated set 2, code 0xbe on isa0060/serio0).
[    9.307476] atkbd serio0: Use 'setkeycodes e03e <keycode>' to make it known.

İlgilendiğimiz şey "setkeycode" dan sonraki onaltılık değerdir, bu durumda budur e03e. Bunlardan birden fazlasına sahipseniz, çalıştırabilirsiniz tail -f /var/log/kern.log. Bunu yaptıktan sonra, aradığınız düğmeye dokunabilirsiniz ve bu size yukarıdakiyle aynı satırı verecektir ve tekrar, yalnızca onaltılık değere ihtiyacımız var. Bunu not edin.

Şimdi çalıştırın xmodmap -pke | lessve uygun eşlemeyi bulun. Benim durumumda, dokunmatik yüzeyimi değiştirmek için bunu eşlemem gerekiyordu, bu da aşağıdaki çizgiyle ilgilendiğim anlamına geliyor:

keycode 199 = XF86TouchpadToggle NoSymbol XF86TouchpadToggle

İlgilendiğiniz şeyi bulamazsanız, özel eşlemeleri de tanımlayabileceğiniz için @Gilles yanıtını da okuyun, sonra okuyun (çekirdek okursa, xorg.conf dosyasına eklemeniz gerekmez. d)

Şimdi aşağıdaki komutu çalıştırılmadan: sudo setkeycodes [hexadecimal] [keycode]Bunu oldu benim durumumda: setkeycodes e03e 199.

Artık çalışıp çalışmadığını ve / veya doğru eşleşmeye sahip olup olmadığını test etmek için aşağıdaki satırı kullanabilirsiniz:

xev | grep -A2 --line-buffered '^KeyRelease' | sed -n '/keycode /s/^.*keycode \([0-9]*\).* (.*, \(.*\)).*$/\1 \2/p'

Bu komutu çalıştırdığınızda, yeni açılan pencereye ( xev) odaklanmanız ve konsol çıkışını kontrol etmeniz gerekir . Benim durumumda şöyle okuyun:

207 NoSymbol

Anahtar kodu istediğim gibi bu açıkça yanlıştı, 199bu yüzden eşlendi XF86TouchpadToggle. Tekrar kontrol xmodmap -pkeettim ve keycode 207gerçekten eşlendiğini NoSymbolfark ettim ve 8 ofset farkı olduğunu fark ettim, bu yüzden setkeycodeskomutu tekrar denedim , ancak anahtar eşleştirildi keycode 191.

sudo setkeycodes e03e 191

Bu mükemmel çalıştı.

EDIT - başlangıçta çalışmak zorunda verdiğim çözüm değil. Bunu yarın çözeceğim ve bu cevabı güncelleyeceğim. Şimdilik bunu başlangıçta manuel olarak çalıştırabileceğinizi düşünüyorum.


1
nasıl güzel bir şekilde kalıcı hale getirilir? (örn. sıfırlama / başlatma işleminden sonra)
vak

4

Görünüşe göre, cihaz bir klavyedir (yazılımda “çekirdek” klavyeden ayrı olarak tanınır), ancak X sunucusu onu dinlemiyor.

Altına bir Giriş bölümü eklemeyi/etc/X11/xorg.conf.d deneyin . Yani, /etc/X11/xorg.conf.dzaten yoksa bir dizin oluşturun extra-keyboard-buttonsve bu dizinde aşağıdakileri içeren bir dosya oluşturun.

Section "InputClass"
    Identifier "extra-keyboard-buttons"
    Driver "kbd"
    MatchProduct "AT Translated Set 2 keyboard"
EndSection

Bu MatchProductçizgiden emin değilim ; eğer işe yaramazsa, MatchXXXdirektiflerle uğraşmayı deneyin .

Bu dosya doğru bir şekilde kurulduktan sonra, X sunucusunu başlattığınızda, bu klavyedeki olayları xevişlemeli ve içindeki ve başka yerlerdeki olayları görmelisiniz . Anahtar kodunu not edin (bu durumda X11 anahtar kodunun donanım anahtar koduyla aynı olup olmayacağından emin değilim) ve bir keyfim ile ilişkilendirin. Bunu .Xmodmapana dizininizde adı verilen bir dosya ile

keycode 190 = XF86_Launch5

Artık bu tuşları kullanarak klavye kısayollarını tanımlayabilirsiniz .

Dokunmatik yüzeyi değiştirmek için komutu kullanın xinput. xinput listHangi giriş cihazlarının kullanılabilir olduğunu görmek için çalıştırın ve dokunmatik yüzeyinizin adını not edin ( Touchpadaşağıda arayacağım ). xinput list-props TouchpadÖzelliklerini listelemek için çalıştırın ; bunlardan biri yanında bir numara bulunan “Cihaz Etkin” olarak adlandırılmalıdır (örn. 135). Aşağıdaki komut dosyası dokunmatik yüzeyi değiştirir:

#!/bin/sh
device_name='Touchpad'
property=135
flipped_state=$(xinput list-props "$device_name" |
                awk "/\\($property\\)/ {print 1 - \$NF}")
xinput set-prop "$device_name" "$property" "$flipped_state"

Bunu bir dosyaya kaydedin ~/bin/toggle-touchpadve yürütülebilir ( chmod +x ~/bin/toggle-touchpad) yapın. Bir anahtara bağlamak için, xbindkeys komutunu yükleyin ve aşağıdaki satırları koyarak komut dosyanızı çalıştıracak şekilde yapılandırın ~/.xbindkeysrc:

"toggle-touchpad"
  XF86_Launch5

Cevap için teşekkürler. Bu maalesef işe yaramadı. Yine de çalıştım, bu yüzden kendi cevabım bir göz atmaktan çekinmeyin! :)
Hosh Sadiq
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.