Все о Linux. LinuxRSP.Ru


Cвежие новости Linux и BSD, анонсы статей и книг прямо в почтовый ящик!
Подписаться письмом


 Сегодняшние новости:

25 лет исполнилось ядру Linux

Релиз KDevelop 5.0

Oracle открывает код JDK9 для ARM

Выпущен Timewarrior 1.0.0

Релиз Android 7.0

Percona Memory Engine для MongoDB на базе WiredTiger

PowerShell открыт и доступен для Linux

Форк TrueCrypt: VeraCrypt 1.18

Релиз Snapcraft 2.14

Релиз Go 1.7

Стабильный выпуск рабочего стола Lumina

Вышла первая версия аналога OpenCV - DCV 0.1

Выпуск минималистичной программы для мониторинга jsonmon 3

В MIT разработали новый язык программирования

Первый релиз Qt5Gtk2

Godot 2.1 - новая версия открытого игрового движка

Свободная цифровая станция звукозаписи: Ardour 5.0

Обновление SkypeWeb Plugin for Pidgin

Вышла версия 3.0 Android File Transfer для Linux (и для OS X)

Программный аналог MIDI-контроллера для создания музыки: Launchpadd v1.3

Mozilla спонсирует поддержку Python 3.5 в PyPy

Ef 0.08 - программа для моделирования динамики заряженных частиц

Обновление текстового редактора TEA до версии 42.0.0

Релиз OpenOrienteering Mapper 0.6.4

Вышли Guix и GuixSD 0.11

Релиз Opera 39

Выпуск LibreOffice 5.2

В OpenSSH обнаружены и устранены некоторые уязвимости

Эмулятор FCEUX 2.2.3

Компания Билайн переходит на российскую СУБД с открытым исходным кодом Tarantool

Google

 Новые статьи :

Утилиты для восстановления потерянных данных в Linux

Лучшие файловые менеджеры для Android

20 лучших бесплатных книг о Linux

Как сгенерировать открытый/закрытый SSH-ключ в Linux

Grive - клиент Google Drive для Linux с открытым исходным кодом

Протокол IPv6: варианты подключения

Сервер из образа: DHCP + TFTP + Initrd + OpenVZ

Обзор веб-панелей управления хостингом

Приёмы работы с Vim

Nginx как Reverse Proxy для сайта, использующего SSL

Разработка модулей ядра Linux

Мониторинг нагрузки http-сервера Apache 2

Перевод комментариев к файлу конфигурации Squid

Решение проблем при использовании "1c предприятие" 8.2 в Linux

Advanced Bash-Scripting Guide Искусство программирования на языке сценариев командной оболочки







Rambler's Top100





 
 

Русификация

Содержание

Русификация, представляющаяся мне необходимым условием настольного использования любой системы в мирных целях, естественным образом имеет перед собой две цели - русификацию текстового режима (то есть консоли), и режима графического (сиречь X Window).

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

Консольный режим

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

Чем я и занялся, привлекая по ходу дела всякие доступные источники. Из них следовало, что для тотальной русификации консоли всего только, что и требовалось - наличие в файле /etc/rc.conf (основном конфигурационном файле FreeBSD) следующих строк:

keymap="ru.koi8-r"
keychange="61 ^[[K"
scrnmap="koi8-r2cp866"
font8x16="cp866b-8x16"
font8x14="cp866-8x14"
font8x8="cp866-8x8"

Смысл их был ясен: первая отвечала за ввод русских букв в кодировке KOI8 (хотя в /usr/share/syscons/keymaps имелась и раскладка для DOS-кодировки, ru.cp866.kbd), вторая - за "правильность" (с точки зрения описания терминала) поведения клавиши Delete (при отсутствии этой строки она функционирует как Backspace). То есть к воспроизведению символов на экране они отношения не имели.

