Linux get key code

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

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

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

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

на самом деле keycode «А» не 0x41, а 0x26

Можно посмотреть откуда их xev берет — keycode 38 (keysym 0x61, a)

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

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

из функции XKeysymToString — осталось понять, откуда она берёт…

слишком жирная либа, чтобы ещё и её тянуть

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

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

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

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

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

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

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

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

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

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

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

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

В чём заключается жирность?

на самом деле keycode «А» не 0x41, а 0x26

на самом деле 0x1e

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

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

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

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

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

у него наварное иксы

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

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

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

Читайте также:  Windows 10 домашний что входит

а какой именно клавиатуры, они разные бывают

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

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

в том, что уже qt использую, не хочу ещё и sdl тянуть

Источник

rickyzhang82 / keycode.linux

# /usr/share/BasiliskII/keycodes
#
# Basilisk II (C) 1997-2005 Christian Bauer
#
# This file is used to translate the (server-specific) scancodes to
# Mac keycodes depending on the window server being used.
#
# The format of this file is as follows:
#
# sdl
#
#
#
# .
# sdl
#
#
# .
#
# The «driver string» must match the first part of the SDL driver vendor
# description as reported by SDL_VideoDriverName(). If a match is found,
# the keycode translation table is constructed from the following
# lines. Each line contains an SDL scancode followed by its associated
# Mac keycode. Both keycodes have to be given in decimal. Lines
# beginning with «#» or «;» are treated as comments and ignored.
#
#
# X11 server
#
sdl x11
sdl dga
9 53 # Esc
67 122 # F1
68 120 # F2
69 99 # F3
70 118 # F4
71 96 # F5
72 97 # F6
73 98 # F7
74 100 # F8
75 101 # F9
76 109 # F10
95 103 # F11
96 127 # F12
111 105 # PrintScrn
78 107 # Scroll Lock
110 113 # Pause
49 50 # `
10 18 # 1
11 19 # 2
12 20 # 3
13 21 # 4
14 23 # 5
15 22 # 6
16 26 # 7
17 28 # 8
18 25 # 9
19 29 # 0
20 27 # —
21 24 # =
22 51 # Backspace
106 114 # Insert
97 115 # Home
99 116 # Page Up
77 71 # Num Lock
112 75 # KP /
63 67 # KP *
82 78 # KP —
23 48 # Tab
24 12 # Q
25 13 # W
26 14 # E
27 15 # R
28 17 # T
29 16 # Y
30 32 # U
31 34 # I
32 31 # O
33 35 # P
34 33 # [
35 30 # ]
36 36 # Return
107 117 # Delete
103 119 # End
105 121 # Page Down
79 89 # KP 7
80 91 # KP 8
81 92 # KP 9
86 69 # KP +
66 57 # Caps Lock
38 0 # A
39 1 # S
40 2 # D
41 3 # F
42 5 # G
43 4 # H
44 38 # J
45 40 # K
46 37 # L
47 41 # ;
48 39 # ‘
83 86 # KP 4
84 87 # KP 5
85 88 # KP 6
50 56 # Shift Left
94 50 # International
52 6 # Z
53 7 # X
54 8 # C
55 9 # V
56 11 # B
57 45 # N
58 46 # M
59 43 # ,
60 47 # .
61 44 # /
62 56 # Shift Right
51 42 # \
98 62 # Cursor Up
87 83 # KP 1
88 84 # KP 2
89 85 # KP 3
108 76 # KP Enter
37 54 # Ctrl Left
115 58 # Logo Left (-> Option)
64 55 # Alt Left (-> Command)
65 49 # Space
113 55 # Alt Right (-> Command)
116 58 # Logo Right (-> Option)
117 50 # Menu (-> International)
109 54 # Ctrl Right
100 59 # Cursor Left
104 61 # Cursor Down
102 60 # Cursor Right
90 82 # KP 0
91 65 # KP .
#
# Linux Framebuffer Console
#
sdl fbcon
1 53 # Esc
59 122 # F1
60 120 # F2
61 99 # F3
62 118 # F4
63 96 # F5
64 97 # F6
65 98 # F7
66 100 # F8
67 101 # F9
68 109 # F10
87 103 # F11
88 111 # F12
99 105 # PrintScrn
70 107 # Scroll Lock
119 113 # Pause
41 50 # `
2 18 # 1
3 19 # 2
4 20 # 3
5 21 # 4
6 23 # 5
7 22 # 6
8 26 # 7
9 28 # 8
10 25 # 9
11 29 # 0
12 27 # —
13 24 # =
14 51 # Backspace
110 114 # Insert
102 115 # Home
104 116 # Page Up
69 71 # Num Lock
98 75 # KP /
55 67 # KP *
74 78 # KP —
15 48 # Tab
16 12 # Q
17 13 # W
18 14 # E
19 15 # R
20 17 # T
21 16 # Y
22 32 # U
23 34 # I
24 31 # O
25 35 # P
26 33 # [
27 30 # ]
28 36 # Return
111 117 # Delete
107 119 # End
109 121 # Page Down
71 89 # KP 7
72 91 # KP 8
73 92 # KP 9
78 69 # KP +
58 57 # Caps Lock
30 0 # A
31 1 # S
32 2 # D
33 3 # F
34 5 # G
35 4 # H
36 38 # J
37 40 # K
38 37 # L
39 41 # ;
40 39 # ‘
75 86 # KP 4
76 87 # KP 5
77 88 # KP 6
42 56 # Shift Left
86 50 # International
44 6 # Z
45 7 # X
46 8 # C
47 9 # V
48 11 # B
49 45 # N
50 46 # M
51 43 # ,
52 47 # .
53 44 # /
54 56 # Shift Right
43 42 # \
103 62 # Cursor Up
79 83 # KP 1
80 84 # KP 2
81 85 # KP 3
96 76 # KP Enter
29 54 # Ctrl Left
125 58 # Logo Left (-> Option)
56 55 # Alt Left (-> Command)
57 49 # Space
100 55 # Alt Right (-> Command)
126 58 # Logo Right (-> Option)
97 54 # Ctrl Right
105 59 # Cursor Left
108 61 # Cursor Down
106 60 # Cursor Right
82 82 # KP 0
83 65 # KP .
#
# Quartz (1:1 translation actually)
#
sdl Quartz
53 53 # Esc
122 122 # F1
120 120 # F2
99 99 # F3
118 118 # F4
96 96 # F5
97 97 # F6
98 98 # F7
100 100 # F8
101 101 # F9
109 109 # F10
103 103 # F11
111 111 # F12
105 105 # F13/PrintScrn
107 107 # F14/Scroll Lock
113 113 # F15/Pause
10 10 # `
18 18 # 1
19 19 # 2
20 20 # 3
21 21 # 4
23 23 # 5
22 22 # 6
26 26 # 7
28 28 # 8
25 25 # 9
29 29 # 0
27 27 # —
24 24 # =
51 51 # Backspace
114 114 # Help/Insert
115 115 # Home
116 116 # Page Up
71 71 # Num Lock
81 81 # KP =
75 75 # KP /
67 67 # KP *
48 48 # Tab
12 12 # Q
13 13 # W
14 14 # E
15 15 # R
17 17 # T
16 16 # Y
32 32 # U
34 34 # I
31 31 # O
35 35 # P
33 33 # [
30 30 # ]
36 36 # Return
117 117 # Delete
119 119 # End
121 121 # Page Down
89 89 # KP 7
91 91 # KP 8
92 92 # KP 9
78 78 # KP —
57 57 # Caps Lock
0 0 # A
1 1 # S
2 2 # D
3 3 # F
5 5 # G
4 4 # H
38 38 # J
40 40 # K
37 37 # L
41 41 # ;
39 39 # ‘
42 42 # \
86 86 # KP 4
87 87 # KP 5
88 88 # KP 6
69 69 # KP +
56 56 # Shift
50 50 # International
6 6 # Z
7 7 # X
8 8 # C
9 9 # V
11 11 # B
45 45 # N
46 46 # M
43 43 # ,
47 47 # .
44 44 # /
126 62 # Cursor Up
123 59 # Cursor Left
125 61 # Cursor Down
124 60 # Cursor Right
83 83 # KP 1
84 84 # KP 2
85 85 # KP 3
76 76 # KP Enter
54 54 # Ctrl
58 58 # Option
55 55 # Command
54 54 # Ctrl Left
49 49 # Space
82 82 # KP 0
65 65 # KP .
#
# Windows
#
sdl windib
sdl directx
1 53 # Esc
59 122 # F1
60 120 # F2
61 99 # F3
62 118 # F4
63 96 # F5
64 97 # F6
65 98 # F7
66 100 # F8
67 101 # F9
68 109 # F10
87 103 # F11
88 111 # F12
183 105 # PrintScrn
70 107 # Scroll Lock
197 113 # Pause
41 50 # `
2 18 # 1
3 19 # 2
4 20 # 3
5 21 # 4
6 23 # 5
7 22 # 6
8 26 # 7
9 28 # 8
10 25 # 9
11 29 # 0
12 27 # —
13 24 # =
14 51 # Backspace
210 114 # Insert
199 115 # Home
201 116 # Page Up
69 71 # Num Lock
181 75 # KP /
55 67 # KP *
74 78 # KP —
15 48 # Tab
16 12 # Q
17 13 # W
18 14 # E
19 15 # R
20 17 # T
21 16 # Y
22 32 # U
23 34 # I
24 31 # O
25 35 # P
26 33 # [
27 30 # ]
28 36 # Return
211 117 # Delete
207 119 # End
209 121 # Page Down
71 89 # KP 7
72 91 # KP 8
73 92 # KP 9
78 69 # KP +
58 57 # Caps Lock
30 0 # A
31 1 # S
32 2 # D
33 3 # F
34 5 # G
35 4 # H
36 38 # J
37 40 # K
38 37 # L
39 41 # ;
40 39 # ‘
75 86 # KP 4
76 87 # KP 5
77 88 # KP 6
42 56 # Shift Left
86 50 # International
44 6 # Z
45 7 # X
46 8 # C
47 9 # V
48 11 # B
49 45 # N
50 46 # M
51 43 # ,
52 47 # .
53 44 # /
54 56 # Shift Right
43 42 # \
200 62 # Cursor Up
79 83 # KP 1
80 84 # KP 2
81 85 # KP 3
156 76 # KP Enter
29 54 # Ctrl Left
219 58 # Logo Left (-> Option)
56 55 # Alt Left (-> Command)
57 49 # Space
184 55 # Alt Right (-> Command)
220 58 # Logo Right (-> Option)
221 50 # Menu (-> International)
157 54 # Ctrl Right
203 59 # Cursor Left
208 61 # Cursor Down
205 60 # Cursor Right
82 82 # KP 0
83 65 # KP .
Читайте также:  Backup linux google drive

