dadv: (Default)

ВНЕЗАПНО выяснилось, что локализованные текстовые сообщения в /usr/share/nls/ru_RU.KOI8-R/tcsh.cat на FreeBSD хранятся в UTF-8, а вовсе не в KOI8-R. И на свежепоставленной системе пользователь с login class russian и локалью ru_RU.KOI8-R, которую выставляет этот login class, видит тем не менее сообщения об ошибках от tcsh в виде "сырой" бинарщины в UTF-8. Почему? Потому что на свежепоставленной системе нету libiconv.so.

Достаточно поставить из портов libiconv, чтобы tcsh заговорил по-русски в кодировке KOI8-R:

# kdump | grep NAMI | grep iconv
 22658 tcsh     NAMI  "/lib/libiconv.so"
 22658 tcsh     NAMI  "/usr/lib/libiconv.so"
 22658 tcsh     NAMI  "/usr/lib/compat/libiconv.so"
 22658 tcsh     NAMI  "/usr/local/lib/libiconv.so"
 22658 tcsh     NAMI  "/usr/local/lib/libiconv.so"
#

Из всех этих файлов существует только последний, портовый.

Update: оказалось, что так стало после импорта в систему tcsh-6.18.01, то есть начиная с FreeBSD 8.3-RELEASE и 9.0-RELEASE. А в 8.2 в /usr/share/nls/ru_RU.KOI8-R/tcsh.cat всё ещё KOI8-R.

dadv: (chuck)

FreeBSD 8.x и версии новее поддерживают UTF-8 в консоли. Полная отрисовка юникодных шрифтов выполняется в графическом режиме, разумеется (framebuffer).

  • Сам по себе графический режим консоли штатно доступен с версии 3.0 и появился в системе 13 лет назад. Для его поддержки в 8.x нужно в конфигурацию ядра добавить опции:
    options SC_PIXEL_MODE
    options VESA

    Чтобы сделать графический режим консоли дефолтным, нужно в /boot/device.hints к стандартным флагам драйвера syscons 0x100 добавить значение 0x80:

    hint.sc.0.flags="0x180"

  • Для режима UTF-8 тип терминала в консоли меняется с cons25 на xterm (начиная с 9.0 по умолчанию xterm и нужна только вторая опция из двух):
    options         TEKEN_XTERM             # xterm-style terminal emulation
    options         TEKEN_UTF8              # UTF-8 output handling

    Так как теперь консоль будет xterm, в /etc/ttys надо заменить cons25 (или cons25r) на xterm.

  • Установить из портов sysutils/jfbterm, который и будет заниматься отрисовкой шрифтов в графическом режиме консоли.
  • Переменную LANG вместо ru_RU.KOI8-R нужно сделать равной ru_RU.UTF-8 средствами login class или выставив её после перезагрузки и логина в консоли вручную. После логина и проверки, что LANG=ru_RU.UTF-8, запускаем jfbterm. Он у меня перевел экран из дефолтного режима 800x600x32 в режим 1024x768x16 (для проверки режимов есть команды vidcontrol -i adapter </dev/ttyv0 и vidcontrol -i mode </dev/ttyv0). Теперь UTF-8 в консоли отрисовывается юникодными шрифтами.

Без jfbterm отрисовки шрифтов не будет и вместо кириллицы выдаются знаки вопроса.

Update. Вынес из комментария:

в файл /boot/device.hints добавить hint.sc.0.vesa_mode="0x1F0" - нужный нам режим "vidcontrol -i mode </dev/ttyv0" Что бы консоль грузилась сразу в нужном нам разрешении.

Profile

dadv: (Default)
Choose your future

June 2017

M T W T F S S
   1234
56 7891011
12131415161718
19202122232425
2627282930  

Syndicate

RSS Atom

Tags

Style Credit

Powered by Dreamwidth Studios