Валерий Моторин
На юникс-форумах происходит много споров на тему "А нужен ли юникод юникс-системам?", но чёткого ответа эти споры так и не дают. Сделаем простой вывод: раз есть такая кодировка,значит она кому то нужна. Я не буду рассматривать её достоинства или недостатки, не буду склонять к тому, чтобы срочно все переходили на utf, а просто поделюсь своим опытом перехода на unicode в системе FreeBSD. Опять же сразу оговорюсь что данная мной методика не является обязательной в исполнение каждого пункта статьи, а с успехом может быть заменена на другие методы решения возникших вопросов.
Если посмотреть на дистрибутивы Linux, то там уже довольно удачно юникод применяеться в качестве основной кодировки таких дистрибутивов, как Suse, Red Hat/Fedora и некоторые другие. Остальные создатели дистрибутивов посматривают в эту сторону, но пока не все спешат с переходом на юникод по умолчанию в системе, хотя полная поддержка utf-локализации обеспеченна практически во всех линукс-дистрибуивах.
До сей поры юникод как-то обходил стороной BSD-системы. Но прогресс, так сказать, не стоит на месте, и в недавних релизах BSD-систем (FreeBSD, DragonFlyBSD, NetBSD) появилась в общем-то полная поддержка utf-локализаций. Остановимся на самой популярной из них - FreeBSD (на даный момент версия 5.3), но я думаю, то же самое может быть применено и в других BSD-системах. Поставим для себя такую цель: работать во FreeBSD, плюс чтоб была обеспеченна полная руссификация, причём в юникоде.
Вот тут мы наступаем на первые грабли .Для начала, что бы не морочить голову, делаем руссификацию в точности как описанно в HandBook - не больше и не меньше.
А как же юникод? Вот тут сразу придётся огорчить читателя, что консоль
FreeBSD пока не совсем готова к принятию юникода, а для нормальной работы
вам придёться использовать старый добрый koi8-r. Причин здесь несколько, но скажу лишь про одну из основных. Для для того чтобы реально попробовать юникод в консоли FreeBSD нужны map-файлы (файлы кодировок ввода/вывода символов на консоль) .Просто посмотрим в каталоги /usr/share/syscons/scrmaps
и /usr/share/syscons/keymaps и убедимся что файлы в кодировке юникод отсувствуют, длительные поиски в сети как мои ,так и заинтересовавшихся товарищей юникодных map-файлов дали отрицательный результат, да и вобще если таковые и были бы ,то сама структура syscons вызывает сомнения с точки зрения пригодности к юникоду, но это требует отдельных широких исследований. А как же тогда юникод? Ответ: X Window System - вот что нам нужно.
По простому называемые Иксы давно готовы к принятию юникода .Собственно,
с ними и будем работать. Конечно различие кодировок в консоли и Иксах
может вызывать противоречивые чувства у многих (типа локаль должна быть едина), но, как говориться, и здесь можно найти свои преимущества.Cама локаль UTF8 идёт во FreeBSD начиная с версии 5.2, но если вдруг не окажется у вас по каким либо причинам, то её можно установить из портов - /usr/ports/misc/utf8locale.
Оговорюсь сразу, что у меня оболочка bash, и всё ниженаписанное по настройкам применительно к ней, но и с другими шеллами затруднений не должно возникнуть,главное - понять суть вопроса.
Собственно, раз мы будем работать с юникодом в Иксах, то задаём переменные для реализации юникодной локали в домашнем каталоге, в файле ~/.xinitrc, в самых первых строках файла. Нужно задать соответствующие переменные, для чего привожу простой пример состава файла ~/.xinitrc:
export LANG='ru_RU.UTF-8' export LC_ALL='ru_RU.UTF-8' exec startfluxbox
Конечно, fluxbox может быть заменён на другой менеджер. Мне по почте отписали что что переменную LC_ALL следует делать LC_ALL="",то есть оставить пустой, но на поверку оказалось, что если так сделать,то получаем большие проблемы с вводом русских букв в иксовых терминалах, а вот при указании проблема исчезает. Ещё совет - нужно побольше установить шрифтов TTF в каталог /usr/X11R6/lib/X11/fonts/TTF. Это нужно для нормального отображения и вообще для работы в некоторых приложений (подойдут из всем ивестной сиситемы Windows).Рекомендую - после того как скопированны шрифты, сделать следущее под рутом:
cd /usr/X11R6/lib/X11/fonts/TTF mkfontscale mkfontdir fc-cache
И проверьте что в /etc/X11/xorg.conf указан путь к /usr/X11R6/lib/X11/fonts/TTF.
Не во всех терминалах ввод/ввывод русского языка при локали юникод проходит
нормально, лучше для этого под рукой иметь терминалы с умолчательной юникодной поддержкой. Нормальные терминалы, поддерживающие юникод-ввод русского с клавиатуры, и вывод сообшений на экран терминала по-русски - xterm, mlterm, rxvt-unicode, gnome-terminal. К остальным нужно применять некоторые ухищрения, вот например для aterm: в файл ~./.Xdefault пишем:
Aterm*background: black Aterm*foreground: #CECECE Aterm*scrollBar: true Aterm*loginShell: true Aterm*saveLines: 3000 Aterm*transparent: true Aterm*transpscrollbar: true Aterm*tintingType: true Aterm*tinting: #a07040 Aterm*shading: 60 Aterm*fade: 90 Aterm*title: aterm Aterm*iconName: aterm Aterm*font: -*-terminus-medium-*-*-*-*-*-*-*-*-iso10646-1 Aterm*boldFont: -*-terminus-medium-*-*-*-*-*-*-*-*-iso10646-1 Aterm*geometry: 80x24 Aterm*termName: aterm
В принципе, подойдут все сейчас популярные менеджеры. Опробованны в юникоде: KDE, XFCE, wmaker, семейство боксов - openbox, blackbox, hackedbox. Проблем в работе с юникодом не возникло. Я уверен что и с Gnome никаких замечаний не будет. С установленным из портов fluxbox-0.1.14 есть проблема - никак не хотели отображаться опции из Configure и заголовки приложений. Рекомендую метод - взять и удалить эту версию fluxbox вобще ,а вместо нее взять последние исходники fluxbox-0.9.12 и пересобрать так:
$ ./configure \ --prefix=/usr/X11R6 \ --enable-xinerama \ --enable-shape \ --enable-slit \ --enable-kde \ --enable-gnome \ --enable-interlace \ --enable-nls \ --enable-timed-cache $ gmake $ gmake check $ gmake install
После этого проблем никаких.
Самый популярный файл-менеджер вызвал больше всего головной боли. Обычный устанавливаемый mc из /usr/ports/misc/mc показал изрядную неспособность работать в юникоде, даже в юникодных терминалах проявляется неотображение mc вообще или нестабильная работа - пропадание некоторых букв при вводе и тому подобное. Ясно, что тут дело в опциях компиляции. Здесь есть три пути борьбы с данной проблемой.
Путь 1 (юниксоида):
mc).$ cat ./.utf8 | patch2 -p1 -b .utf8и далее также со всеми патчами.
$ iconv -f iso8859-1 -t utf-8 -o mc.hint.tmp mc.hint && \ mv mc.hint.tmp mc.hint $ iconv -f koi8-r -t utf8 -o mc.hint.ru.tmp mc.hint.ru && \ mv mc.hint.ru.tmp mc.hint.ru
tar.gz и кидаем его в /distfiles, идём в /usr/port/misc/mc и в Makefile добавляем для CONFIGURE_ARGS+ опцию сборки --with-screen=slang. Потом всё как обычно:
$ make $ make installПри этом сохранится целостность системы и получится юникодный
mc.Путь 2 (меньшего сопротивления):
Установить вместо обычного mc из портов его форк - /usr/ports/misc/mc-light. Данное ответвление mc развивается нашим российским разработчиком. Что мы теряем при этом: руссифицированное меню, взаимодействие с иксами. Но это при работе в терминале не суть важно, зато что приобретаются: полная поддержка юникода, множество кодировок (особенно при это видно при просмотре по F3 файлов с разными кодировками и при перекодирование "на лету" по CTRL+T ),и некоторыми дополнительными фичами, одна из которых прямая запись на CD через обыкновенное копирование по F5 и ещё много других, не говоря уж о красивом разноцветном интерфейсе.
Путь 3:
Перебороть в себе тягу к mc, и использовать графические файл-менеджеры, поддерживающие юникод - krusader, gnome-commander,gentoo, и т.д. Скажу, что я не смог себя перебороть это :). Я выбрал путь 2,чем чрезвычайно доволен, но, как говориться, каждому своё.
Те приложения, которые нормально поддерживают по умолчанию юникод, работают более-менее сносно в вышеуказанных юникодных терминалах. Например такое приложение как centericq, кроме utf-8, уже умеет поддреживать utf-16 и работает без проблем, только немного поправив опции. Например из редакторов с успехом работают в юникоде - nano, pico, vi. Из консольных клиентов хорошо отработал cone. Но и для нормальной работы с приложениями не поддерживающими юникод есть выход. Например, чтобы нормально работать с jed нужно в ~/.bash_profile прописать:
alias jed='LANG=ru_RU.KOI8-R; jed'ну и далее в том же духе для нужного вам приложения.
C простыми иксовыми и QT-приложениями проблем не замеченно. Но вот в GTK - в некоторых приложениях могут вместо букв быть квадратики или кракозябры (например, в меню xmms). Лечиться так: создаём в домашнем каталоге файл ~/.gtkrc и прописываем там следушее:
style "gtk-default" {
fontset = "-*-Nimbus Sans L-medium-r-normal--14-*-*-*-p-*-iso10646-1,\
-*-clearlyu-medium-r-normal--17-*-*-*-p-*-iso10646-1,\
-*-r-*-iso10646-1,*"
}
class "GtkWidget" style "gtk-default"
И всё - вместо квадратиков русские буквы, с размером шрифта можно поиграть.
Вот вроде и всё .Я остался работать в юникоде под FreeBSD , пока проблем не наблюдаю. Всех желающих обсудить данную тему прошу на http://www.linuxforum.ru в раздел Free и другие BSD, или пишите по почте.