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

20

Мой докладчик 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
источник
AFAIU "подчиненный указатель" означает, что это мышь, а не клавиатура. Вы не можете загрузить карту клавиш на мышь. Это действительно единственные устройства, присутствующие в списке xinput?
Мариус Гедминас
@MariusGedminas Мне нужно было пройтись по устройствам / dev / input / eventX, а event5 был ведущим, так что в конце концов он кажется «клавиатурой».
htorque 22.10.11

Ответы:

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

Флориан Диш
источник
О, как я мог забыть об этом (/ lib / udev / keymaps / zepto-znote предоставлен мной: D). Позже я добавлю больше о том, как я заставил это работать к вашему ответу.
htorque 22.10.11
Просто хотел добавить к этому ответу, что вы можете сосредоточиться на том, «eventX» может быть ваша клавиатура при запуске /lib/udev/findkeyboards. Это перечислит все подключенные в данный момент клавиатуры, так что вам не придется так много пробовать. Logitech R400 показался мне как «USB-клавиатура: ввод / событие11».
jat255
Хороший ответ, но как мне узнать ID_VENDOR и idProduct для использования? Я попробовал /sys/class/dmi/id/sys_vendorи , /sys/class/dmi/id/product_nameно это не сработало.
PutzKipa
2
/lib/udev/keymapи /lib/udev/findkeyboardsбольше не существует 13.10. forum.ubuntu-fr.org/viewtopic.php?id=1395051 говорит, что вместо этого следует использовать evtest.
Стефан Гурихон
6
Здравствуйте @htorque, не могли бы вы обновить ответ по-новому? В Ubuntu Trusty все эти файлы больше не существуют. Вы единственный, кого я видел в сети с таким же иском.
londumas
4

Я на 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» и замените переключатель презентации и отображения на то, что вам нужно, клавиши со стрелками для воспроизведения и остановки воспроизведения :

# 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 и 070029 одни и те же кнопки, я дал им тот же результат до ключа. 7004b и 7004e не отображаются здесь по умолчанию, возможно, потому что они являются собственными входами PAGEUP и 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
Ssh-uunen
источник
Я сделал несколько небольших улучшений в вашем оригинальном руководстве logitech-r400-remap.md от GitHub. Пожалуйста, не стесняйтесь либо изменить их, либо отредактировать на своей веб-странице GitHub, если вы хотите (указание авторства не требуется). Ваш ответ был отклонен, потому что, по моему мнению, это был ответ только по ссылке, поэтому я также отменил отрицательный ответ.
Карел
Выражения были удалены, так что теперь ваш ответ имеет возможность рассматриваться по существу, как и любой другой ответ здесь.
Карел
1
Использовал ваш гид. Работал как шарм:)
Коста