Tek bir cihazın tuş haritasını nasıl değiştiririm (Logitech sunucusu)?


20

Logitech R400 sunucum aşağıdaki anahtar kodları gönderir:

keycode 112 (keysym 0xff55,  Prior) [page up]
keycode 117 (keysym 0xff56,   Next) [page down]
keycode  60 (keysym   0x2e, period)
keycode  71 (keysym 0xffc2,     F5)
keycode   9 (keysym 0xff1b, Escape)

Temelde, ben yeniden eşleştirmek istiyorum böylece uzaktan Banshee kontrol etmek için bu sunum kullanmak istiyorum Prioriçin B, Nextiçin N, vb.

Yalnızca bu cihazın tuş haritasını nasıl değiştirebilirim (kesinlikle bu anahtar kodları genel olarak yeniden eşlemek istemiyorum)?


AFAIU "köle işaretçisi" bir fare değil, bir klavye anlamına gelir. Bir tuş haritasını bir fareye yükleyemezsiniz. Bunlar gerçekten xinput listesinde bulunan tek cihaz mı?
Marius Gedminas

@MariusGedminas / dev / input / eventX aygıtlarından geçmem gerekiyordu ve event5 sunucudaydı, bu yüzden sonuçta bir "klavye" gibi görünüyor.
htorque

Yanıtlar:


15

Bunu hiç yapmadım, ancak /lib/udev/keymaps/cihazınıza bir anahtar eşlem dosyası oluşturmanız ve bir kural eklemeniz gerektiğini düşünüyorum ./lib/udev/rules.d/95-keymap.rules


Detaylar:

  • Bir udev keymap, tarama kodlarını tuş kodlarına eşler, bu nedenle keymap dosyasını oluşturmak için ikisini de bulmanız gerekir. Tarama kodlarını bulmak için aşağıdakini çalıştırın ve cihazdaki düğmelere basın:

    sudo /lib/udev/keymap -i input/event5
    

    Etkinlik için farklı numaralar denemeniz gerekebilir * . Çıktı şöyle görünmelidir:

    scan code: 0x70037   key code: dot
    scan code: 0x70029   key code: esc
    scan code: 0x7003E   key code: f5
    scan code: 0x7004B   key code: pageup
    scan code: 0x7004E   key code: pagedown
    

    Anahtar kodların bir listesi burada bulunabilir .

    Şimdi keymap dosyasını oluşturun ( / lib / udev / keymaps / logitech-r400 olarak saklıyorum ):

    0x70037 brightnessdown
    0x70029 brightnessup
    0x7003E brightnessdown
    0x7004B brightnessup
    0x7004E brightnessdown
    

    Yararlı bir şey yapmaz - sadece çalışıp çalışmadığını kolayca görmek için bir test.

  • Yeni tuş haritasını geçici olarak test etmek için şunu çalıştırın:

    sudo /lib/udev/keymap input/event5 /lib/udev/keymaps/logitech-r400
    

    Bunun gibi çıktıya yol açması gerekir:

    Remapped scancode 0x70037 to 0xe0 (prior: 0x34)
    Remapped scancode 0x70029 to 0xe1 (prior: 0x01)
    Remapped scancode 0x7003e to 0xe0 (prior: 0x3f)
    Remapped scancode 0x7004b to 0xe1 (prior: 0x68)
    Remapped scancode 0x7004e to 0xe0 (prior: 0x6d)
    

    Düğmeler şimdi parlaklığı değiştirmelidir.

  • Bu değişikliği kalıcı hale getirmek istiyorsanız /lib/udev/rules.d/95-keymap.rules, cihaza keymap dosyasını uygulayan bir udev kuralı eklemeniz gerekir .

    1. Dosyayı aç: gksudo gedit /lib/udev/rules.d/95-keymap.rules
    2. Dosyanın altına, ancak LABEL="keyboard_end"satırdan önce şunu ekleyin:

      ENV{ID_VENDOR}=="Logitech*", ATTRS{idProduct}=="c52d", RUN+="keymap $name logitech-r400"
      
    3. Kaydet, kapat ve yeniden başlattıktan sonra düğmeler parlaklığı değiştirmelidir.


Ah, bunu nasıl unutabilirim (/ lib / udev / keymaps / zepto-znote bana katkıda bulundu: D). Daha sonra cevabınıza nasıl çalıştığım hakkında daha fazla şey ekleyeceğim.
htorque

Sadece bu cevaba eklemek istedim, klavyenizin çalıştığı "eventX" ini sıfırlayabilirsiniz /lib/udev/findkeyboards. Bu, o anda takılı olan klavyelerin tümünü listeler, böylece çok fazla denemenize gerek kalmaz. Logitech R400 benim için "USB klavye: giriş / olay11" olarak geldi.
jat255

Güzel cevap, ancak kullanılacak ID_VENDOR ve idProduct öğelerini nasıl bulabilirim? Denedim /sys/class/dmi/id/sys_vendorve /sys/class/dmi/id/product_nameancak işe yaramadı.
PutzKipa

2
/lib/udev/keymapve /lib/udev/findkeyboardsartık 13.10'da yok. forum.ubuntu-fr.org/viewtopic.php?id=1395051 , bunun yerine en içten kullanacağınızı söylüyor.
Stéphane Gourichon

