Долгое время в OS FreeBSD использовался драйвер консоли «syscons».
Лучшее описание этого драйвера сделал Иван Паскаль:
после прочтения которого, у администраторов OS FreeBSD не возникает
вопросов по настройке locale и руссификации FreeBSD.
Однако во FreeBSD начиная с релиза 10.1, появился новый драйвер
консоли — vt (aka newcons).
Про данный драйвер, разработанный в FreeBSD Current (11) и перенесенный
в 10.1-RELEASE можно прочитать на FreeBSD Wiki:
Драйвер может работать как в текстовом, так и в графическом режиме VGA,
благодаря последнему и реализована поддержка UTF-8 в консоли.
Реализована интеграция с KMS видео драйверами для переключения между
Xorg и виртуальными терминалами.
Более подробную информацию по драйверу можно получить vt(4).
А информацию по настройке локализации в FreeBSD HandBook:
Основные моменты локализации FreeBSD (как и любой Unix-like OS):
1. Локализация консоли;
2. Локализация login shells и использование login class;
3. Локализация Xorg;
4. Локализация Applications (приложений).
Пункт 1. — Локализация консоли
необходим только в случае работы за локальной консолью.
Данный пункт локализации не требуется и не влияет на работу удаленных
text-mode эмуляторов терминалов, таких как putty или openssh.
Итак, начиная с релиза FreeBSD 10.1 в системе для Russian UTF-8, в консольном
драйвере vt(4) имеются:
— клавиатурные мапперы/переключатели:
# ls -la /usr/share/vt/keymaps/ | grep ru -r--r--r-- 1 root wheel 16228 Nov 12 06:04 ru.kbd -r--r--r-- 1 root wheel 16234 Nov 12 06:04 ru.shift.kbd -r--r--r-- 1 root wheel 16232 Nov 12 06:04 ru.win.kbd #
— фонты:
# ls -la /usr/share/vt/fonts/ -r--r--r-- 1 root wheel 8452 Nov 12 06:04 gallant.fnt -r--r--r-- 1 root wheel 8742 Nov 12 06:04 vgarom-8x14.fnt -r--r--r-- 1 root wheel 9864 Nov 12 06:04 vgarom-8x16.fnt -r--r--r-- 1 root wheel 5384 Nov 12 06:04 vgarom-8x8.fnt -r--r--r-- 1 root wheel 5400 Nov 12 06:04 vgarom-thin-8x16.fnt -r--r--r-- 1 root wheel 2704 Nov 12 06:04 vgarom-thin-8x8.fnt
Прим.: фонт gallant.fnt — красивый но не поддерживает кириллические
символы.
Консольный драйвер vt(4) by default использует для работы режим VGA
с разрешением 640x480x16 (vt_vga).
Для использования UTF-8, необходимо произвести следующие действия:
— добавить в /boot/loader.conf строку:
kern.vty=vt
означает использование консольного драйвера vt вместо syscons
Если потребуется собрать собственное ядро, только с новым драйвером
консоли, необходимо в ядро добавить:
#-- закомментарить vga, sc и оставить только vt #device vga # VGA video card driver #device sc device vt device vt_vga
ps. ядро GENERIC 10.1 уже собрано с поддержкой vt(4), man 4 vt.
Если в 11.0-RELEASE, консоль по умолчанию не загружается в графическом
режиме, такое возможно и при использовании FreeBSD в качестве гостевой
ОС, добавьте в /boot/loader.conf: hw.vga.textmode=0
— добавить в /etc/rc.conf
#-- Russians keymap, uncomment that you preffer # CAPS switch to russian keymap="ru" # CAPS switch to russian, top keyboard raw as number #keymap="ru.shift" # CTRL+SHIFT switch to russian #keymap="ru.win" #-- font load font8x16="vgarom-8x16"
прим: фонт vgarom используется системой по умолчанию, можно не задавать,
указан как пример задания фонта, когда появится выбор.
верхнее означает что на данный момент можно использовать, как это было и
ранее, три варианта клавиатурного маппинга, любой который Вам удобнее,
раскомментарьте один, который Вам предпочтительней (выше это keymap=»ru»):
— keymap=»ru» — переключение на русский клавишей CAPS Lock
— keymap=»ru.shift» — переключение на русский клавишей CAPS Lock, но верхний
ряд на клавиатуре by default будет цифровой
— keymap=»ru.win» — переключение на русский клавишами CTRL+SHIFT
выбор фонтов пока отсутствует, by default в наличии пока лишь следующие:
gallant.fnt - красивый, но не поддерживает русские vgarom-8x8.fnt - матрица 8x8 с поддержкой русских символов vgarom-8x14.fnt - матрица 8x14 с поддержкой русских символов vgarom-8x16.fnt - матрица 8x16 с поддержкой русских символов vgarom-thin-8x8.fnt vgarom-thin-8x16.fnt
Консольные фонты Terminus, можно скачать:
загрузить вручную, например:
# vidcontrol -f ter-u32.fnt
или положить в /usr/share/vt/fonts/ и настроить /etc/rc.conf, например:
font8x16="ter-u8x16.fnt"
Прим.: фонты 16×32 нужны(удобны) для wide мониторов, для загрузки фонта
ter-u32.fnt (16×32), нужно изменить скрипт /etc/rc.d/syscons или
использовать /etc/rc.local и /etc/rc.conf.local для загрузки 16×32 фонтов.
Тип эмулируемого терминала для UTF-8 консоли: xterm
Начиная с 9.0, для syscons(4) драйвера и очень важно — для vt(4) драйвера,
в /etc/ttys необходимо использовать тип эмулируемого терминала xterm:
# ttyv0 "/usr/libexec/getty Pc" xterm on secure # Virtual terminals ttyv1 "/usr/libexec/getty Pc" xterm on secure ttyv2 "/usr/libexec/getty Pc" xterm on secure ttyv3 "/usr/libexec/getty Pc" xterm on secure ttyv4 "/usr/libexec/getty Pc" xterm on secure ttyv5 "/usr/libexec/getty Pc" xterm on secure ttyv6 "/usr/libexec/getty Pc" xterm on secure ttyv7 "/usr/libexec/getty Pc" xterm on secure
Ранее, syscons(4), для KOI8-R тип эмулируемого терминала cons25r,
для KOI8-U — cons25u. Для CP437 (VGA default) — cons25, US-ASCII — cons25w.
При использовании KMS драйверов:
— i915kms
или
— radeonkms
в /boot/loader.conf добавить:
kern.vt.fb.default_mode="1024x768"
Для использования vt(4) драйвера в text-mode, /boot/loader.conf:
hw.vga.textmode=1
Если ядро собрано с поддержкой обоих драйверов: sc(4) и vt(4),
старый драйвер можно вернуть, задав в /boot/loader.conf:
kern.vty=sc
Пункт 2. Локализация login shells и использование login class.
Описан в FreeBSD HandBook и выполняется как обычно, локализация
login shell’ов и может быть использована совместно с настройкой login
class через описание его в /etc/login.conf
Локализация представляет из себя следующую конструкцию:
LanguageCode_CountryCode.Encoding
где:
LanguageCode_Country Code Description ---------------------------------------------------- en_US English, United States ru_RU Russian, Russia
команда покажет все присутствующие в системе locale:
# locale -a | more
Работа с charater set (charset) для языков, например:
— ISO8859-1, ISO8859-15, KOI8-R, CP1251, CP437 и тд и тп
описана в multibyte(3), а список charsets для языков можно найти
в IANA Registry
FreeBSD использует Xorg-compatible locale encodings.
1) использование login класса
— можно отредактировать /etc/login.conf и изменить настройки класса «russian»
или создать отдельный класс russianu
a) изменяем класс russian /etc/login.conf
russian|Russian Users Accounts:\ :charset=KOI8-R:\ :lang=ru_RU.KOI8-R:\ :tc=default:
на
russian|Russian Users Accounts:\ :charset=UTF-8:\ :lang=ru_RU.UTF-8:\ :tc=default:
или
b) создаем в дополнение к классу «russian», новый класс «russianu»
russianu|Russian Users Accounts UTF-8:\ :charset=UTF-8:\ :lang=ru_RU.UTF-8:\ :tc=default:
По завершению перестраиваем хеш-базу:
# cap_mkdb /etc/login.conf
Все, осталось перевести пользователей которым нужен UTF-8 на новый класс
используя на выбор: passwd(1), pw(8), chpass(1), vipw(8)
2) настройка locale в shell/bash/csh/tcsh
для настройки локализации в шелах, необходимо соответствующим образом
настроить тот или иной shell, см. соответствующий man
Настройка локализации в login shell’ах сводится как минимум к заданию
переменных:
- LANG
- MM_CHARSET
в пользовательских файлах: ~/.login_conf и/или пользовательских стартап
shell файлах: ~/.profile, ~/.bashrc, или ~/.cshrc.
sh/bash:
export LANG=ru_RU.UTF-8 export MM_CHARSET=UTF-8
Важно: в 10’ой ветке присутствует ошибка ввода UTF-8 в Bourne Shell, MFC из 11’ой ветки не было сделано:
Bug 196973 — sh(1) broken UTF-8 input
Примечание: в 11.x-RELEASE указанных выше проблем нет, в 10’ой ветке вместо /bin/sh можно установить bash.
csh/tsch:
setenv LANG ru_RU.UTF-8 setenv MM_CHARSET UTF-8
Или в системных стартап shell файлах: /etc/profile и /etc/csh.login
Прим: для bash необходимо создать в домашней директории файл .inputrc
set convert-meta Off set input-meta On set output-meta On
Перекодировка имен файлов и директорий.
— необходимо установить и использовать утилиту convmv, из пакетов или портов
# pkg install converters/convmv # make -C /usr/ports/converters/convmv install clean # man convmv
пример использования:
# convmv -f koi8-r -t utf-8 * # convmv -f koi8-r -t utf-8 --notest * # convmv -r -f koi8-r -t utf-8 --notest *
Примечание: при использовании утилиты convmv, возможны проблемы
с перекодированием отдельных символов.
Перекодировка содержимого файлов.
Можно воспользоваться утилитами iconv и recode:
— iconv (интегрирована в FreeBSD 10.x)
— /usr/ports/converters/libiconv в более ранних версиях
примеры использования:
— iconv
# man iconv # iconv -c -f koi8-r -t utf-8 inputfile # iconv -c -f koi8-r -t utf-8 inputfile > outputfile # iconv -c -f koi8-r -t utf-8 < inputfile > outputfile
— recode
# make -C /usr/ports/converters/recode install clean # man recode # recode koi8-r..utf-8 inputfile # recode koi8-r..utf-8 < inputfile > outputfile
Примечание: при использовании утилиты iconv, возможны проблемы
с перекодированием отдельных символов, утилита recode, работает
более адекватно.
Удаленный терминальный доступ.
Для удаленного терминального доступа из системы с UTF-8 локализацией
к системам с locale отличной от UTF-8, можно воспользоваться
утилитой luit:
пример использования luit (man luit):
# luit -encoding "KOI8-R" slogin username@host.domain
в качестве encoding использовать charset соответствующие удаленному
locale, в данном примере KOI8-R
Удаленный терминальный доступ из Windows в Unix-like OS с locale UTF-8:
— использование утилиты putty, настройка:
Putty -> Window -> Translation -> Remote character set: UTF-8
Пункт 3. Локализация Xorg
осталась неизменной, так как основная масса DE,WM и X-Apps в настоящее
время ориентирована на работу с UTF-8, больше не нужно использовать
shell-wrapper’ы или переопределять переменную LANG для их запуска.
фонты в Xorg:
— при использовании locale == ru_RU.UTF-8, необходимо использовать
фонты с поддержкой iso10646
— misc содержат fixed фонты iso10646, но by default не прописаны в
fonts.aliases, если есть привычка использования алиасов, придется прописать
их самостоятельно.
Например, как советует Markus Kuhn Unicode fonts and tools for X11.
— фонты misc с iso10646 и остальные фонты с iso10646, необходимо указывать
первыми в xorg.conf
например так:
FontPath "/usr/local/lib/X11/fonts/misc/" FontPath "/usr/local/lib/X11/fonts/100dpi/" FontPath "/usr/local/lib/X11/fonts/75dpi/" FontPath "/usr/local/lib/X11/fonts/terminus-font/" FontPath "/usr/local/lib/X11/fonts/bitstream-vera/" FontPath "/usr/local/lib/X11/fonts/dejavu/" FontPath "/usr/local/lib/X11/fonts/freefont/" FontPath "/usr/local/lib/X11/fonts/unifont/" FontPath "/usr/local/lib/X11/fonts/local/" FontPath "/usr/local/lib/X11/fonts/webfonts/" FontPath "/usr/local/lib/X11/fonts/urw/" FontPath "/usr/local/lib/X11/fonts/cyrillic/" FontPath "/usr/local/lib/X11/fonts/artwiz-ru/" FontPath "/usr/local/lib/X11/fonts/freefont-ttf/" FontPath "/usr/local/lib/X11/fonts/urwfonts-ttf/" FontPath "/usr/local/lib/X11/fonts/TTF/" FontPath "/usr/local/lib/X11/fonts/OTF/" FontPath "/usr/local/lib/X11/fonts/Type1/"
Вы можете установить собственные предпочтения.
посмотреть установленные фонты:
# fc-list # ls -laR /usr/local/etc/fonts/
— посмотреть фонты iso10646
# xlsfonts | grep iso10646 # xlsfonts | grep "-misc-fixed-medium" | grep iso10646 # xlsfonts | grep "-misc-fixed-medium-r-semicondensed" | grep 10646
графические эмуляторы терминала с encoding, примеры с KOI8-R:
— mate-terminal, gnome-terminal:
# sh -c "export LANG=ru_RU.KOI8-R CHARSET=KOI8-R; gnome-terminal --geometry 80x35 --disable-factory" # sh -c "export LANG=ru_RU.KOI8-R CHARSET=KOI8-R; mate-terminal --geometry 80x35 --disable-factory" # sh -c "export LANG=ru_RU.KOI8-R CHARSET=KOI8-R; xfce4-terminal"
переменные среды LANG,CHARSET в соответствии с использованием locale, например
на удаленной стороне, или для локальной работы с файлами в KOI8-R
— xterm с encoding
# xterm -en [koi8-r|cp1251|...]
4. Локализация Applications (приложений).
зависит исключительно от написания applications в соответствии со
стандартом i18n и работой с базами termcap в случае xBSD или terminfo
в случае Linux или SYSV-based для эмулируемого терминала TERM.
Примечание: к сожалению, консольных фонтов пока, очень мало, не говоря уже
о хороших и красивых фонтах.
Некоторые фонты и клавиатурный маппинг от Александра Рыбалко, можно найти:
- https://people.freebsd.org/~ray/newcons/fonts/
- https://people.freebsd.org/~ray/newcons/newcons_kbd/
- https://people.freebsd.org/~emaste/newcons/
Пример конвертации bdf фонта в fnt используя vtfontcvt и его загрузку
используя vidcontrol, см: https://wiki.freebsd.org/Newcons
Минимум позволяющий работать в консоли с UTF-8:
— отображение — /usr/bin/less (использовать в качестве PAGER)
— редактирование — /usr/bin/vi , редактор Vi в 10.1 собран с поддержкой wide-char
— псевдографика в mc выглядит красиво, встроенный редактор поддерживает utf-8
— любимый многими, простой редактор /usr/bin/ee не поддерживает utf-8,
отображает криво, но позволяет набирать текст «вслепую».
— настройку chrasets и работу samba3x, samba4x — не проверял
Все верхнее проверено на реальном железе с FreeBSD 10.1 и в гостевой
FreeBSD 10.1 под VirtualBox, включая Xorg и несколько DE и WM.
Небольшой перечень популлярных редакторов с поддержкой UTF-8
- разновидности Vi: vi, nvi, vim
- простые и популлярные: joe, cooledit, mcedit, nano
- mined
- yudit
- emacs/xemacs
Практика:
— используем syscons(4) для работы в консоли с KOI8-R, CP1251, CP866
— используем vt(4) для работы в консоли только с UTF-8
Вывод: наконец можно постепенно избавиться от разнообразия: CP866,CP1251,KOI8-R
и тд и тп и использовать одну универсальную кодировку UTF-8.
источники:
- FreeBSD Wiki Newcons
- UTF-8 and Unicode FAQ for Unix/Linux
- Unicode fonts and tools for X11
- Working with the graphical environment on FreeBSD
- Graphics with NEW_XORG on FreeBSD
- http://unix1.jinr.ru/~lavr/vt/vtcons.html