Введение в POSIX'ивизм

       

Немного о раскладках


Упомянув об эмуляторах терминала и менеджерах окон, я несколько забежал вперед - однако без какой-либо из клиентских программ этого семейства невозможно даже проверить правильность настройки Иксов, например, клавиатуры и видеосистемы, а также шрифтов. Конечно, заведомо неподходящий драйвер клавиатуры или видеокарты, а также неправильный путь к умолчальным шрифтам, просто не позволят стартовать X-серверу. Однако огрехи, скажем, русификации раскладки или отсутствие кириллических шрифтов работать ему не помешают - вот только не совсем так, как нам нужно.

Для начала проверяем ввод кириллических символов - прямо в командной строке терминального окна, без запуска какого-либо иного приложения. И с удивлением обнаруживаем - не обязательно, но вполне возможно, - что ничего при этом не происходит, хотя при настройке через xf86config была выбрана русская раскладка. Почему? - спрашиваем сами себя. И сами же себе отвечаем - потому что не позаботились о правильном определении системной локали. Сама по себе локаль, как-будто бы, к Иксам отношения не имеет, но вот ее несоответствие Иксовой раскладке блокирует клавиатурный ввод напрочь. Так что, если это не было сделано ранее, перво-наперво устанавливаем правильную локаль - в соответствии со страной (ru), языком (RU) и используемым набором символов (например, KOI8-R).

Теперь, вполне возможно, что на экране при вводе мы видим сплошную абракадабру. Причина понятна - отсутствие русских шрифтов (или путей к ним в Иксовом конфиге). Однако попытка переключиться на латиницу дает тот же эффект. Вспоминаем, что это мы уже проходили несколькими разделами ранее - при настройке через xf86config выбор русской раскладки клавиатуры подразумевает почему-то, что в латинских буквах у пользователя потребности нет. И там же, в разделе о конфигурации Иксов, ищем рецепт - ручную правку соответствующей секции конфигурационного файла.

Теперь переключение осуществляется нормально, но абракадабра с экрана никуда не исчезает. Что свидетельствует о некоторой напряженке со шрифтами.
Но это будет темой следующего раздела, а пока закончим с раскладками.

Определив все опции клавиатуры, как было описано ранее, получаем нормальную раскладку для win-маркированной клавиатуры (вариант winkeys), с заказанным переключателем и индикатором альтернативной группы. Однако стоит ли останавливаться на достигнутом? Меня, например, всегда просто бесили все стандартные русские раскладки - и та, что была на пишущих машинках (унаследованная dos-маркированными компьютерными клавишами), и win-модификация оной. Поневоле поверишь в то, что вообще раскладка qwerty была придумана для того, чтобы замедлить работу ремингтониста (это - мужской род от слова "машинистка", ввиду большей физической силы при чрезмерно быстрой печати они сильно амортизировали столь дорогостоящие инструменты, каковым были некогда пишущие машинки). А ее кириллические вариации дело еще усугубили - не иначе, на предмет дополнительного снижения амортизации казенной техники. По настоящему удобной представляется только умолчальная русская раскладка FreeBSD (т.н. ru.koi8-r.kbd), в которой знаки препинания находятся на нижнем регистре верхнего ряда, а цифры - на верхнем. Да только уж больно непривычна, и клавиатур, таким образом маркированных, не сыскать.

Тем не менее, я по мере сил и в минимально необходимом объеме всегда пытаюсь выправить положение. Для чего в используемой мной кириллической раскладке перемещаю запятую на нижний регистр, ввожу в нее символ прямого слэша (по умолчанию почему-то обычно имеется только обратный) и доллара (последнее - не из любви к длинному и зеленому, а для обозначения приглашения командной строки). Как это сделать в консоли - можно сообразить. А вот как быть в Иксах?

На теории этого дела останавливаться не буду - она некогда была подробно описана Иваном Паскалем в его труде об Xkb, до сих пор не утратившем своего значения. Так что только пара практических рецептов.

Расширенные возможности управления клавиатурой в Иксах обеспечиваются модулем Xkb. Все относящиеся к нему файлы собраны в каталоге /usr/X11R6/lib/X11/xkb.


В данный момент нас интересует лишь один из его подкаталогов - symbols, файлы которого описывают, как можно понять из его имени, непосредственно наборы символов, привязанные к клавиатурным раскладкам различных стран. Точнее - один из вложенных в него подкаталогов - symbols/pc для одноименной архитектуры. Ну а в нем уже важен файл ru - это непосредственно символы, привязанные к нашей, родной, кириллической раскладке.



Формат файла достаточно прозрачен, и становится понятным при его просмотре: каждому коду клавиши ставится в соответствие два символа - в нижнем регистре и верхнем. Файл разделяется на несколько секций. Первая (Basic) описывает базовую русскую раскладку, остальные представляют собой варианты и содержат лишь изменения относительно базового набора символов.

В данный момент перед нами (вы, конечно, резонно можете возразить - "простите, не нами, а Вами", - хорошо, лично передо мной) стоит задача внести косметические изменения в раскладку ru(winkeys). Начинаю я, однако, с секции Basic:

partial default alphanumeric_keys

xkb_symbols "basic" {

Ибо первый напрашивающийся кандидат на модификацию - это клавиша Left Backslash (Bar на верхнем регистре), по прямому назначению мной никогда не используемая. Отыскиваю ее код (это будет LSGT) и умолчальное значение нижнего регистра backslash заменяем на comma (сиречь запятую). За верхним же регистром резонно сохранить исходное значение - bar.

Позиция, ранее задействованная под запятую в русской раскладке, у меня таким образом освободилась. Не пропадать же добру? - займу-как я ее прямым слэшем. Для чего отыскиваем (то есть я отыскиваю) соответствующую секцию - теперь уже

partial alphanumeric_keys

xkb_symbols "winkeys" {

нахожу в ней нужный код (AB10) и умолчальную comma верхнего регистра меняю на slash. Остается разобраться с любимым баксиком. Его я помещаю на место нормального (правого) backslash, тогда как последний передвигаю на регистр верхний (код их клавиши - BKSL).

И в итоге все модифицированные строки выглядят таким образом (в порядке их исходного расположения в файле /usr/X11R6/lib/X11/xkb/symbols/pc/ru:

partial default alphanumeric_keys

xkb_symbols "basic" {

name[Group1]= "Russian";

... key <LSGT> { [ comma, bar ] }; ... };

partial alphanumeric_keys

xkb_symbols "winkeys" {

include "pc/ru(basic)" ... key <AB10> { [ period, slash ] }; key <BKSL> { [ dollar, backslash ] }; };

Не знаю, как кому - а мне так очень удобно. Единственный минус - после этого работать на чужих машинах становится просто мучительно больно. Создавая таким образом стимул - делать это как можно реже...


Содержание раздела