6
Merhaba @htorque, cevabı yeni yöne güncelleyebilir misiniz? Ubuntu Trusty'de tüm bu dosyalar artık mevcut değil. İnternette gördüğüm tek kişi aynı isme sahipsin.
londumas

4

16.04 Ubuntu'dayım. Ben burada rehberlik ettim

Evtest ile algılama

sudo evtest

Cihaz listesine bak:

/dev/input/event0:  Lid Switch
/dev/input/event1:  Power Button
/dev/input/event2:  Sleep Button
/dev/input/event3:  Power Button
/dev/input/event4:  AT Translated Set 2 keyboard
/dev/input/event5:  Video Bus
/dev/input/event6:  USB Optical Mouse
/dev/input/event7:  AlpsPS/2 ALPS DualPoint Stick
/dev/input/event8:  AlpsPS/2 ALPS DualPoint TouchPad
/dev/input/event9:  Logitech USB Receiver
/dev/input/event10: Logitech USB Receiver
/dev/input/event11: HDA Intel PCH Dock Mic
/dev/input/event12: HDA Intel PCH Headset Mic
/dev/input/event13: HDA Intel PCH Dock Line Out
/dev/input/event14: HDA Intel PCH Headphone
/dev/input/event15: HDA Intel PCH HDMI/DP,pcm=3
/dev/input/event16: HDA Intel PCH HDMI/DP,pcm=7
/dev/input/event17: HDA Intel PCH HDMI/DP,pcm=8
/dev/input/event18: Integrated Webcam
/dev/input/event19: Dell WMI hotkeys
Select the device event number [0-19]: 9
Input driver version is 1.0.1
Input device ID: bus 0x3 vendor 0x46d product 0xc52d version 0x111
Input device name: "Logitech USB Receiver"

İlk "Logitech USB Alıcısı" aldı, burada 9 olay kimliği var.

Testing ... (interrupt to exit)

Tamam şimdi evtest giriş istiyor, sadece Logitech uzaktan kumanda düğmelerine tıklayın, şunu anladım (basitleştirilmiş):

[>] value 7003e (KEY_PRESENTATION)
[>] value 70029 (KEY_PRESENTATION)
[ ] value 70037 (KEY_DISPLAYTOGGLE)
 <  value 7004b (KEY_PAGEUP)
 >  value 7004e (KEY_PAGEDOWN)

Not: Bundan sonra [>] işaretini defalarca tıklattıktan sonra 7003e, sonra 70029, sonra 7003e, vb. Verdiğimi keşfettim.

Udev conf'i değiştirmek

Şimdi giriş kodlarımız var, hadi udev conf'a bir göz atalım:

sudo gedit /lib/udev/hwdb.d/60-keyboard.hwdb

"R400" kelimesini aratın ve sunum & göstergeyi istediğinize göre değiştirin, playpause ve stopcd ok tuşları:

# Logitech Presenter R400
evdev:input:b0003v046DpC52D*
 KEYBOARD_KEY_070029=playpause    # bottom  left [>] was "presentation"   
 KEYBOARD_KEY_07003e=playpause    # bottom  left [>] was "presentation"  
 KEYBOARD_KEY_070037=stopcd       # bottom right [ ] was "displaytoggle"

Daha önce belirtildiği gibi 07003e & 070029 aynı düğme çünkü, onları aynı çıktıyı verdi yukarı tuşu. 7004b & 7004e burada varsayılan olarak görünmüyor, çünkü bunlar yerel PAGEUP & PAGEDOWN girişleridir ve "Logitech Presenter R400" ile ilgili değildir. Onları ekleyelim:

 KEYBOARD_KEY_07004b=previoussong #    top  left  <
 KEYBOARD_KEY_07004e=nextsong     #    top right  >  

İşte benim son conf:

 KEYBOARD_KEY_07004b=previoussong #    top  left  <
 KEYBOARD_KEY_07004e=nextsong     #    top right  >
 KEYBOARD_KEY_070029=playpause    # bottom  left [>] was "presentation"
 KEYBOARD_KEY_07003e=playpause    # bottom  left [>] was "presentation"
 KEYBOARD_KEY_070037=stopcd       # bottom right [ ] was "displaytoggle"

Yeniden yükleme (yeni) kuralları

sudo udevadm hwdb --update

Daha sonra seçtiğimiz olay kimliğini kullanarak, olay kimliği 9:

sudo udevadm trigger /dev/input/event9

Bu yeni eşlemeyi bir web tarayıcısında kontrol edebilirsiniz, örneğin:

$('body').on('keydown', function(e){ console.log(e.key) })

Bu bana verdi:

[>] ArrowUp
[ ] ArrowDown
 <  ArrowLeft
 >  ArrowRight

GitHub'dan orijinal logitech-r400-remap.md rehberinizde bazı küçük iyileştirmeler yaptım. İsterseniz bunları değiştirmek veya GitHub web sayfanıza düzenlemek için lütfen çekinmeyin (bana atıfta bulunulması gerekmez). Cevabınız reddedildi, çünkü bence sadece bir link oldu, bu yüzden ben de reddetti.
karel

Alt bölümler kaldırılmıştır, bu nedenle şimdi cevabınız, buradaki diğer cevaplar gibi, kendi yararına değerlendirilme şansına sahiptir.
karel

1
Rehberini kullan. Bir cazibe gibi çalıştı:)
Costa
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.