Как-то так сложилось, что развитие
Юникс-подобных систем в советские времена проходило либо
в РСФСР, либо под руководством из РСФСР, причём тогда и
не подозревали, что кому-то в голову придёт работать с
текстами, написаными на отличном от русского языках.
Неформально была придумана кодировка 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.
_____________________________________________________________
Лаврусик Игорь: freebsd-1251@tut.by