LINUX.ORG.RU

Где взять названия клавиш для каждого keycode клавиатуры?

 , ,


0

2

Нагуглил только подобное: http://kbdedit.com/manual/low_level_vk_list.html

но эта таблица врёт (устарела): так, например, на самом деле keycode «А» не 0x41, а 0x26

остальные номера клавиш тоже не совпадают

возможно, уже где-то есть готовые либы, правильно переводящие keycode в name

★★★★★

Последнее исправление: cetjs2 (всего исправлений: 1)

но эта таблица врёт (устарела): так, например, на самом деле keycode «А» не 0x41, а 0x26

ты не различил ascii keycode и scan keycode

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

На сколько я понял - кейсуммы есть в иксовом keysymdef.h. Соотвествие кейкода (это код клавиши, который с клавиатуры пришел в ядро) кейсумме (это то к чему привязан кейкод в иксах) определяет xmodmap через список соответствия кода с клавиатуры символу в раскладке через /usr/share/X11/xkb/symbols/<локаль> . А вот как интерпретировать сигналы с клавиатуры уже зависит от того, какой тип клавиатуры выбран, и список кодов клавиатуры в связке с "кодами", которые потом можно при помощи локали замаппить в кейкоды, можно посмореть в файлах /usr/share/X11/xkb/keycodes/<модель клавиатуры>.

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

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

/usr/share/X11/xkb/keycodes/<модель клавиатуры>.

там какие-то не те коды

/usr/share/X11/xkb/symbols/<локаль>

там с локалью, а мне надо без

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

там какие-то не те коды

Там соответствие "сигнала" клавиатуры какому-то иксовоу коду, который потом через локаль маппится в символ.

там с локалью, а мне надо без

У тебя задача какая? Собрать список вида "a = 0x26"? Тогда без локали у тебя не получится.

Смотри - берем из /usr/share/X11/xkb/keycodes/xfree86 строку <AC01> = 38; (38 = 0x26). Потом смотрим в локаль - для qwerty ru это key <AC01> { [ Cyrillic_ef, Cyrillic_EF ] }; , для qwerty us это key <AC01> { [ a, A ] };

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

Хочу добавить: можно дампнуть полный текущий конфиг xkb в файл

$ xkbcomp $DISPLAY ~/.xkb/symbols/my_layout.xkb

Там будет вся инфа, а не размазана по куче xkb инклудов. Я здесь с xkb упражнялся Настройка XKB

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

Задача собрать список вида «LeftArrow = 0x69», «F20 = 0x50»

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

она не соответствует реальным сканкодам

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

Опять же, коды стрелок не совпадают (хотя многие остальные клавиши - вроде да)

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

Да, вот тут, похоже, коды правильные. Спасибо.

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

никак не согласуется с теми кодами, которые я получаю на практике

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

Что посылает ядро можно посмотреть sudo evtest

Event: time 1588941548.149516, type 1 (EV_KEY), code 30 (KEY_A), value 1

вот иксовый код из xev той же клавиши A

state 0x10, keycode 38 (keysym 0x61, a), same_screen YES,
anonymous
()
Ответ на: комментарий от anonymous

к слову, а в mir|wayland такие же коды, как в иксах или другие?

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

Тебе теорию надо курить сильно, ты не понимаешь что делаешь и как оно работает. Можешь вот это почитать для затравки.

А вообще дело в том, что куча абстракций навёрнуто между нажатием a и получением буквы a в посте на ЛОР-е. Сначала драйвер клавиатуры в общем случае какой-то код получает и как-то обменивается с железкой, потом отдаёт коды ядру линукса, преобразуя их в те, о которых знает ядро (смотри input-event-codes.h), на который тебе дали ссылку. Поверх этого могут крутиться иксы или вяленый, они коды от ядра уже в свои преобразуют (ты иксовые ищешь, боюсь в вяленом другие могут быть), поверх этого текстовой редактор сохраняет коды некоторых клавиш согласно кодировке... Это если грубо подумать опираясь на то, что иксы и вяленый не только на ядре linux-а работать должны. За детали реальной реализации не ручаюсь, т.к. не копался глубоко и это по сути только догадки.

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

Нет, я общий смысл понимаю. Мне просто нужна таблица соответствия кейкодов названию клавиши. Обратите внимание, не символу, а названию - у Esc, например, нет символа, но есть название.

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

насколько я понимаю, они все переводятся ядром/иксами к неким стандартным кодам

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

ты не дёргаешь nativeScancode()

разумеется, его и дёргаю: QKeyEvent::key() фейлится при смене раскладки клавиатуры, нажатом шифт (по очевидным причинам) и других подобных ситуациях

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

Полуркав, я действительно пришёл к выводу, что Qt не имеет решения для того, что ты хочешь. Более того, он даже не имеет решения для нескучных латинских раскладок.

Полноценного кроссплатформенного решения я тут не вижу, кроме как переработать свои хотелки под возможности Qt.

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