Как изменить раскладку одного устройства (ведущий Logitech)?

19

Мой ведущий Logitech R400 отправляет следующие коды клавиш:

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)

В принципе, я хочу использовать этого ведущего для удаленного управления Banshee, поэтому я бы хотел перенаправить Prior на B , Next на N и т. д.

Как я могу изменить раскладку только для этого устройства (поскольку я, разумеется, не хочу переназначать эти коды клавиш по всему миру)?

    
задан htorque 20.10.2011 в 14:51
источник

2 ответа

15

Я никогда этого не делал, но я думаю, вам нужно создать файл ключевой карты в /lib/udev/keymaps/ и добавить правило для вашего устройства в /lib/udev/rules.d/95-keymap.rules

Подробнее:

  • Клавиатура udev сопоставляет коды сканирования с кодами клавиш, поэтому вам нужно найти оба файла для создания файла раскладки. Чтобы найти коды сканирования, выполните следующие действия и нажмите кнопки на устройстве:

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

    Возможно, вам понадобится попробовать разные цифры для события . Результат должен выглядеть следующим образом:

    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
    

    Список кодов ключей можно найти здесь .

    Теперь создайте файл ключевой карты (я храню его как / lib / udev / keymaps / logitech-r400 ):

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

    Не делает ничего полезного - просто тест, чтобы легко увидеть, работает ли он.

  • Чтобы временно проверить новую раскладку клавиатуры, запустите:

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

    , который должен привести к выходу следующим образом:

    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)
    

    Теперь кнопки должны изменить яркость.

  • Если вы хотите, чтобы это изменение было постоянным, вам нужно добавить правило udev к /lib/udev/rules.d/95-keymap.rules , которое применяет файл раскладки клавиатуры к устройству.

    1. Откройте файл: gksudo gedit /lib/udev/rules.d/95-keymap.rules
    2. В нижней части файла, но до строки LABEL="keyboard_end" добавьте:

      ENV{ID_VENDOR}=="Logitech*", ATTRS{idProduct}=="c52d", RUN+="keymap $name logitech-r400"
      
    3. Сохранить, закрыть и после перезагрузки кнопки должны изменить яркость.

ответ дан Florian Diesch 22.10.2011 в 18:38
источник
3

Я на Ubuntu 16.04. Я сделал путеводитель здесь

Detecting with evtest

sudo evtest

Look at the device list :

/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"

Took the first "Logitech USB Receiver", here it has event id 9.

Testing ... (interrupt to exit)

OK now evtest wants inputs, just click on the Logitech remote buttons, I got this (simplified):

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

Note: I discovered after that clicking multiple times on [>] was giving 7003e, then 70029, then 7003e, etc. I don't know why.

Modifying udev conf

Now that we have input codes, let's have a look at udev conf:

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

Search for "R400" and replace presentation & displaytoggle by what you want, playpause & stopcd arrow keys:

# 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"

As previously noted, because 07003e & 070029 are the same button, I gave them the same output up key. The 7004b & 7004e does not appear here by default, maybe because they are native PAGEUP & PAGEDOWN inputs and not related to "Logitech Presenter R400". Let's add them:

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

Here is my final 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"

Reloading (new) rules

sudo udevadm hwdb --update

Then by using the same event id we chose before, here event id 9:

sudo udevadm trigger /dev/input/event9

You can check this new mapping in a web browser, for example:

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

That gave me:

[>] ArrowUp
[ ] ArrowDown
 <  ArrowLeft
 >  ArrowRight
    
ответ дан Ssh-uunen 26.01.2017 в 11:28