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

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

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

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

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

(Я бегу Lubuntu.)

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?
  • Как вы исправляете ядро?
  • Где бы я начал искать документацию в графическом режиме консоли Linux?
  • Как написано ядро?
  • Является ли компилятор дерева устройств привязан к версии ядра?
  • Запустить скрипт при запуске для ядра Old Linux (3.0.0)
  • Привлечение к работе перед Rootfs
  • Использует ли noatime в современной Linux смысл?
  • который загрузил таблицу страниц, сопоставленную идентификаторам?
  • Как полностью удалить неиспользуемые пакеты ядра в Linux Mint?
  • Понять нумерацию портов виртуального моста Linux
  • Interesting Posts

    Как создать набор файлов в Linux?

    Могу ли я получить микросекундную зернистость, когда я рассчитываю количество наносекунд от Windows Epoch до сегодняшнего дня?

    Установка Chrome на 64-битный Gentoo без доступа суперпользователя

    Есть ли способ фильтрации и печати определенного шаблона без повторения кода?

    Почему «ls» требует отдельного процесса для выполнения?

    +/- после выполнения задания в фоновом режиме

    Как разрешить ошибку при загрузке, «Не удалось найти устройство с UUID …»

    Может ли жесткая связь нарушить структуру файловой системы?

    Как настроить учетную запись Gmail с поддержкой двух факторов для работы в качестве sendmail в Debian Jessie?

    Почему я не могу использовать политику REJECT в своей цепочке iptables OUTPUT?

    Протяните устройство через USB или wlan

    Как убийца OOM решает, какой процесс убить первым?

    Как удалить определенный символ в строке, но только если в этой строке нет номеров в Linux

    Как проект Linux Kernel отслеживал ошибки в ранние дни?

    Использование iptables для блокировки определенных служб

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