Введение
В человеко-компьютерных интерфейсах расширение клавиатуры X, или XKB, является частью системы X Window, расширяющей возможности управления клавиатурой по сравнению с основным протоколом системы X Window и позволяющей использовать несколько раскладок клавиатуры. Его основными особенностями являются: расширенная поддержка клавиш-модификаторов (например, Shift, Control, Alt и т.д.); улучшенная обработка групп клавиш (как правило, раскладок клавиатуры); расширенный контроль индикаторов клавиатуры (светодиодов) и звуковых сигналов; различные новые параметры клавиатуры (элементы управления); привязка действий (определенного типа) к клавишам. XKB состоит из двух частей: серверного расширения и клиентской библиотеки. Современные версии Xlib включают XKB, которое активно по умолчанию. Клиентские программы, не использующие это расширение, могут отключить его перед подключением к серверу или могут работать в обычном режиме, поскольку расширение по умолчанию эмулирует основной протокол. XKB также используется композиторами Wayland и kmscon.
enhanced support for modifiers (, , etc. );
better treatment of key groups (typically keyboard layouts);
extended control of keyboard indicators (LEDs) and bells;
various new keyboard parameters (controls);
association of actions (of a particular kind) to keys. XKB is composed of two parts: a server extension and a client library. Modern versions of Xlib contain XKB, which is active by default. Client programs not using this extension can deactivate it before connecting with the server, or can simply work normally as the extension simulates the core protocol by default. XKB is also used by Wayland compositors and kmscon.
Модификаторы с запертой и запертой дверью
XKB позволяет модификатору находиться в зафиксированном или защелкнутом состоянии, помимо его обычного состояния. Обычно модификатор активен только во время нажатия, как, например, Shift. Однако модификатор может быть также заблокирован, как модификатор Caps Lock. Когда модификатор заблокирован, он остается активным до тех пор, пока не будет явно деактивирован. Промежуточное состояние между обычным и заблокированным – это защелкнутое состояние: когда модификатор защелкнут, он остается активным, но только до следующего нажатия клавиши, которая не является модификатором. XKB позволяет клиентскому приложению явно защелкнуть или заблокировать модификатор. Более того, приложение может привязать нажатие или отпускание клавиши к изменению состояния модификатора. Таким образом, модификатор может автоматически защелкиваться или блокироваться при нажатии или отпускании клавиши.
Основные группы
XKB позволяет клавиатуре переключаться между любыми из четырех различных групп символов. Обычно это делается для того, чтобы клавиатура функционировала как клавиатура другого языка. В этом контексте набор символов, генерируемых клавиатурой, называется группой, и клавиатура может переключаться на другую группу в любой момент времени. XKB определяет селекторы групп (которые в спецификации просто называются группами). Подобно модификаторам, селектор группы может быть привязан к клавише, но также может быть зафиксирован или заблокирован.
Контроль
Поведение клавиатуры зависит от ряда параметров, которые могут быть изменены пользователями. Эти параметры называются контролями. Например, контроль SlowKey можно использовать для игнорирования кратковременных нажатий клавиш. Другой контроль – MouseKeys, который позволяет имитировать движения мыши с помощью нажатий клавиш. Контроль лишь указывает, активна ли эта имитация или нет; какие клавиши вызывают движение, не является частью контроля, а определяется путем назначения действий этим клавишам. Первые два контроля являются булевыми: они либо активны, либо неактивны. PerKeyRepeat – это контроль, который не является булевым. А именно, это маска, указывающая, для каких клавиш включен режим автоповтора. Согласно спецификации, небулевые контроли "всегда активны": это означает, что они всегда зависят от набора параметров (в данном случае, от маски), но не существует отдельного бита, который мог бы полностью отключить эффект контроля. Помимо булевых и небулевых, контроли также классифицируются по тому, на поведение чего они влияют – сервера или клиентской библиотеки. Два вышеописанных контроля являются серверными. Контроли клиентской библиотеки влияют на преобразование кода клавиши или последовательности кодов клавиш в строку (XLookupString) и на доставку событий.
Проблемы совместимости
Расширение клавиатуры X несовместимо с базовой обработкой клавиатуры, из-за чего некоторые клавиши-модификаторы не функционируют или требуют использования обходных решений в эмулированных средах, таких как VNC или Xephyr.
Другое
XKB обеспечивает более эффективную обработку индикаторов клавиатуры (светодиодов). В частности, XKB предоставляет символические имена для индикаторов, что позволяет привязывать индикаторы к действиям клавиатуры и проверять, какие индикаторы фактически присутствуют на клавиатуре. XKB также улучшает обработку звуковых сигналов по сравнению с основным протоколом; основной протокол поддерживает только один звуковой сигнал, и единственное действие, которое может выполнить клиент, — это подать этот сигнал. XKB поддерживает несколько именованных звуковых сигналов и позволяет клиенту деактивировать некоторые из них и получать уведомления о подаче сигнала. XKB позволяет клиенту запрашивать физическую форму клавиатуры, включая форму отдельных клавиш. В частности, клавиши организованы в секции, которые могут быть повернуты (например, цифровая клавиатура обычно считается секцией). Внутри секции клавиши расположены в ряды. Клавиши и секции имеют геометрию, которая включает приблизительный контур клавиши, её ограничивающий прямоугольник и точную форму. Помимо клавиш, геометрия также включает в себя элементы оформления (doodads), которые являются элементами на клавиатуре, не являющимися клавишами. Общая форма клавиатуры также является элементом оформления. Информация об элементах оформления включает их цвет и любой текст, нанесённый на них (включая используемый шрифт).