См. Как ввод с клавиатуры и текст вывод работы? для обзора темы.
Более подробно, в Linux ядро получает скан-коды от оборудования и преобразует их в коды клавиш. (Эта терминология не является полностью стандартной; вы можете встретить «сканирующий код» или «код клавиши», используемый для обоих.) Как это преобразование работает, зависит от драйвера клавиатуры. Для клавиатур PS / 2 вы можете настроить его с помощью setkeycodes
. Для USB-клавиатур вы можете настроить его через udev . См. Также вики Arch . Все пользовательские устройства ввода, включая клавиатуры и мыши, доступны через устройства событий / dev / input / event *
.
В консоли Linux коды клавиш отображаются в escape-последовательности в соответствии с таблицей клавиш консоли. Поскольку консоль является текстовым терминалом, приложения видят байты с печатаемыми символами, представляющими себя, и функциональными клавишами, закодированными с помощью управляющих символов или управляющих последовательностей. Вы можете изменить отображение с помощью loadkeys
.Отображение использует два уровня косвенного обращения: от комбинации ключевого кода + модификатора (с тремя модификаторами: shift
, control
, alt
) до keysym и от keysym к строке ( символ или escape-последовательность). Набор символов ключей является фиксированным, поэтому, если вы хотите определить собственные комбинации, вам нужно будет использовать существующие символы ключей, которые иначе не используются, такие как F13
, F14
,…
Если вы хотите посмотреть исходный код, реализующий эти переводы, посмотрите драйверы клавиатуры и общий код ввода , а также udev и libudev .
X11 (графический интерфейс) имеет свой собственный способ сопоставления кодов клавиш с тем, что получают приложения. Приложения X11 видят символы ключей и модификаторы, поэтому функциональные клавиши не нуждаются в дополнительном кодировании. Фактически существует два способа определения раскладок клавиш в X: классический метод xmodmap и новый механизм XKB, который более мощный, но более сложный.