Как ядро ​​Linux обрабатывает ввод/вывод с клавиатуры?

Как ядро ​​Linux обрабатывает ввод/вывод с клавиатуры?

Я не понимаю виртуальных терминальных устройств (например, /dev/tty1), но я знаю, что могу «переключиться» на , tty1если нажму ctrl + alt + f1.

У меня есть пользовательская раскладка клавиатуры, которая есть, /usr/share/X11/xkb/symbols/usно она «работает» только если запущен X.

Похоже, что и виртуальные терминалы, и X управляют вводом/выводом с клавиатуры по-своему, но, по-видимому, они оба каким-то образом взаимодействуют с ядром (Linux), которое должно обеспечивать некую абстракцию для аппаратного обеспечения клавиатуры.

Как ядро ​​Linux обрабатывает ввод/вывод с клавиатуры? Есть ли исходный файл, на который я могу посмотреть список всех сканкодов/кодов клавиш/симов клавиш и т. д., и, возможно, общую логику того, как Linux управляет всей идеей "клавиатуры"?

(Я использую Lubuntu.)

решение1

ВидетьКак работает ввод с клавиатуры и вывод текста?для обзора темы.

Более подробно, в Linux ядро ​​получает скан-коды от оборудования и преобразует их в коды клавиш. (Эта терминология не совсем стандартна; вы можете обнаружить, что «скан-код» или «код клавиши» используются для обоих.) То, как работает это преобразование, зависит от драйвера клавиатуры. Для клавиатур PS/2 вы можете настроить его с помощьюsetkeycodes. Для USB-клавиатур вы можете настроить егочерез udev. Смотрите такжеАрх вики. Все пользовательские устройства ввода, включая клавиатуры и мыши, доступны через устройства событий /dev/input/event*.

В консоли Linux коды клавиш сопоставляются с escape-последовательностями в соответствии с консольной картой клавиш. Поскольку консоль является текстовым терминалом, приложения видят байты, в которых печатаемые символы представляют себя, а функциональные клавиши кодируются с помощью управляющих символов или escape-последовательностей. Вы можете изменить сопоставление с помощьюloadkeys. Сопоставление использует два уровня косвенности, от комбинации keycode+modifier (с тремя модификаторами: shift, control, alt) до keysym и от keysym до строки (символ или escape-последовательность). Набор keysyms фиксирован, поэтому, если вы хотите определить пользовательские комбинации, вам нужно будет использовать существующие keysyms, которые не используются иным образом, например F13, F14, …

Если вы хотите посмотреть на исходный код, реализующий эти переводы, посмотритедрайверы клавиатурыиобщий входной код, иудевилибудев.

X11 (GUI) имеет свой собственный способ сопоставления кодов клавиш с тем, что получают приложения. Приложения X11 видят символы клавиш и модификаторы, поэтому функциональные клавиши не нуждаются в дальнейшем кодировании. Фактически, есть два способа определения раскладок клавиш в X: классический метод xmodmap и более новый механизм XKB, который более мощный, но и более сложный.

Связанный контент