2008-09-18 3 views
3

текстовая консоль GNU/Linux, X11 не задействована, даже не установлена ​​ . Клавиатура - американская компоновка, раскладка клавиатуры по умолчанию. Ядро версия 2.20.x или более поздняя.Клавиатурные сканноды?

Приложение, написанное на C, получает ввод клавиатуры в режиме перевода , то есть XLATE или UNICODE. Когда нажата клавиша , приложение получает соответствующий ключ . Например, вы нажимаете F1, приложение читает "\033[[A".

Прежде чем ядро ​​отправит к приложению ключ, он должен знать, какая клавиша нажата, то есть он должен знать свой scancode . В приведенном выше примере F1 scancode для нажатия клавиши имеет значение 59 или 0x3b.

То есть даже когда клавиатура находится в режиме перевода, scancodes хранятся где-то в памяти. Как может приложение получить к ним доступ без переключения клавиатуры на RAW или MEDIUMRAW режим? Фрагмент кода поможет.

ответ

1

Конечно, код, который вы хотите посмотреть, находится в kbd-1.12.tar.bz2, который является исходным пакетом для пакета «kbd». Пакет «kbd» предоставляет такие инструменты, как «dumpkeys», «showkeys» и «loadkeys», которые полезны для просмотра текущего сопоставления клавиатуры, проверки того, какие клавиши испускают scancodes, и загрузки нового сопоставления.

Вам придется общаться с ядром через ioctls, и это довольно сложно, поэтому я рекомендую прочитать источник этого пакета, чтобы посмотреть, как это делается.

Вот ссылка на архив: kbd-1.12.tar.bz2 (618K).

0

В терминале я вошел

dumpkeys -f > test.txt 

и там было очень много подробной информации, в том числе:

скан 29 = Управление
...
строка F1 = «\ 033 [[A "
строка F2 =" \ 033 [[B "
строка F3 =" \ 033 [[C "
строка F4 =" \ 033 [[D "] строка F5 = "\ 033 [[Е"
строку F6 = "\ 033 [17 ~"
Строка F7 = "\ 033 [18 ~"
строка F8 = "\ 033 [19 ~"
...
строки До = "\ 033 [5 ~"
строки Следующий = "\ 033 [6 ~"
строки Macro = "\ 033 [M"
строки Pause = "\ 033 [P"

dumpkeys был включен по умолчанию с моим распределением. Но вы должны быть в состоянии найти его в том, что написал jerub. Я бы начал с поиска kbd-1.12/src/loadkeys.y.

Похоже, что ядро ​​отвечает за хранение этих данных и может сообщать тем, кто знает, как их спросить.

0

Возможно, вы захотите посмотреть на kbdev или evdev (посмотрите на свой файл Documentation/input/input.txt в исходном каталоге ядра для стартеров.) Это будет работать для доступа к консоли.

2

Скорее всего, вы выдаете команды ioctl в неправильном дескрипторе файла, проверяйте коды ошибок, возвращаемые из ioctl и tcsetattr.

Вам следует открыть консольное устройство, а затем выдать команды управления клавиатурой на этом устройстве. Вы должны были бы в основном имитировать то, что делает сервер X.

Это ссылка на исходный код на codesearch.google.com.

+0

Не могли бы вы заменить tinyurl на настоящий URL? Указанный tinyurl не работает. – slashmais 2012-03-07 06:33:44

Смежные вопросы