воскресенье, 30 января 2011 г.

UTF8 FreeBSD в консоли

Почему utf8:
- это удобно
- это кроссплатформенно (я, например, работаю на многих разных системах: freebsd, linux, windows и хочу везде иметь возможность беспроблемного доступа к своим файлам)
- utf8 это родная кодировка во многих системах (linux), а также в файловых системах.
- в базах данных давно самая беспроблемная кодировка - utf8 (особенно когда есть необходимость работы с несколькими языками)
- я думаю рано или поздно во freebsd все равно будет utf8 по умолчанию.

Изменения не затрагивают системную консоль!

1. Для поддержки FreeBSD UTF8, компилим ядро с такими опциями (Если   UTF-8  будет использоваться только в putty, то вторую опцию можно опустить):

options TEKEN_UTF8
options TEKEN_XTERM
2. Редактируем /etc/ttys   (Если   UTF-8  будет использоваться только в putty, то данный пункт можно также опустить): 
Там меняем cons25 на xterm.
Т.е. было так:

ttyv1 "/usr/libexec/getty Pc" cons25 on secure
ttyv2 "/usr/libexec/getty Pc" cons25 on secure
ttyv3 "/usr/libexec/getty Pc" cons25 on secure
ttyv4 "/usr/libexec/getty Pc" cons25 on secure
Стало так:

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
3 .Не забываем прописать переменные окружения.
В /etc/login.conf добавляем:

russian-utf8|Russian Users Accounts UTF-8:\
             :charset=UTF-8:\
             :lang=ru_RU.UTF-8:\
             :lc_all=ru_RU.UTF-8:\
             :tc=default:
Перестраиваем БД:

cap_mkdb /etc/login.conf
Прикрепляем пользователя:

pw usermod логин -L russian-utf8

Собственно, этого достаточно - вот так все просто ;)
Альтернативно, либо дополнительно к вышеприведенному способу, можно прописать переменные в используемом шеле:
/etc/csh.cshrc:

setenv LANG ru_RU.UTF-8
setenv LC_CTYPE ru_RU.UTF-8
setenv LC_COLLATE POSIX
setenv LC_ALL ru_RU.UTF-8

Добавляем в /etc/profile (опционально, для тех кто любит баш.):

LANG="ru_RU.UTF-8"; export LANG
LC_CTYPE="ru_RU.UTF-8"; export LC_CTYPE
LC_COLLATE="POSIX"; export LC_COLLATE
LC_ALL="ru_RU.UTF-8"; export LC_ALL
/root/.cshrc: (руту русификации не положены)

setenv LANG C
setenv LC_CTYPE C
setenv LC_COLLATE POSIX
setenv LC_ALL C
Другой способ - прописать переменные окружения:


Перезагружаем машину и любуемся великим и могучим в консоли.
P.S Для настройки PuTTy в менюшке Translation выбираем UTF-8

Можно просмотреть теущие локали:

# locale
LANG=ru_RU.UTF-8
LC_CTYPE="ru_RU.UTF-8"
LC_COLLATE="ru_RU.UTF-8"
LC_TIME="ru_RU.UTF-8"
LC_NUMERIC="ru_RU.UTF-8"
LC_MONETARY="ru_RU.UTF-8"
LC_MESSAGES="ru_RU.UTF-8"
LC_ALL=ru_RU.UTF-8

Дополнение:
Большинстов пользуются программой mc.
При такой установке, псевдограффика отображается неправильно.
Можно запускать программу mc с ключем -a, тогда проблема решается.
Набирать постоянно -a, после mc мне лень, поэтому нашел вот такой способ:

# mv /usr/local/bin/mc /usr/local/bin/mc_ 
# touch /usr/local/bin/mc
# chmod 555 /usr/local/bin/mc
После чего вставляю в файл /usr/local/bin/mc следующее:

#!/bin/sh
/usr/local/bin/mc_ -a $1

Обновлено 31.07.2011
Ссылки:
Поддержка UTF8 в консоли FreeBSD
Руссификация FreeBSD (UTF-8)
Делаем светлую консоль в FreeBSD в связке: MC + Putty (UTF-8)

5 комментариев:

  1. 1. Для работы в PuTTy по-моему всего этого не нужно. Достаточно выставить переменные окружения.

    2. Разве кто-то еще работает в чистой консоли? Хоть какие-то иксы ведь нужны, как минимум чтобы было удобнее работать с несколькими консолями.

    3. Таки кириллицу все-таки сделали? Если да, то где настройка переключения раскладки?

    ОтветитьУдалить
  2. 1. В данном случае терминал заменяется на xterm, который более нормально поддерживает UTF-8
    2. Да, в чистой консоли работают почти все сервера и было бы неплохо, без дополнительных манипуляций, понимать русские коментарии в консоли.
    3. Не совсем. Непосредственно в консоли нормально пользоваться UTF-8 до сих пор нельзя. Соответственно и переключение раскладок пока нет :(

    ОтветитьУдалить
  3. не получается, вижу только ????
    перепробовал уже всё, что выдал гугл - не помогает
    как забороть?

    ОтветитьУдалить
  4. Версия ОС?
    Пробуете работать напрямую из консоли или удалённо ?
    Данный вариант нормально работает при удалённом конекте к серверу например по ssh.
    Как я написал выше "Непосредственно в консоли нормально пользоваться UTF-8 до сих пор нельзя."
    Если же проблема возникает при удаленной работе на сервере, то рекомендую перепроверить, все ли сделано, как описано выше.

    ОтветитьУдалить