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

Мой докладчик 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 и т. Д.

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

20
задан 23 October 2011 в 00:06

2 ответа

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


Подробнее:

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

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

    Вы, возможно, должны были бы попробовать различные числа за event*. Вывод должен быть похожим на это:

    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. Сохраните, закройтесь, и после перезагрузки, кнопки должны изменить яркость.

15
ответ дан 23 October 2011 в 00:06

Я нахожусь на Ubuntu 16.04. Я сделал руководство здесь

Обнаружение с помощью evtest

sudo evtest

Посмотрите на список устройств:

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

Взял первый «Logitech USB Receiver», здесь он имеет идентификатор события 9.

Testing ... (interrupt to exit)

Хорошо, теперь evtest хочет вводить данные, просто нажмите на кнопки пульта Logitech, я получил это (упрощенно):

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

Примечание: Я обнаружил после этого нажатия нескольких раз [>] давал 7003e, затем 70029, затем 7003e и т. д. Я не знаю почему.

Изменение udev conf

Теперь, когда у нас есть входные коды, давайте взглянем на udev conf:

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

Найдите «R400» и замените презентацию & amp; дисплей переключается на то, что вы хотите, playpause & amp; stopcd клавиши со стрелками:

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

Как отмечалось ранее, потому что 07003e & amp; 070029 - это одна и та же кнопка, я дал им одинаковый выходной сигнал до . 7004b & amp; 7004e не появляется здесь по умолчанию, возможно, потому что они являются родными PAGEUP & amp; Входы PAGEDOWN и не относятся к «Logitech Presenter R400». Давайте добавим их:

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

Вот мой последний конф:

 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"

Перезагрузка (новые) правила

sudo udevadm hwdb --update

Затем, используя тот же идентификатор события, мы выбрал ранее, здесь идентификатор события 9:

sudo udevadm trigger /dev/input/event9

Вы можете проверить это новое отображение в веб-браузере, например:

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

Это дало мне:

[>] ArrowUp
[ ] ArrowDown
 <  ArrowLeft
 >  ArrowRight
0
ответ дан 23 October 2011 в 00:06

Другие вопросы по тегам:

Похожие вопросы: