Як змінити карту клавіш одного пристрою (презентатор 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і так далі.

Як я можу змінити карту клавіш лише для цього пристрою (оскільки я, звичайно, не хочу переробляти ці ключові коди в усьому світі)?


AFAIU "підлеглий покажчик" означає, що це миша, а не клавіатура. Ви не можете завантажити мапу клавіатури на миші. Це справді єдині пристрої в списку xinput?
Маріус Гедмінас

@MariusGedminas Мені довелося пройти / dev / input / eventX пристрої, а event5 був ведучим, тому, здається, це "клавіатура".
htorque

Відповіді:


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-snete сприяв мене: D). Пізніше я додам більше про те, як я змусив це працювати на вашу відповідь.
htorque

Просто хотілося додати до цієї відповіді, що ви можете запустити нуль на те, яким "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 замість цього.
Stéphane Gourichon

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 приймач", тут він має ідентифікатор події 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:

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

Я зробив кілька невеликих удосконалень у вашому оригінальному посібнику з logitech-r400-remap.md від GitHub. Будь ласка, можете або змінити їх, або відредагувати їх на своїй GitHub веб-сторінці, якщо ви хочете (жодне приписування мені не потрібно). Ваша відповідь була оскаржена, оскільки це була відповідь лише на посилання, на мій погляд, тому я також відкинув нижчу заявку.
карел

Примітки видалено, тому тепер ваша відповідь має можливість розглядатись по суті, як і будь-яка інша відповідь тут.
карел

1
Використовували свій путівник. Працював як шарм:)
Коста,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.