Как-то так сложилось, что развитие Юникс-подобных систем в советские времена проходило...
Автор:
Разместил: slayer   Дата: 2006-07-03 15:47
Комментарии: (0)   Рейтинг:
Как-то так сложилось, что развитие Юникс-подобных систем в советские времена проходило либо в РСФСР, либо под руководством из РСФСР, причём тогда и не подозревали, что кому-то в голову придёт работать с текстами, написаными на отличном от русского языках. Неформально была придумана кодировка koi8-r, основным преимуществом которой было то, что текст, на машинах, не поддерживающих эту кодировку, оставался читабельным (напимилал транслит). И вот беда - добавили бы в неё 3-5 национальных украинских и белорусских символов - цены бы этой кодировке небыло... Но... Украинцы молодцы - пасетовали на этот счёт и заимели кодировочку koi8-u. Эти кодировки и были приняты как стандарт кириллицы в Юникс-системах.

С выходом Windows кириллические кодировки IBM-866 и koi8 стали непригодными по причине своей текстовой ориентированности. И надо признаться, что Майкрософт, разработав cp1251 (Cyrillic - Windows), подумала о белорусах и украинцах гораздо больше, чем сами белоруссы и украинцы. И хотя были несмелые попытки разработки кодировки koi8-su, и теперешняя тенденция говорит о глобальном переходе на Unicode кодировки ( UTF-8 ). Но первая не получила признания общественности, а под второй возникает масса неоправданных трудностей при использовании (надеюсь - пока). Поэтому если сидя под Windows вы имели неосторожность создать файл с буквой "ў" в имени - то не так-то просто его из-под Юникса прочитать будет.

Да и иметь систему в другой кодировке, когда вокруг одни Виндозеры - это напрягает, как морально, так и физически, поэтому вооружаемся статьёй и вперёд!

2. CP1251 locale для FreeBSD

Локаль cp1251 поставляется в дистрибутиве с последними версиями системы (Для версии 4.9 и выше это 100% так. Ходит молва что это выполняется для систем старше июня 2003) Если каким-то чудом у вас её нет - качайте и устанавливайте! CP1251-locale
Если всё нармально - то в папочке /usr/share/locale/ должен иметь место файлик, наподобии такого: ru_RU.CP1251

Использование locale CP1251 на консоли и виртуальных терминалах, вместо KOI8-R

Файлик /etc/login.conf исправляем следующим образом:

russian|Russian Users Accounts:
:charset=CP1251:
:lang=ru_RU.CP1251:
:tc=default:

Далее правим конфиги наших любимых оболочек:
Для Bourne-Shell / Bash в файл /etc/profile вписываем:

...
LANG=ru_RU.CP1251; export LANG
LC_ALL=ru_RU.CP1251; export LC_ALL
MM_CHARSET=CP1251; export MM_CHARSET
...

Для Csh / Tcsh в файл /etc/csh.login вписываем:

...
setenv LANG ru_RU.CP1251
setenv MM_CHARSET CP1251
...

либо проделываем аналогичные действия у пользователя в $HOME, в .profile/.bash_profile (shell/bash), либо в .login (csh/tcsh).

Консоль и виртуальные терминалы (фонты и клавиатура) настраиваются через файл /etc/rc.conf: До начала редактирования этого файла вам желательно иметь файл клавиатурной раскладки для кодировки cp1251, с загадочным названием ru.cp1251.kbd. Скачайте его и положите в /usr/share/syscons/keymaps.
Поскольку шрифты cp866 самые удачные, используем их таблицу перекодировки из cp866 в 1251 - win2cpp866.scm качаем и ложим в /usr/share/syscons/scrnmaps
Вот теперь в /etc/rc.conf смело пишем следующее:

...
keymap=ru.cp1251
# можно не использовать, by default клавиша "CAPS LOCK"
#keychange="61 ESC[K"
scrnmap="win2cpp866"
font8x16=cp866-8x16
font8x14=cp866-8x14
font8x8=cp866-8x8
...

Для тех, кому интересно: Возникает вопрос, почему нельзя использовать напрямую шрифты ср1251, а надо перокодировать из ср866? Отвечаю: ср866 - кодировка, разработанная IBM в незапамятные времена, когда о графике и думать боялись и наряду со многими другими вшита в BIOS вместе со своими шрифтами. Основным отличием от ср1251 является то, что она ориентирована сугубо на текстовый режим работы дисплея, по сему имеет в своём распоряжении всякого рода псевдографику (ну например рамочки красивенные рисовать в MidnightCommander). СР1251 лишена этого в силу своей графической ориентированности. Поэтому любознательные могут попробавать написать следующее:
...
keymap=ru.cp1251
#keychange="61 ESC[K"
font8x16=cp1251-8x16
font8x14=cp1251-8x14
font8x8=cp1251-8x8
...
и посмотреть, что получиться. Во-первых шрифт на самом деле куда менее красивый, во вторых всякого рода рамочки уже не рисуются, и, самое главное, некоторые символы расцениваются как управляющие, из-за чего вообще не отображаются, либо отображаються с различными приколами. Ну как преимущество - возможность использования символов, отсутствующих в 866 и присутствующих в 1251. В основном же примере используется карта перекодировки из 1251 в 866, и вывод производиться уже 866-ми шрифтами и кодировкой... Недостаток: символы "ІіЎў№" да и многие другие вы увидите в виде крючков.


