Коротко о новом драйвере консоли FreeBSD - VT (aka newcons).
utf-8
vt
newcons
руссификация
keymap
Коротко о новом драйвере консоли FreeBSD - VT (aka newcons).
Долгое время в OS FreeBSD использовался драйвер консоли "syscons".
Лучшее описание этого драйвера сделал Иван Паскаль:
http://pascal.tsu.ru/
после прочтения которого, у администраторов OS FreeBSD не возникает
вопорсов по настройке locale и руссификации FreeBSD.
Однако во FreeBSD начиная с релиза 10.1, появился новый драйвер
консоли - vt (aka newcons).
Про данный драйвер, разработанный в FreeBSD Current (11) и перенесенный
в 10.1-RELEASE можно прочитать на FreeBSD Wiki:
Драйвер может работать как в текстовом, так и в графическом режиме VGA,
благодаря последнему и реализована поддержка UTF-8 в консоли.
Реализована интеграция с KMS видео драйверами для переключения между
Xorg и виртуальными терминалами.
Более подробную информацию по драйверу можно получить vt4.
А информацию по настройке локализации в FreeBSD HandBook:
Основные моменты локализации FreeBSD как и любой Unix\-like OS:
-
Локализация консоли;
-
Локализация login shells и использование login class;
-
Локализация Xorg;
-
Локализация Applications приложений.
Пункт 1. - Локализация консоли
необходим только в случае работы за локальной консолью.
Данный пункт локализации не требуется и не влияет на работу удаленных
text-mode эмуляторов терминалов, таких как putty или openssh.
Итак, начиная с релиза FreeBSD 10.1 в системе для Russian UTF-8, в консольном
драйвере vt4 имеются:
- клавиатурные мапперы/переключатели:
# 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 - красивый но не поддерживает кириллические
символы.
Консольный драйвер vt4 by default использует для работы режим VGA
с разрешением 640x480x16 vt\_vga.
Для использования UTF-8, необходимо произвести следующие действия:
- добавить в /boot/loader.conf строку:
означает использование консольного драйвера vt вместо sysconsЕсли потребуется собрать собственное ядро, только с новым драйвером
консоли, необходимо в ядро добавить:
#-- закомментарить vga, sc и оставить только vt
#device vga # VGA video card driver
#device sc
device vt
device vt_vga
ps. ядро GENERIC 10.1 уже собрано с поддержкой vt4, man 4 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, но верхний
ряд на клавиатуре 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, можно скачать:
загрузить вручную, например:
или положить в /usr/share/vt/fonts/ и настроить /etc/rc.conf, например:``` font8x16=”ter-u8x16.fnt”
Прим.: фонты 16x32 нужны\(удобны\) для wide мониторов, для загрузки фонта
ter\-u32.fnt \(16x32\), нужно изменить скрипт /etc/rc.d/syscons или
использовать /etc/rc.local и /etc/rc.conf.local для загрузки 16x32 фонтов.
Тип эмулируемого терминала для 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 добавить:
Если ядро собрано с поддержкой обоих драйверов: sc4 и vt4,
старый драйвер можно вернуть, задав в /boot/loader.conf:
Пункт 2. Локализация login shells и использование login class.
Описан в FreeBSD HandBook и выполняется как обычно, локализация
login shell’ов и может быть использована совместно с настройкой login
class через описание его в /etc/login.conf
Локализация представляет из себя следующую конструкцию:
где:``` LanguageCode_Country Code Description
en_US English, United States ru_RU Russian, Russia
Работа с charater set charset для языков, например:
- ISO8859-1, ISO8859-15, KOI8-R, CP1251, CP437 и тд и тп
описана в multibyte3, а список charsets для языков можно найти
FreeBSD использует Xorg-compatible locale encodings.
1) использование login класса
- можно отредактировать /etc/login.conf и изменить настройки класса “russian”
или создать отдельный класс russianu
a) изменяем класс russian /etc/login.conf
на``` russian|Russian Users Accounts:\ :charset=UTF-8:\ :lang=ru_RU.UTF-8:\ :tc=default:
russianu|Russian Users Accounts UTF-8:\ :charset=UTF-8:\ :lang=ru_RU.UTF-8:\ :tc=default:Все, осталось перевести пользователей которым нужен UTF-8 на новый класс
используя на выбор: passwd1, pw8, chpass1, vipw8
2) настройка locale в shell/bash/csh/tcsh
для настройки локализации в шелах, необходимо соответствующим образом
настроить тот или иной shell, см. соответствующий man
Настройка локализации в login shell’ах сводится как минимум к заданию
переменных:
- LANG
- MM_CHARSET
в пользовательских файлах: ~/.login_conf и/или пользовательских стартап
shell файлах: ~/.profile, ~/.bashrc, или ~/.cshrc.sh/bash:
csh/tsch:``` setenv LANG ru_RU.UTF-8 setenv MM_CHARSET UTF-8
Или в системных стартап shell файлах: /etc/profile и /etc/csh.loginПрим: для bash необходимо создать в домашней директории файл .inputrc
Перекодировка имен файлов и директорий.
\- необходимо установить и использовать утилиту 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:
в качестве encoding использовать charset соответствующие удаленному
locale, в данном примере KOI8-RУдаленный терминальный доступ из Windows в Unix-like OS с locale UTF-8:
- использование утилиты putty, настройка:
Пункт 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/"
Вы можете установить собственные предпочтения.посмотреть установленные фонты:
- посмотреть фонты iso10646```
xlsfonts | grep iso10646
xlsfonts | grep “-misc-fixed-medium” | grep iso10646
xlsfonts | grep “-misc-fixed-medium-r-semicondensed” | grep 10646
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|…]
```
- Локализация 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.
Практика:
- используем syscons4 для работы в консоли с KOI8-R, CP1251, CP866
- используем vt4 для работы в консоли только с UTF-8
Вывод: наконец можно постепенно избавиться от разнообразия: CP866,CP1251,KOI8-R
и тд и тп и использовать одну универсальную кодировку UTF-8.
источники: