...
Пятница , 10 мая 2024

9.3.6. РАБОТА С КЛАВИАТУРОЙ В ГРАФИЧЕСКОМ РЕЖИМЕ

9.3.6. РАБОТА С КЛАВИАТУРОЙ В ГРАФИЧЕСКОМ РЕЖИМЕ

В графическом режиме работа с клавиатурой организована значительно сложнее. Подробное описание этого вопроса можно найти в обстоятельном (но, к сожалению, очень трудном для понимания) материале Ивана Паскаля ‘X Keyboard Extension’ [П11.6]. Приведем очень краткий конспект основных положений этого материала.

Как было сказано выше, при работе в системе X Window клавиатура передает этой системе чистые скан-коды. Клавиатурный модуль X-сервера передает сообщение о нажатии (и отпускании) кнопки прикладной программе. В этом сообщении указывается только скан-код нажатой кнопки и ‘состояние клавиатуры’ – набор битовых ‘флагов’, который отражает состояние клавиш-модификаторов (‹Shift›, ‹Control›, ‹Alt›, ‹CapsLock› и т.п.). ‘Клиентская’ программа должна сама решить – какой код символа, соответствующий скан-коду, надо выбрать при таком сочетании битов-модификаторов. Разумеется, при создании программ никто не пишет каждый раз программу для интерпретации скан-кодов. Для этих целей существуют специальные подпрограммы в библиотеке X-lib. Процедуры из X-lib, зная скан-код и ‘состояние клавиатуры’, выбирают подходящий символ в соответствии с таблицей символов, которая хранится в X- сервере и которую они обычно ‘запрашивают’ у X-сервера при старте программы. Эта таблицу можно менять с помощью утилиты xmodmap. Действующая таблица выводится командой xmodmap -pk.

9.3.7. МОДУЛЬ XKB569cd88b9d12a

В последних версиях дистрибутивов Linux устанавливается дополнительный модуль работы с клавиатурой – XKB. Модуль XKB точно также сообщает программе только скан-код и свое ‘состояние’. Но в отличие от ‘старого’ модуля (который называют ‘core protocol’, или ‘core-модуль’) XKB имеет более сложную таблицу символов, другой набор ‘модификаторов’ и некоторые дополнительные параметры ‘состояния клавиатуры’. Поэтому для полноценной работы с XKB, библиотека X-lib должна содержать модифицированные процедуры интерпретации скан-кодов (процедуры, ‘знающие’ о XKB). Естественно, все версии X-Window, у которых X-сервер ‘укомплектован’ модулем XKB, имеют и соответствующую библиотеку X-lib. Таким образом, XKB фактически делится на две части – модуль, встроенный в X-сервер, и набор подпрограмм, входящих в библиотеку X-lib.

Однако, поскольку существуют программы, которые были рассчитаны на работу со старой библиотекой X-lib, ‘не подозревающей’ о существовании XKB, возникает ‘проблема совместимости’. То есть, модуль XKB должен уметь общаться как со ‘своей’ X-lib, так и со ‘старой’ (работающей в соответствии с ‘core protocol’). Естественно, ‘общение’ не ограничивается только передачей сообщений о нажатии/отпускании клавиш. Процедуры X-lib могут обращаться к X-серверу с различными запросами (например – взять таблицу символов) и командами (например, поменять в этой таблице расположение символов). На все эти запросы и команды модуль XKB должен реагировать так, чтобы даже ‘старая’ X-lib могла работать правильно (насколько это возможно).

При старте X-сервера, модуль XKB зачитывает все необходимые данные из текстовых файлов, которые образуют ‘базу данных’ настроек XKB. Строго говоря, большинство из этих файлов сам модуль XKB не читает. Он вызывает программу xkbcomp, которая переводит содержимое этих файлов в двоичный формат, понятный непосредственно модулю XKB. Но для настройки это не так уж важно, поскольку вызов xkbcomp происходит автоматически, незаметно для пользователя.

База данных, необходимых модулю XKB, находится в каталоге /usr/X11R6//lib/X11/xkb и состоит из 5 компонентов, расположенных в подкаталогах с именами:

• keycodes

Здесь расположены таблицы, которые просто задают символические имена для скан-кодов. Например

‹TLDE› = 49;

О нас admin

Проверить еще

Backyard Landscape

Что такое быстровозводимые здания сегодня?

Желание жить только в самом безопасном и комфортном месте присуще каждому человеку, ведь это позволяет …

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.