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

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

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

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

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

(Я бегу Lubuntu.)

  • udev управляет официальными документами
  • таблица маршрутизации «220» в ядре Linux 3.2.0-23-generic
  • Сколько времени занимает пользователь => переход в режим ядра?
  • Запрещенное ограничение обработчика сигнала процесса инициализации pid-имен
  • cp против cat для копирования файла
  • Шпилька в linux
  • Linux Kernel 3.x новая схема управления версиями
  • Планировщики ввода-вывода для обычных жестких дисков
  • 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, который является более мощным, но более сложным.

    Interesting Posts

    Отображать строки между текстом с помощью grep

    изменить размер окна шпаклевки по умолчанию

    Поиск инструментов для создания минимального рабочего стола Linux

    Указатель имени домена хоста в Linux

    Какие шаги можно добавить в систему без использования useradd / adduser?

    Не удалось подключить вторичный HDD на CentOS 6.7 (Необходимо указать файловую систему?)

    Могу ли я построить дистрибутив linux с libc вместо glibc

    Извлеките только имя службы и номер порта из файла tnsnames.ora

    Поиск функций, команд и встроенных функций

    $ PATH на Fish Shell OS X

    Значок прекращает загрузку после перезапуска приложения

    Я делаю GUI-программу в python, которая должна запускаться как root с самого начала, как мне это сделать?

    Насколько разумно делать надёжную работу над системами с ограничительной umask?

    Входы ввода-вывода GNU readline vi-insert отображаются, похоже, не действуют

    Как читать файл в сценарий оболочки как переменную?

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