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

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

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

  • Как вернуться к выбору старого источника
  • Прочтите специальные клавиши в bash
  • Изменение значения TCP RTO в Linux
  • Как подтвердить настройку CONFIG с помощью make menuconfig?
  • Есть ли команда для переключения в существующее пространство имен?
  • Понимание регистрации в Linux
  • Как виртуальные терминалы, так и X, похоже, управляют вводом / выводом клавиатуры по-своему, но, по-видимому, они как-то взаимодействуют с ядром (Linux), что должно обеспечить некоторую абстракцию для аппаратного обеспечения клавиатуры.

    Как ядро ​​Linux обрабатывает входы / выходы клавиатуры? Есть ли исходный файл, на который я могу посмотреть, со списком всех scancodes / keycodes / keysims / etc. И, возможно, с общей логикой того, как Linux управляет всей идеей «клавиатуры»?

    (Я бегу Lubuntu.)

  • Uboot передает аргументы в ядро!
  • Принуждение ключей для запуска сценариев bash
  • Является ли блочное устройство осведомленным о фактическом пользователе / ​​процессе, который инициирует чтение / запись?
  • Скомпилируйте ядро ​​Ubuntu «Raring» с помощью компилятора Intel
  • Почему Linux показывает все больше и меньше памяти, чем я физически установил?
  • Как ЦП знает, какой физический адрес сопоставляется с каким виртуальным адресом?
  • One Solution collect form web for “Как ядро ​​Linux обрабатывает входы / выходы клавиатуры?”

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

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

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

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

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

    Linux и Unix - лучшая ОС в мире.