Примичание: Проверте и при необходимости поправте содержимое файла /etc/ttys. Оно должо сожержать похожие строки:
ttyv0 "/usr/libexec/getty Pc" cons25r on secure
...
ttyv5 "/usr/libexec/getty Pc" cons25r on secure
...
т.е. все cons25, если таковые имеются, должны быть исправлены на cons25r.

Ну теперь перегрузитесь и проверте: переключите раскладку и понабирайте русский текст, командой cat попробуйте вывести какой-либо текст набранный под Виндой и т.д.

3. Наборы CP1251 фонтов для XFree86

Есть много разных CP1251 фонтов для X11, у меня стоят следующие:
* Шрифты cyr-rfx проекта (наиболее полные и качественные)
* Cronyx фонты (Windows CP1251)
* Шрифты, сконвертированные из Cronyx-koi8 шрифтов
* XRus-1251 шрифты
* Micex фонты (Windows CP1251)
* Ещё одни Cronyx (Windows CP1251)

Разворачиваете нужные или подходящие вам шрифты в /usr/X11R6/lib/X11/fonts, добавляете их в /etc/X11/XF86Config, например:

...
#
FontPath "/usr/X11R6/lib/X11/fonts/local/"
FontPath "/usr/X11R6/lib/X11/fonts/cyrillic/misc/"
FontPath "/usr/X11R6/lib/X11/fonts/cyrillic/75dpi/"
FontPath "/usr/X11R6/lib/X11/fonts/cyrillic/100dpi/"
#--lavr Windows-CP1251 fonts
FontPath "/usr/X11R6/lib/X11/fonts/win-micex/misc/"
FontPath "/usr/X11R6/lib/X11/fonts/win-micex/75dpi/"
FontPath "/usr/X11R6/lib/X11/fonts/win-micex/100dpi/"
FontPath "/usr/X11R6/lib/X11/fonts/misc/"
FontPath "/usr/X11R6/lib/X11/fonts/75dpi/:unscaled"
FontPath "/usr/X11R6/lib/X11/fonts/100dpi/:unscaled"
FontPath "/usr/X11R6/lib/X11/fonts/Type1/"
FontPath "/usr/X11R6/lib/X11/fonts/CID/"
FontPath "/usr/X11R6/lib/X11/fonts/PEX/"
FontPath "/usr/X11R6/lib/X11/fonts/TTF/"
FontPath "/usr/X11R6/lib/X11/fonts/Speedo/"
FontPath "/usr/X11R6/lib/X11/fonts/75dpi/"
FontPath "/usr/X11R6/lib/X11/fonts/100dpi/"
FontPath "/usr/local/share/koi8r-ps/"
#
...

Можно даже взять шрифты *.ttf из Винды, также прописав папку с ними в этом файле и выполнив команду "mkfontdir" в папке с текущим шрифтом.
Рестартуете X11 или прямо в сеансе добавляете их в FontPath:

xset +fp /usr/X11R6/lib/X11/fonts/win-micex/misc
xset +fp /usr/X11R6/lib/X11/fonts/win-micex/75dpi
xset +fp /usr/X11R6/lib/X11/fonts/win-micex/100dpi

Теперь смело можно смотреть файлы в Windows-CP1251 кодировке, набирать текст и свободно переносить его в Винду, и самое главное - появляется возможность маунтить виндовые разделы, в которых есть файлы, в имени которых затусавались символы, отсутствуюющие в кои8!

Для переключения раскладок в X11 можно воспользоваться портами FreeBSD:

* /usr/ports/russian/xxkb Ивана Паскаля
* /usr/ports/russian/xruskb Александра Лукьянова

Либо если вы используете довольна новый Х-сервер (не ниже XFree86-4.3.0), то воспользуйтесь встроеным в него xkbd, добавив в XF86Config следующие строки:

Section "InputDevice"
Identifier "Keyboard1"
Driver "Keyboard"
Option "AutoRepeat" "500 30"
Option "XkbRules" "xfree86"
Option "XkbModel" "pc104"
#Англиская и белорусская раскладки ( ru - для русской, и т.д. ):
Option "XkbLayout" "us,by"
#Переключение по ctrl+shift
Option "XkbOptions" "grp:ctrl_shift_toggle"
Option "XkbVariant" "winkeys"
EndSection

И перезапустите Х-сервер.

4. Монтирование дисковых разделов других файловых систем в cp1251 в FreeBSD

У команды mount и производных от неё mount_msdos, mount_ntfs и т.д. имеется куча параметров, среди которых имеется и параметр -W, задающий файл перекодировки символов. Для злосчастной кодировки koi8-r это был файлик из стандартного дистрибутива koi2dos. Теперь это вчерашний день! Быстренько качаем отсюда файлик win2dos и копируем его в папочку /usr/libdata/msdosfs.
Теперь раздел ФАТ32, к примеру, монтируется коммандой такого вида:

mount_msdos -Wwin2dos /dev/ad0s6 /mnt/FAT32

Либо аналогично через запись в /etc/fstab следующей строки:

/dev/ad0s6 /mnt/FAT32 msdos rw,-Wwin2dos,-Lru_RU.CP1251 0 0

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

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

Источник http://www.bsdportal.ru/kb.php?mode=article&k=79

Автор Лаврусик Игорь freebsd-1251@tut.by