Ключевые слова:rus, freebsd, unicode, utf8, (найти похожие документы)
From: Моторин В.Ю. aka wolf_black <wolf_black@rambler.ru.>
Date: Wed, 2 Aug 2007 18:21:07 +0000 (UTC)
Subject: Настраиваем русский Unicode в FreeBSD-5.3.
Оригинал: http://BSDPORTAL.RU
Руководство по настройке Unicode
Небольшое вступление.
На юникс-форумах происходит много споров на тему "А нужен ли юникод
юникс-системам ?",но чёткого вывода эти споры так и недают.Сделаем
простой вывод,что раз есть такая кодировка ,значит она кому то нужна .
Я не буду рассматривать её достоинства или недостатки ,не буду
склонять к тому чтобы срочно все переходили на 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 нужны
мап-файлы (файлы кодировок ввода/вывода символов на консоль) .Просто
посмотрим в каталоги /usr/share/syscons/scrmaps и
/usr/share/syscons/keymaps и убедимся что файлы в кодировке юникод
отсувствуют,длительные поиски в сети как мои ,так и заинтересовавшихся
товарищей юникодных мап-файлов дали отрицательный результат,да и вобще
если таковые и были бы ,то сама структура syscons вызывает сомнения с
точки зрения пригодности к юникоду ,но это требует отдельных широких
исследований.А как же тогда юникод ? Ответ:"X-Window -вот что нам
нужно ". По простому называемые иксы давно готовы к принятию юникода
Собственно с ними и будем работать.Конечно разность кодировок в
консоли и иксах может вызывать противоречивые чувства у многих (типа
локаль должна быть едина) ,но как говориться и здесь можно найти свои
преимущества.Cама локаль идёт во 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 .Это
нужно для нормального отображения и вобще работы в некоторых
приложений (подойдут из всем ивестной сиситемы виндовс).Рекомендую
после того как скопированны шрифты сделать следущее под рутом :
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-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
После этого проблем никаких.
Midnight Commander.
Самый популярный файл-менеджер вызвал больше всего головной
боли.Обычный устанавливаемый mc из /usr/ports/misc/mc показал изрядную
неспособность работать в юникоде ,даже в юникодных терминалах
проявляется неотображение mc вобще или нестабильная работа- пропадание
некоторых букв при вводе и т.п. Ясно что тут дело в опциях компиляции
.Здесь есть три пути борьбы с данной проблемой :
Путь No.1 (юниксоида):
1)Распаковать находящиеся в каталоге /usr/ports/distfiles исходники с
mc-4.6.0.tar.gz в любой каталог под рутом (прежде удалите
установленный mc) .
2)Берём патчи отсюда -
http://www.linux.kiev.ua/%7Esimonov/files/unicode/mc-utf8.tar.gz -
распаковываем в каталог с исходником по примеру :
cat ./.utf8 | patch2 -p1 -b .utf8
и далее также со всеми патчами .
3)Делаем следущую перекодировку :
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
4) Далее упаковываем исходник опять в формат tar.gz и кидаем его в
/distfiles ,идём в /usr/port/misc/mc и в Makefile добавляем для
CONFIGURE_ARGS+ опцию сборки --with-screen=slang .Потом всё как обычно:
make
make install
При этом сохраниться целостность системы и получите юникодный mc.
Путь No.2(меньшего сопротивления):
Установить вместо обычного mc из портов его форк
-/usr/ports/misc/mc-light. Данное ответвление mc развивается нашим
российским разработчиком .Что мы теряем при этом :руссифицированное
меню ,взаимодействие с иксами .Но это при работе в терминале не суть
важно ,но что приобретаем :полная поддержка юникода ,множество
кодировок (особенно при это видно при просмотре по F3 файлов с разными
кодировками и при перекодирование "на лету" по CTRL+T ),и некоторыми
дополнительными фичами,одна из которых прямая запись на CD через
обыкновенное копирование по F5 и ещё много других ,не говоря уж о
красивом разноцветном интерфейсе.
Путь No.3 :
Перебороть в себе тягу к mc ,и использовать графические файл-менеджеры
поддерживающие юникод - krusader,gnome-commander,gentoo, и т.д.
Скажу что я не смог себя перебороть это Smile .Я выбрал путьNo.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 в раздел "FreeBSD и другие " ,или пишите
по почте .
как патчить mc можно описать по подробнее? ставил mc-light но все равно шрифты русские не отображаются коректно (часть букв есть части нет)в xterm, а если зайти в папку то в строке пути пишется все нормально. Также если использовать просто xterm то каталоги и файлы создаются и видятся коректно. Настройки все как в статье, если нужны конвиги выложу.
заметил данный баг с версии 6.3 бсд. вместо пвевдографики были кракозябры.
погуглив понял что причина была в баге в slang.
обновить порты и пересобрать mc. баг поправили.