Коротко о новом драйвере консоли 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:

  1. Локализация консоли; 

  2. Локализация login shells и использование login class; 

  3. Локализация Xorg; 

  4. Локализация 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 строку:

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 уже собрано с поддержкой 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, можно скачать:

загрузить вручную, например:

# vidcontrol -f ter-u32.fnt

или положить в /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 добавить:
kern.vt.fb.default_mode=”1024x768”
Для использования vt\(4\) драйвера в text\-mode, /boot/loader.conf:```
hw.vga.textmode=1

Если ядро собрано с поддержкой обоих драйверов: sc4 и vt4

старый драйвер можно вернуть, задав в /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 и тд и тп 

описана в multibyte3, а список 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 на новый класс 

используя на выбор: 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:

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 содержат 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|…]

```

  1. Локализация Applications приложений

зависит исключительно от написания applications в соответствии со 

стандартом i18n и работой с базами termcap в случае xBSD или terminfo 

в случае Linux или SYSV-based для эмулируемого терминала TERM.

Примечание: к сожалению, консольных фонтов пока, очень мало, не говоря уже 

о хороших и красивых фонтах. 

Некоторые фонты и клавиатурный маппинг от Александра Рыбалко, можно найти:

Пример конвертации 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.

источники:

http://unix1.jinr.ru/~lavr/vt/vtcons.html