Каков реальный путь действий, происходящих, когда я нажимаю клавишу на клавиатуре, и она отображается на оболочке? - PullRequest
5 голосов
/ 13 марта 2009

Я использую универсальную клавиатуру USB, Linux 2.6.27 с рабочим столом gnome, gnome-терминал и оболочку bash. Мне интересно знать, что происходит в программном обеспечении. Как специальные символы с моей клавиатуры интерпретируются с некоторой кодировкой символов и откуда появляются изображения символов?

Ответы [ 2 ]

8 голосов
/ 13 марта 2009

Входной слой Linux с драйверами USB получает коды сканирования (в основном «KEY 1 DOWN», «KEY 1 UP») с клавиатуры.

X использует свою таблицу ключей для преобразования кодов сканирования в коды клавиш и события ввода X.

Метод ввода GTK преобразует последовательность входных событий в составные символы Юникода.

Gnome-терминал кодирует их в UTF-8 для оболочки.

Раковине все равно. он просто знает, что имеет дело с многобайтовой кодировкой.

Оболочка возвращает многобайтовый код обратно через TTY.

Gnome-терминал декодирует входящий текст и определяет кодовые точки Юникода.

Gnome-терминал рисует персонажей, используя средства GTK +.

GTK + использует Pango для визуализации текста и вызывает библиотеку X для рисования пикселей на экране.

X-сервер рисует символы в экранном буфере, а видеокарта отображает их.

Вот моя попытка построения диаграммы:

альтернативный текст http://osoft.us/system_layers.png

2 голосов
/ 13 марта 2009

Посмотрите на это в слоях. Во-первых, это аппаратное обеспечение, и драйвер устройства в ядре Linux будет иметь специальные методы для управления клавиатурой и реагирования на нее через регистры состояния в устройстве и обработчики прерываний, например.

Следующим является ядро ​​Linux, которое будет иметь некоторый метод загрузки соответствующего драйвера для каждого компонента оборудования, обнаруженного во время загрузки. После загрузки драйвер устройства соответствует некоторому интерфейсу драйвера ядра, предоставляя данные с устройства в ядро ​​и наоборот.

За пределами ядра на определенном уровне драйвер устройства и оборудование видны, как правило, в виде списка в каталоге / dev. Программное обеспечение, такое как эмулятор терминала, которому необходимо использовать устройство, получит доступ к устройству через запись в /dev.

.

Связь между приложением пользовательского уровня и устройством теперь осуществляется с помощью ряда операций чтения / записи и операций ioctl. Они попадают в ядро ​​(некоторые детали см. На страницах руководства), после чего ядро ​​связывается с драйвером устройства, загруженным выше.

Эмулятор терминала будет отображать символы по мере их ввода (в большинстве случаев) и по мере их получения от устройства (в большинстве случаев) с использованием доступных ему шрифтов, расположенных в разных местах в зависимости от приложения. (Я говорю здесь в общих чертах, потому что я не знаю Gnome конкретно).

Помогает ли это?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...