Настройка горячих клавиш клавиатуры с одинаковыми кодами сканирования и разными клавишами

У меня есть блютуз клавиатура Samsung bkb10. В основном это клавиатура для andoind, поэтому она не имеет alt, super(winkey), f1-f12, menu, но имеет много горячих клавиш (большинство из них хорошо работают под linux). Но некоторые горячие клавиши не работают, и я хочу, чтобы они вели себя как alt, f1-f12, menu. Также мне нужны функции горячих клавиш, поэтому я бы хотел сделать что-то вроде кнопки Fn для горячих клавиш. Ну, это все, что я хочу. По крайней мере, мне нужны alt,super,menu и f1-f12, я не мог себе представить, что это так сложно без них под Linux. Итак, я пытался использовать keytouch - не повезло. Он умеет читать правильный keysym, но keytouch-редактор сохраняет только часть его в свои файлы клавиатуры, и кажется, что необходимые клавиши такие же, как и для keytouch. Во всяком случае, я не видел, что это работает для меня вообще, даже при том, что многие клавиши работают одинаково. Прямо сейчас клавиши, которые я хочу сделать как Alt, super, menu, вообще не работают, имеют одинаковые коды сканирования, но имеют разные клавишные символы:

xev показывает то же самое для некоторых горячих клавиш, которые не работают:

KeyRelease event, serial 39, synthetic NO, window 0x5400001,
root 0xf5, subw 0x0, time 12647284, (224,225), root:(224,253),
state 0x0, keycode 248 (keysym 0x0, NoSymbol), same_screen YES,
XLookupString gives 0 bytes: 
XFilterEvent returns: False

Но kacpimon могут распознать их кейсы и то, что это разные ключи:

Input Layer:  Type: 4  Code: 4  Value: 787205
Input Layer:  Type: 1  Code: 240  Value: 0
Input Layer:  Sync
Input Layer:  Type: 4  Code: 4  Value: 787207
Input Layer:  Type: 1  Code: 240  Value: 1
Input Layer:  Sync

Такой же как getscancodes:

787205 (0xc0305)
787205 (0xc0305)
787207 (0xc0307)
787207 (0xc0307)

sudo evtest /dev/input/evt14 вывод для тех же ключей:

Event: time 1457614378.384393, type 4 (EV_MSC), code 4 (MSC_SCAN), value c0305
Event: time 1457614378.384393, type 1 (EV_KEY), code 240 (KEY_UNKNOWN), value 1
Event: time 1457614378.384393, -------------- SYN_REPORT ------------
Event: time 1457614378.384420, type 4 (EV_MSC), code 4 (MSC_SCAN), value c0305
Event: time 1457614378.384420, type 1 (EV_KEY), code 240 (KEY_UNKNOWN), value 0
Event: time 1457614378.384420, -------------- SYN_REPORT ------------
Event: time 1457614378.681877, type 4 (EV_MSC), code 4 (MSC_SCAN), value c0307
Event: time 1457614378.681877, type 1 (EV_KEY), code 240 (KEY_UNKNOWN), value 1
Event: time 1457614378.681877, -------------- SYN_REPORT ------------
Event: time 1457614378.775600, type 4 (EV_MSC), code 4 (MSC_SCAN), value c0307
Event: time 1457614378.775600, type 1 (EV_KEY), code 240 (KEY_UNKNOWN), value 0
Event: time 1457614378.775600, -------------- SYN_REPORT ------------

Как вы можете видеть, сканкоды одинаковы даже в kacpimon, но кейсимы разные в kacpimon, getscancode, evtest для каждого ключа, но не для xev и другие инструменты. Также я думаю, что getscancodes на самом деле показывает KeySyms, но не ScanCode для них. Я знаю, что xmodmap старый, и я не должен использовать, и что я должен xkb. Я смог найти какой-нибудь ответ, который мог бы помочь мне, если бы я не был noob - Пользовательские раскладки клавиатуры: добавление символа, для которого не определен keysym. Также эта ссылка может быть полезной, но она устарела, поэтому я не могу ее проверить - Дон не используйте showkey или xev - используйте вместо этого udev и evtest.

Но я не могу сделать это с помощью xkb или xmodmap, я просто не могу понять как. Пожалуйста, помогите мне, работая над этим в течение 3 полных дней, и до сих пор не нашли никакого решения... Большое спасибо!

1 ответ

Решение

Хорошо, решение было найдено здесь: сделайте ползунок масштабирования Microsoft Natural Ergonomic Keyboard 4000 и 7000 прокруткой вверх и вниз в 14.04 (Trusty) Прочитайте последний комментарий. Оказалось, что evtest действительно мощный, и он может показывать и сканкоды. Прочитайте /lib/udev/hwdb.d/60-keyboard.hwdb очень внимательно, мне пришлось прочитать его 100 раз, чтобы он заработал. Если вам нужно преобразовать свой гекс в 4-значный шестнадцатеричный код, я использовал это - http://www.binaryhexconverter.com/hex-to-decimal-converter

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