LINUX.ORG.RU
ФорумAdmin

А есть ли способ переиначить все кнопки на USB клавиатуре?

 , , ,


3

7

Есть у меня вот такая штука https://mdata.yandex.net/i?path=b0930224251_img_id4131136312478775170.jpeg

Хочется сделать из нее эдакую сокращенную нажималку клавиш - забиндить на все кнопки вызов каких либо приложений, старт браузера например. При этом забиндить исключительно на это устройство, например если забиндить что-то на кнопку «1» то на нумпаде основной клавиатуры кнопка «1» должна работать в нормальном режиме.

★★★★★

Почему нет? Но конечно лучше выкинуть.

anonymous
()

Оо, я и забыл, что у меня тоже такая есть. Только от Canyon. Подпишусь :)

YAR ★★★★★
()
Ответ на: комментарий от SZT

Да, я такое тоже нагугливал. Вроде как делается через «xinput --create-master SecondKeyboard» но у меня такие манипуляции вызывают следующие эффекты:

1. появляется дополнительный курсор посреди экрана, который мерзко мерцает.

2. при реаттаче нужного юсб-девайса к «SecondKeyboard» и попытке забиндить на него сокращенные клавиши получается то же самое как и до манипуляций с xinput - хоткеи срабатывают и на дополнительной и на основной клавиатуре, а не только на дополнительной.

Может как-то есть способ через udev провернуть, чтобы системой все кнопки на устройстве распознавались как нечто левое, а не стандартная клавиатура?

Siado ★★★★★
() автор топика
Последнее исправление: Siado (всего исправлений: 1)

Пока сообразил такой рецепт:

1. Определяем наше устройство с помощью lsusb:

# Bus 008 Device 015: ID 0566:3017 Monterey International Corp. 

2. Определяем HEX-значения кнопок, которые хотим переиначить:

# evtest /dev/input/by-id/usb-0566_3017-event-kbd
...
Testing ... (interrupt to exit)
Event: time 1479683706.481100, type 4 (EV_MSC), code 4 (MSC_SCAN), value 70054
Смотрим значение value для нажатой кнопки

3. Создаем свой свой конфиг для udev для нашего устройства:

# vi /etc/udev/hwdb.d/70-keyboard.hwdb

keyboard:usb:v0566p3017*
 KEYBOARD_KEY_700e3=prog1
 KEYBOARD_KEY_70054=prog2
 KEYBOARD_KEY_70055=prog3
 KEYBOARD_KEY_7002a=prog4

4. Обновляем конфиги udev

# udevadm hwdb --update
После чего переподключаем устройство к USB и идем назначать нужные клавиши через IDE-шную назначалку хоткеев.

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

 KEYBOARD_KEY_<hex scan code>=<key code identifier>
Вся проблема в том, что похоже <key code identifier> ограничены в количестве, как создать свои keycode я не разобрался, нашел только те, которые у меня точно не используются - это prog[1-4], можно еще неиспользуемые поискать, но может кто подскажет как свои создавать?

Siado ★★★★★
() автор топика
Последнее исправление: Siado (всего исправлений: 1)
Ответ на: комментарий от Siado

Получить коды кнопок можно с помощью команды

xmodmap -pke

а потом использовать такую комбинацию:

KEYBOARD_KEY_70054=0xA9

где 0xA9 - это шестнадцатеричный код 169 :

keycode 169 = XF86Eject

Siado ★★★★★
() автор топика
Ответ на: комментарий от Deleted

Да, подобное и получилось. Осталось только узнать как самому кейкоды делать =)

Siado ★★★★★
() автор топика

Самый простой вариант, привязываешь клаву к Xephyr-у (Xephyr :2 -keybd evdev,,device=...),
в нем запускаешь свою любимую кей-биндилку (мой выбор, симлинк на urxvt и link_name.keysym.1: string:DISPLAY=:0 opera >& /dev/null &\n в .Xresources)

Недостатки: требуется Xephyr с поддержкой kdrive-evdev (не во всех дистрибутивах собирается с этой опцией) и 10 лишний мегабайт.

arson ★★★★★
()
Ответ на: комментарий от arson

Есть еще actkbd (не знаю насколько живо)

arson ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.