Консоль FreeBSD. Введение в клавишную тему
Клавиатура -- второй компонент системной консоли. Причем, строго, говоря,
более важный, чем экран: ведь чтобы хоть увидеть на последнем хоть что-то,
отличное от картины начальной загрузки, нужно дать какую-никакую клавиатурную
команду (хотя бы авторизоваться в системе). И теоретически без экрана
работать можно -- получается крайний вариант чукчи-писателя, который не читает
даже написанное собой, -- а вот без клавиатуры...
Так что одна из задач драйвера syscons
-- обеспечить ввод символов, из
которых слагаются команды и тексты. Для этого он преобразует коды нажатия
клавиш (т.н. скан-коды), генерируемые контроллером клавиатуры (то есть
"железной составляющей") в коды символов таблицы ASCII. Преобразование это
происходит в два этапа -- сначала "железный" скан-код нажатия клавиши,
именуемый также "сырым" (вообще говоря, отпускание клавиши тоже генерирует
"сырой" скан-код, но для нас это почти несущественно) превращается во
внутренний код syscons
. Как, зачем, почему -- опять же неважно, эта процедура запрятана в недра драйвера и влиять на нее мы не можем. Далее же внутренний код (также называемый скан-кодом) преобразуется в ASCII-код по специальной таблице, именуемой таблицей раскладки клавиатуры keymap
).
Доступные для syscons
раскладки клавиатуры собраны в каталоге
/usr/share/syscons/keymaps
. Это -- простые текстовые файлы вида
страна.тип.kb
d (строго говоря, не совсем страна, но об этом позже), которые можно просмотреть, например, командой less имя_файла. Что мы и проделаем на
примере стандартной американской клавиатуры us.iso.kbd
-- именно она используется по умолчанию, если не загружена тем или иным способом какая-либо другая раскладка. К чести создателей FreeBSD нужно заметить, что это одна из немногих американских по происхождению систем, которая догадывается о существовании разных языков и алфавитов, кроме американского.
Итак, в ответ на
less /usr/share/syscons/keymaps/us.iso.kbd
на экран выводится примерно следующая картина:
# $FreeBSD: src/share/syscons/keymaps/us.iso.kbd,v 1.14.2.1 2000/07/18 00:47:53 ache Exp $ # alt # scan cntrl alt alt cntrl lock # code base shift cntrl shift alt shift cntrl shift state # ------------------------------------------------------------------ 000 nop nop nop nop nop nop nop nop O 001 esc esc esc esc esc esc debug esc O 002 '1' '!' nop nop '1' '!' nop nop O 003 '2' '@' nul nul '2' '@' nul nul O 004 '3' '#' nop nop '3' '#' nop nop O ... 020 't' 'T' dc4 dc4 't' 'T' dc4 dc4 C 021 'y' 'Y' em em 'y' 'Y' em em C 022 'u' 'U' nak nak 'u' 'U' nak nak C 023 'i' 'I' ht ht 'i' 'I' ht ht C 024 'o' 'O' si si 'o' 'O' si si C 025 'p' 'P' dle dle 'p' 'P' dle dle C ... 104 slock saver slock saver susp nop susp nop O 105 fkey62 fkey62 fkey62 fkey62 fkey62 fkey62 fkey62 fkey62 O 106 fkey63 fkey63 fkey63 fkey63 fkey63 fkey63 fkey63 fkey63 O 107 fkey64 fkey64 fkey64 fkey64 fkey64 fkey64 fkey64 fkey64 O 108 nop nop nop nop nop nop nop nop O
Первая колонка этой таблицы -- номера скан-кодов (разумеется, внутренних, а
не "железных"), вторая -- соответствующее этому коду базовое значение. Таковым
могут быть:
- символ (цифра, буква),
- функциональная клавиша (F1-F12),
- клавиша специального назначения (переключения виртуальных консолей, включения отладочного режима, перезагрузки машины),
- модификатор, фиксируемый (CapsLock и NumLock) или нефиксируемый (Shift, Control, Alt).
Номер скан-кода жестко привязан к своей физической клавише (например,
скан-код 001
-- это левая верхняя клавиша стандартной современной клавиатуры), а его символьное значение по умолчанию совпадает, как правило, с маркировкой этой клавиши (в данном примере -- Escape). Подчеркну, что здесь и далее (если явно не оговорено иное) речь обычно будет идти именно о символьных значениях скан-кодов по умолчанию, поскольку все они могут быть переопределены (почти) произвольным образом. Правда, сомнительно, что кому-нибудь доставит удовольствие вспоминать, к какому скан-коду он привязал цифру 1
и как маркирована соответствующая клавиша. Однако в ряде специальных случаев к такому переопределению прибегать целесообразно.
Следующие семь колонок -- значения тех же скан-кодов при нажатых нефиксируемых клавишах-модификаторах -- Shift, Control, Alt и их сочетаниях. Наконец, последняя колонка (lock state) отмечает, подвержено ли значение данного скан-кода действию фиксируемого модификатора (CapsLock).
Содержание . .