FreeBSD: UTF-8 в консоли и терминале
Локализация - I18N/L10N использование и настройка
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) по умолчанию использует для работы режим VGA разрешением 640×480×16 (vt_vga).
Для использования UTF-8, необходимо произвести следующие действия:
- добавить в /boot/loader.conf
строку:
kern.vty=vt
означает использование консольного драйвера vt вместо syscons
Согласно информации на https://wiki.freebsd.org/Newcons VT не поддерживает экранные заставки и выключение монитора в частности.
Поэтому все вопросы, касающиеся этой темы, можно считать решенными. Ответ на вопрос, как сделать включение заставки в VT, ответ – НИКАК
Если потребуется собрать собственное ядро, только с новым драйвером консоли, необходимо в ядро добавить:
#-- закомментарить *vga*, *sc* и оставить только *vt*
#device vga # VGA video card driver
#device sc
device vt
device vt_vga
ps. ядро GENERIC 10.1 уже собрано с поддержкой vt (4) (man vt
).
- добавить в /etc/rc.conf
#-- Russians keymap, uncomment that you preffer
# CAPS switch to russian
keymap="ru"
# SHIFT 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, но верхний ряд на клавиатуре по умолчанию будет цифровой
- keymap="ru.win"
– переключение на русский клавишами CTRL+SHIFT
выбор фонтов пока отсутствует, по умолчанию в наличии пока лишь следующие:
gallant.fnt – красивый, но не поддерживает русский
vgarom-8×8.fnt – матрица 8×8 с поддержкой русских символов
vgarom-8×14.fnt – матрица 8×14 с поддержкой русских символов
vgarom-8×16.fnt – матрица 8×16 с поддержкой русских символов
vgarom-thin-8×8.fnt
vgarom-thin-8×16.fnt
Консольные фонты Terminus, можно скачать:
фонт 8×16: ter-u16.fnt
чуть другой фонт 8×16: ter-u8x16.fnt
фонт 16×32: ter-u32.fnt
загрузить вручную, например:
# vidcontrol -f ter-u32.fnt
или положить в /usr/share/vt/fonts/
и настроить /etc/rc.conf
, например:
font8x16="ter-u8x16.fnt"
Шрифты 16×32 нужны(удобны) для широкоформатных мониторов, для загрузки фонта 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)
Пример:
# pw user mod alex -L russianu
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
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 содержат исправленные фонты iso10646, но по умолчанию не прописаны в 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 (приложений).
Зависит исключительно от написания приложения в соответствии со стандартом 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.
Практика:
- используем syscons (4) для работы в консоли с KOI8-R, CP1251, CP866
- используем vt (4) для работы в консоли только с UTF-8
Вывод: наконец можно постепенно избавиться от разнообразия: CP866,CP1251,KOI8-R и тд и тп и использовать одну универсальную кодировку UTF-8.
источник: http://unix1.jinr.ru/~lavr/vt/vtcons.html
Оцените статью или поделитесь ей в соцсетях:
Рекомендуемые статьи:
Комментарии