This comment has been minimized.

Copy link Quote reply

HiImJulien commented Jun 16, 2020

Do you perhaps know what the SDL values are based off?

This comment has been minimized.

Copy link Quote reply

rickyzhang82 commented Jun 16, 2020

Sorry, I don’t know.

This comment has been minimized.

Copy link Quote reply

TomHarte commented Jul 7, 2020

I can’t speak as to fbcon, but the X11 results look like those you’d see via xmodmap -pke ; the Mac results are those from Carbon’s HIToolbox , and the Windows keys are just the standard DirectX mapping.

This comment has been minimized.

Copy link Quote reply

rickyzhang82 commented Jul 8, 2020

I found that the keycodes doesn’t work in SDL2. Anywhere that I can get a fix for US keyboard?

This comment has been minimized.

Copy link Quote reply

TomHarte commented Jul 8, 2020

I’ve never looked at the Basilisk II code at all prior to today so don’t necessarily know the answer, but, honestly, it looks like the best solution with SDL 2 is not to try to use a keycode remapping at all — my reading of video_sdl2.cpp is that if either keycodes is false in wherever Basilisk II gets preferences from, or if keycodefile names a file that doesn’t exist, then use_keycodes will be false and Basilisk II will use event2keycode rather than keycode_table , trusting SDL itself to do the proper mapping.

Having prior experience of SDL 2’s source code, I think it always gets the US keyboard exactly right under X11.

This comment has been minimized.

Copy link Quote reply

Читайте также:  Линукс минт форматирование диска

rickyzhang82 commented Jul 8, 2020

I see. Disabling the keycodes works great in my Mac. Thanks!

This comment has been minimized.

Copy link Quote reply

5Diraptor commented May 18, 2021

do you have codes for media keys? volume up / down / mute / play / pause etc?

You can’t perform that action at this time.

You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.

Источник

Оцените статью