|
| ||||||||||||
| ||||||||||||
Русификация sysconsРассмотрим подробнее в чем заключается процесс русификации syscons. Еще раз напомню, что все основные настройки syscons делаются автоматически при старте системы. Вам необходимо только правильно указать параметры в файле /etc/rc.conf. Итак, инструкция (FreeBSD Handbook) предлагает добавить в rc.conf строчки: keymap=ru.koi8-r keychange="61 ^[[K" scrnmap=koi8-r2cp866 font8x16=cp866b-8x16 font8x14=cp866-8x14 font8x8=cp866-8x8 Русификация дисплеяНачнем с последних строчек: font8x16=cp866b-8x16 font8x14=cp866-8x14 font8x8=cp866-8x8 Они определяют аргументы для утилиты vidcontrol, которая должна будет загрузить в видео-контроллер новый набор шрифтов (подробнее в описании vidcontrol). Почему рекомендуют шрифты cp866, хотя русификация FreeBSD подразумевает кодировку koi8-r, немного позднее. Напомню, что для стандартного режима "режима отображения" (25 строк) необходим только шрифт с матрицей 8x16. Остальные два понадобятся только в том случае, если вы будете использовать другие режимы (30, 43, 50 строк). Кстати, если вы заглянете в /usr/share/syscons/fonts, то обнаружите, что шрифты в кодировке cp866 для матрицы 8x16 имеют три варианта - cp866, cp866b и cp866c (такой же набор имеется и для кодировки koi8-r). Причем, cp866 и cp866c немного отличается набором символов - в cp866c часть символов "псевдографики" заменена "экзотическими" буквами. А вот cp866b сильно отличается внешним видом символов, причем и программа инсталляции и большинство руководств по русификации усиленно навязывают именно его. (Мне, например, он не нравится, но это дело вкуса). Строчка - "scrnmap=koi8-r2cp866" опять же задает аргумент для vidcontrol, но уже не для установки шрифтов, а для загрузки в syscons таблицы перекодировки (screenmap). Поскольку, шрифты рекомендуется поставить для кодировки cp866, то для того, чтобы тексты в кодировке koi8-r отображались правильно, необходима эта таблица - "из koi8-r в cp866". Зачем так сложно?Возникает вопрос - почему нельзя поставить шрифты сразу для кодов koi8-r и обойтись без какой-либо screenmap? На самом деле - можно. Можно поставить шрифты для koi8-r, тем более, что в наборе шрифтов они есть и для всех трех матриц (а для 8x16, даже в нескольких вариантах - koi8-r, koi8-rb, koi8-rc). Тогда соответствующие строчки в rc.conf будут выглядеть scrnmap="NO" font8x16=koi8-r-8x16 font8x14=koi8-r-8x14 font8x8=koi8-r-8x8 Однако, не торопитесь это делать. Дело в том, что шрифты cp866 лучше подходят для видеокарты "писишки". Каждый символ на экране рисуется в матрице шириной в 9 точек, при этом "перерисовать" (загружая шрифты) можно только 8 из них. Девятая колонка
служит для того, чтобы символы, если они даже полностью занимают все восемь
"программируемых" колонок, все-таки не сливались между собой. С другой
стороны есть такие символы псевдографики, которые предназначены для рисования
рамочек и просто горизонтальных линий. Для них, наоборот, желательно, чтобы
они сливались, иначе горизонтальные линии будут выглядеть пунктирными.
Другая проблема при использовании шрифтов koi8-r может возникнуть, если вы захотите включить поддержку "мыши" в syscons.
Правда, эта проблема имеет и другое решение. В последних версиях syscons, коды, используемые под "мышиный" курсор, можно изменить, пересобрав ядро системы. Поэтому, тот же "FreeBSD Handbook" советует для русификации первым делом пересобрать ядро, добавив в файл конфигурации option "SC_MOUSE_CHAR=0x03" Хороший совет, если не обращать внимание на то, что сама по себе пересборка ядра - задача более сложная (и требует значительно больше времени), чем правка пары строк в rc.conf. (Кстати, и 0x03 - не очень удачная замена). Вот эти причины и делают более предпочтительными шрифты cp866, хотя эффект от них чисто косметический. Русификация клавиатуры. Первая строчка - "keymap=ru.koi8-r" служит аргументом для утилиты kbdcontrol, которая при старте системы загрузит в syscons "раскладку
клавиатуры" ru.koi8-r.
Кстати, если пересобрать ядро с "option RUKEYMAP", то эта раскладка будет "встроена" в syscons "по умолчанию". В этом случае, ее можно не загружать при старте системы. А вот следующая строчка keychange="61 ^[[K"имеет к русификации косвенное отношение. Дело в том, что загружая новые шрифты, мы меняем свойства терминала. По крайней мере, символы псевдографики перемещаются другой диапазон кодов. Следовательно, описание терминала cons25 в termcap уже не будет полностью соответствовать реальным свойствам syscons. Поэтому, для русифицированного syscons в том же termcap предусмотрено другое описание и, соответственно, другой тип терминала - cons25r. Именно поэтому, те же инструкции по русификации рекомендуют подправить файл /etc/ttys (исправить все cons25 на cons25r) чтобы на каждом виртуальном терминале при старте очередной сессии переменная окружения TERM (которая и сообщает программам тип терминала) по умолчанию получала значение cons25r. Но описание терминала cons25r отличается от cons25 не только символами псевдографики. Согласно этому описанию, клавиша fkey61 (кнопка [Delete]) должна при нажатии выдавать последовательность кодов "Esc [ K", а не код 177, как это делает syscons (и как указано в описании терминала cons25). Поэтому, нам рекомендуется "подрегулировать" сам syscons, чтобы его поведение соответствовало описанию в termcap. (Почему нельзя исправить termcap и оставить syscons в покое, я не знаю). Итак, эта строчка служит только для "подгонки" syscons к его новому описанию в termcap. Она представляет из себя аргумент для программы kbdcontrol, которая заменит для клавиши fkey61 ([Delete]) выдаваемый код. Русификация для других кодировокРассмотренные рекомендации подразумевают, что вы будете использовать русскую кодировку koi8-r. Как вы наверное знаете, существует по крайней мере еще две не менее популярные кодировки для русских букв cp866 и cp1251. Можно ли заставить syscons (и дисплей, и клавиатуру) правильно работать с такими кодировками? Конечно, можно. Как вы уже поняли, для дисплея необходимо загрузить соответствующие шрифты или screenmap, а для клавиатуры - таблицу "раскладки клавиатуры". Кстати, для cp866 в системе уже есть все необходимое. То, что есть шрифты cp866 вы уже знаете (только надо убрать дополнительную перекодировку через screenmap), подходящая "раскладка клавиатуры" - ru.cp866, также имеется в /usr/share/syscons/keymaps. А вот если вы хотите cp1251, то кое-что придется изготовить самостоятельно (или попросить у тех, кто уже сделал). Надо составить "раскладку клавиатуры" (назвать ее, например - ru.cp1251), а для дисплея проще всего делать не новые шрифты, а screenmap. Если у вас используются шрифты cp866, то надо просто изготовить табличку из 256 байт, которая будет транслировать коды из cp1251 в cp866 (пусть она называется - cp1251-cp866) и "подсунуть" ее syscons. Если вы хотите во время работы переключаться между различными кодировками, надо сделать три командных файла и запускать их в нужный момент. Например, если не трогать шрифты (пусть это будут шрифты для cp866) и "перенастройку" дисплея делать с помощью screenmap, то эти файлы могут выглядеть так:
Напомню только, что и шрифты, и "таблица перекодировки", и "раскладка клавиатуры" действуют на все виртуальные терминалы. Поэтому установить для разных терминалов разные "типы русификации" не получится. И, наконец, надо заметить, что русификация драйвера терминала, хотя и важная часть русификации всей системы, но не единственная. Если вы хотите, чтобы все программы нормально понимали русский язык в кодировках отличных от koi8-r, вам придется еще менять переменную окружения LANG (а возможно и некоторые другие). А для cp1251 еще и изготовить "locale" (набор таблиц, описывающих особенности национального языка). Кроме того, некоторые программы (например, чтения/писания почты) возможно придется "отконфигурировать" индивидуально. Но, для того, чтобы "по быстрому" просмотреть или подправить какой-нибудь документ в "нестандартной" кодировке, скорее всего "сойдет" и описанное решение. Иван Паскаль pascal@tsu.ru |
|
CITForum © 1997–2025