Кстати, во второй строке (отсутствующей в моем файле rk.conf) последовательностью ^[ обозначен символ с кодом 27 (он же 0033 или 0x1B). Ввести его можно либо в каком-нибудь редакторе двоичных файлов, либо, скажем, в текстовом редакторе le, имеющем функцию вставки символов из кодовой таблицы. Должен, однако, заметить, что после появления у меня этой строки клавиша Delete перестала работать вообще, издавая лишь жалкое попискивание.

А вот следующие строки, присутствующие в моем rc.conf, как раз и отвечали за вывод символов кириллицы. Третья перекодировала вводимые с клавиатуры KOI-символы в выводимые на экран символы CP866, а три последние обеспечивали им шрифтовое воплощение для различных режимов - то есть стандартного представления 25 строк и 80 символов в строке (font8x16) и прочих (43x80 и других).

Кроме шрифтов в CP866, в каталоге /usr/share/syscons/fonts имелись и экранные KOI-шрифты тех же размеров. Так что ничего не запрещает использовать и их, обойдясь, естественно, в этом случае без строки scrnmap="koi8-r2cp866". Однако при этом возможны потери в передаче псевдографики.

Шрифт для стандартного режима в обеих кодировках имел по три варианта - font8x16, font8x16b и font8x16c. Первые два несколько различались обликом (как бы представляли различные гарнитуры, если этот термин здесь уместен), в третьем, как говорят, псевдографика заменена какими-то экзотическими знаками. Однако и при font8x16, и при font8x16b нормального воспроизведения меню в том же редакторе le не получалось. То есть дело было явно не в этом.

Так я и пребывал в недоумении, пока не сообразил, что, кроме указания на перекодировщик и шрифты, их еще следует вывести на виртуальные консоли. Что в Linux делается через соответствующие записи в /etc/rc.d/rc.locale или в /etc/console-tools/config, в зависимости от используемого в дистрибутиве консольного драйвера.

Начал искать аналоги. Это оказался файл /etc/ttys, описывающий параметры виртуальных консолей вообще, в том числе задающий их количество и запускающий на них инициирующий процесс. Интересующая меня секция имела вид:

ttyv0   "/usr/libexec/getty Pc"         cons25  on  secure
# Virtual terminals
ttyv1   "/usr/libexec/getty Pc"         cons25  on  secure
ttyv2   "/usr/libexec/getty Pc"         cons25  on  secure
ttyv3   "/usr/libexec/getty Pc"         cons25  on  secure
ttyv4   "/usr/libexec/getty Pc"         cons25  on  secure
ttyv5   "/usr/libexec/getty Pc"         cons25  on  secure
ttyv6   "/usr/libexec/getty Pc"         cons25  on  secure
ttyv7   "/usr/libexec/getty Pc"         cons25  on  secure
ttyv8   "/usr/X11R6/bin/xdm -nodaemon"  xterm   off secure

Так вот, оказалось, что в каждой строке следовало заменить cons25 на cons25r - и после перезагрузки вся псевдографика пришла в норму.

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

Еще можно поэкспериментировать и с использованием экранных шрифтов в кодировке KOI8-R. В этом случае, естественно, отпадает необходимость в строке scrnmap="koi8-r2cp866". Правда, при этом (в силу известных аппаратных особенностей VGA-совместимых адаптеров), рисуемые символами псевдографики горизонтальные линии приобретают вид частого пунктира (в программах типа le или Midnight Commander), но с этим можно мириться.

Хуже другое: при использовании экранных шрифтов koi8 напрочь пропадают русские буквы "п", "р", "я" и "с". А при любом движении мышью на их месте начинает мелькать нечто вроде стрелки курсора в Windows.

Дело оказалось в том, что при использовании мыши в консольном режиме коды этих символов в кодировке KOI8 перепрограммируются для отрисовки мышиного курсора, тогда как в кодировке CP866 они попадают на редко используемые символы псевдографики. Так что для работы с русскими экранными шрифтами KOI8 придется еще отказаться и от мыши, отключив в файле rc.conf строку

moused_enable="Yes"

что мне показалось уж совсем скучным, и я вернулся к родимым альтернативным шрифтам.

На чем можно было бы и успокоиться, но для порядка следовало установить и локаль. Сделать это следовало через файлы ресурсов используемых оболочек - bash, естественно, да и csh заодно. Причем можно сразу локализовать все вместе, поправив соответствующие (profile и csh.login) файлы из каталога /etc. А можно - установить локаль для каждого отдельно взятого пользователя - на случай, если кто-то из моих ипостасей не захочет жить в русскоязычном окружении.

Я избрал второй вариант. И внес в файл $HOME/.profile строки

LANG=ru_RU.KOI8-R; export LANG
MM_CHARSET=KOI8-R; export MM_CHARSET

устанавливающие соответствующие переменные среды и обеспечивающие их экспорт для использования внешними программами.

Чтобы добиться того же эффекта для среды csh, в файл $HOME/.login следует вписать строки

seteven  LANG=ru_RU.KOI8-R
seteven  MM_CHARSET=KOI8-R

поскольку необходимости в экспорте здесь нет. На чем с русификацией консоли можно было покончить.

X Window

Русификация X Window, как ни странно, также вызвала некоторые проблемы. Казалось бы, Икс - он и в Африке Икс, и все, применимое для Linux, должно работать и во FreeBSD. По большому счету, так и есть, однако в мелких деталях обнаружились различия.

Начать с того, что при первом запуске X Window я увидел на экране знакомую всем абракадабру из смеси как бы греческих букв с подобием диакритических французских символов. Проблема известная, и как она решается, на Руси знают все: нужно просто проверить FontPath из XF86Config (при управлении шрифтами через него) или из config соответствующего фонт-сервера, если таковой используется, на наличие каталогов с русскими шрифтами. И при благоприятном результате перенести их в самое начало списка (при неблагоприятном - вписать их туда руками). Сами же шрифты, по меньшей мере в исполнении Cronyx, входят в XFree стандартно.

Я начал с XF86Config - каталоги с кириллическими шрифтами там имелись, и были благополучно помещены во главу списка FontPath. После чего X'ы отказались загружаться вообще, радостно сообщив о ненахождении шрифта fixed.

Дело оказалось в том, что я красивости ради привел формат FontPath к привычному виду

FontPath   "/usr/X11R6/lib/X11/fonts/cyrillic/"
FontPath   "/usr/X11R6/lib/X11/fonts/misc/"

и так далее. Тогда как в исходном файле (копию которого я благоразумно сохранил, чего и вам желаю перед началом любых экспериментов) она имела вид

FontPath
"/usr/X11R6/lib/X11/fonts/cyrillic,/usr/X11R6/lib/X11/fonts/misc/,..."

то есть каталоги перечислялись в одну строчку, через запятую. Причина такового явления мне не понятна до сих пор, однако после возврата к прежнему формату X'ы запустились, и русские буквы на экране появились. Правда, кое-где (например, в списках закладок Netscape) сохранилась и абракадабра, но это были уже мелочи. И к тому же решаемые, вероятно, через font.alias.

С клавиатурой я возился дольше. Как уже было сказано, при первичной настройке X'ов через XF86Setup я заказал русскую клавиатуру и даже какой-то из предложенных переключателей. Что на секции Keyboard файла XF86Config отразилось в виде вроде этого:

Section  "Keyboard"
Protocol  "Standard"
XkbRules  "xfree86"
XkbModel  "pc104"
XkbLayout  "ru"
XkbOptions  "..."

Точно переключатель групп я запамятовал, поскольку мой любимый grp:caps_toggle отсутствовал не только в настройках, но и в файле xfree86.lst каталога /usr/X11R6/lib/X11/xkb/rules.

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

Поглядев наличные руководства по русификации X Window под FreeBSD, в одном из них я обнаружил дополнительное (плюс к внесению строке подобного приведенным мной) указание, что в файле xinitrc следует поместить путь к Xmodmap. Мне это показалось странным - вроде русификация через замену Xmodmap и через xkb друг друга исключают (тем более, что на обычном месте, в /usr/X11R6/lib/X11/xinit/, ни малейшего Xmodmap не обнаруживалось).

Однако после недавних экспериментов с Mandrale 7.2 (где использовался именно собственный Xmodmap), я уже ничему не удивлялся. И занялся изысканиями подходящего файла.

Воспользовался для начала рекомендацией из цитировавшегося руководства - указать путь /usr/ports/russian/X.language/files/xmodmap. Однако ладно, что тот оказался каким-то древним (чуть не для версии X'ов 3.1.сколько_то), так еще и не работал. То есть не оказывал на переключение клавиатуры никакого действия. Как при отсутствии строки XkbDisable, так и при ее наличии.

Опробовал серию Xmodmap'ов, изготовленных собственноручно в процессе борьбы с Mandrale 7.2 (в том числе и работавшие в нем) - с тем же успехом: или никакого переключения не происходило, или при переключении на кириллицу ввод просто блокировался.

Наконец, решил вернуться к истокам, то есть тому, что Иван Паскаль назвал первым способом задания полной конфигурации xkb. Заключающемуся в том, что каждый из компонентов ее базы данных определяется непосредственно. Получилось следующее:

#XkbDisable
Protocol  "Standard"
XkbKeycodes  "xfree86"
XkbTypes  "complete"
XkbCompat  "complete"
XkbSymbols  "us(pc104)+ru+group(caps_toggle)"
XkbGeometry  "pc(pc104)"

И неожиданно переключение на кириллицу (по клавише CapsLock) заработало! Правда, раскладка была чисто DOS'овская, от которой я напрочь уже отвык. Но тут вспомнил про блок winkeys, обратился к строке XkbSymbols и к приписал его к ru, в результате чего строка приобрела вид

XkbSymbols  "us(pc104)+ru(winkeys)+group(caps_toggle)"

На чем сердце мое и успокоилось. Поскольку локаль для X Window я установил в промежутках борьбы с клавиатурой. Которая присутствовала как класс, но в /usr/X11R6/lib/X11/locale/locale.alias имела довольно странный вид: в колонке полного описания псевдонимов обычно стояло что-нибудь вроде ru_SU.KOI8-R. Поскольку жить в стране, ранее занимавшей одну шестую суши, а нынче съежившейся до размеров Судана, я не собирался, то заменил все вхождения SU на RU - и завязал с русификацией.

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

Дополнительные замечания

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

Кроме того, я не останавливался на использовании шрифтов, в том числе и TrueType, каковое вроде бы возможно. Да и печать русскоязычных документов осталась за бортом. Причина - в том, что с этими вопросами пока не разбирался. Как дойдут руки - напишу и об этом.

[Назад] [Содержание] [Вперед]


© Алексей Федорчук
http://onix.nm.ru

      

Связь | О проекте LinuxRSP | Реклама | О Linux
© 1999-2017 LinuxRSP