Русификация консоли NetBSD 3.0

spinore аватар

Данное руководство является переработанной версией предыдущего для адаптации к NetBSD 3.0.

1. Для реализации фиксированного переключателя между русской и латинской раскладками, понадобится пересобрать ядро с некоторыми изменениями. Скачайте и распакуйте файлы ядра. Затем в файле "/usr/src/sys/dev/wscons/wskbd.c" находим следующие строчки:
case KS_Mode_switch: update_modifier(id, type, 0, MOD_MODESHIFT);
и заменяем 0 на 1. Пересобираем и устанавливаем ядро. Пересборка ядра описана в документации и вопросов, надеюсь, не вызовет.

2. Далее нам нужны консольные шрифты (в комплекте с системой не идут). Следовательно, нужно их загрузить, подойдут шрифты от OpenBSD или от FreeBSD (c некоторыми изменениями). Готовые можно взять здесь fonts.tar.gz.

3. В случае zsh добавляем следующие строчки в ~/.zshrc (или /usr/pkg/etc/zshrc для вступления изменений в силу для всех пользователей):

export LC_CTYPE=ru_RU.KOI8-R
export LANG=ru_RU.KOI8-R
Для других шеллов при надобности также экспортируем соответствующие переменные в их конфигурационных файлах.

4. Создаём файл ~/.inputrc", содержащий следующие строки:

set convert-meta off 
set input-meta on 
set output-meta on

5. Теперь можно сразу до перезагрузки протестить наличие русификации. Для этого нужно

  1. Назначить используемому шрифту имя (сразу передать шрифт как аргумент команде, выставляющей оный на тот или иной терминал не судьба ибо костыли и NetBSD). Назовём шрифт, для примера, mynew: # wsfontload -N mynew /usr/share/wscons/fonts/koi8.816
    (Заметим, что загруженная в память ядра ассоциация данного шрифта с именем "mynew" удалена оттуда может быть только перезагрузкой: "There is no way to remove a loaded font" (C) man wsfontload, ибо NetBSD). Поэтому, если вы будете проделывать эту процедуру ещё один раз, то для назначения этому же или другому шрифту имени выбирайте отличное от "mynew" имя.
  2. Теперь можно активизировать шрифт на соответствующей консоли (например, на ttyE1):
    # wsconsctl  -f /dev/ttyE1 -dw font=mynew
    font -> "mynew"
    #
    Теперь в ttyE1 должна работать русская раскладка, доступная по CapsLock.
Аналогичным образом русский шрифт может быть загружен на любую консоль.

6. Для закрепления сделанных изменений, чтобы те не сбрасывались перезагрузкой, редактируем конфигурационный файл /etc/wscons.conf:

  1. Строка, отвечающая за шрифт должна быть единственной и выглядеть как font koi8 - - - /usr/share/wscons/fonts/koi8.816
    (По завереням некоторых, действие необходимо только в версии NetBSD 3.0)
  2. То же самое касается строки mapfile /usr/share/wscons/keymaps/pckbd.ru.koi8-r
  3. Строка с encoding ru
    должна быть закомменченой, ибо русскую раскладку выкинуть в 3.0 уже успели, а конфигурационный файл поправить - не судьба, ибо NetBSD.
  4. Строка screen 0 - vt100
    должна быть раскомменченой вопреки яростным заверениям некоторых аполгетов, боящихся краха системы (см. примечание ниже).
  5. По заверениям некоторых, в случае русификации (только для NetBSD 3.1) также необходимо добавить строчки:
    wsfontload -N russian /usr/share/wscons/fonts/koi8.816 
    wsconsctl -f /dev/ttyE0 -dw font=russian > /dev/null
    wsconsctl -f /dev/ttyE1 -dw font=russian > /dev/null
    wsconsctl -f /dev/ttyE2 -dw font=russian > /dev/null
    wsconsctl -f /dev/ttyE3 -dw font=russian > /dev/null
    wsconsctl -f /dev/ttyE4 -dw font=russian > /dev/null

    В файл /etc/rc.local Сам не проверял, потому точно сказать не могу.

Примечание:
Позлено для ознакомления предыдущее руководство. Хотелось бы обратить внимание на следующие детали:

  • В NetBSD есть такая фича, что если загружено 2 шрифта в консоли (например, если в одних консолях умолчальный шрифт, а в других - поддерживающий кириллицу), то один из них бьётся (что однозначно не нормально). Возможно, данный эффект наблюдается только тогда, когда у вас ещё и иксы загружены. В конкретно моём случае ядро перекомпилено с увеличенным числом консолей (10), на первых 8-ми из которых запущен getty, а на оставшихся последних двух - xdm. Есть способ замести мусор под ковёр: использовать один-единственный шрифт для всех консолей - он же дефолтный - тогда биться не будет (у меня так). Именно по этой причине я посоветовал раскомментить строчку screen 0 - vt100.
    Также, в силу того, что шрифт теперь один, принудительная активация его в стиле (как было указано в предыдущем руководстве)
    Цитата:
    Для этого нужно просто добавить несколько строк в файл "/etc/rc.local":
    /sbin/wsconsctl -f /dev/ttyE1 -dw font=koi8 >/dev/null 
    /sbin/wsconsctl -f /dev/ttyE2 -dw font=koi8 >/dev/null 
    /sbin/wsconsctl -f /dev/ttyE3 -dw font=koi8
    не понадобится.
  • Вопреки сказанному в предыдущем руководстве, перезагрузка требуется, как и в любой BSD-системе, только при переустановке ядра системы. Активизация отредактированного /etc/wscons.conf происходит, очевидно, стандартным образом: # /etc/rc.d/wscons restart
  • Очень полезно уменьшить время торможения NetBSD во время печати в консоли. Это можно сделать так: Добавить строчки
    setvar  repeat.del1=300
    setvar  repeat.deln=40
    в файл /etc/wscons.conf
  • Мне показалась забавной возможность изменения цвета вывода сообщений ядра (тех, который выводятся уже после загрузки системы). Для изменения цвета с "зелёного по чёрному" на "коричневый по чёрному" нужно прописать одной строчкой wsconsctl -dw msg.kernel.attrs=color msg.kernel.bg=black msg.kernel.fg=brown
    в конце файла /etc/rc.local
  • Проводя русификацию NetBSD, для общего ознакомления, рекомендуется быть в курсе следующей новости.

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".
spinore аватар

Цитата: Даже

Цитата:

Даже оставшись в одиночестве, нулевая консоль не захотела
воспринимать двойную смену шрифта.

Ну что ж, значит не судьба. У меня проблема с тем что шрифт
бьётся наблюдалась на двух совершено разных компах - один
довольно старый, а другой - только с магазина.
Цитата:

В любом случае спасибо

Всегда пожалуйста.

unlk аватар

что ж, по сути,

что ж, по сути, полезная статья. а по мелочам понравилось прилагательное "умолчальный" возьму на вооружение :)

qnub аватар

да. я давно

да. я давно заметил в его статьях это слово. не думаю что оно словарное но очень удобное при переводе. как я запарился с "default" когда переводил хендбук. :)

spinore аватар

qnub писал(ла):да.

qnub писал(ла):
да. я давно заметил в его статьях это слово. не думаю что оно словарное но очень удобное при переводе. как я запарился с "default" когда переводил хендбук. :)

Я даже не задумывался никогда словарное ли это слово... Мне почему-то всегда казалось, что оно словарное, а слово "дефолтный" - сленг. А сейчас думаю, и не могу сообразить, есть такое слово в русском или нет....

untitled аватар

А старая статья

А старая статья чем плоха, работает же.
Даже на netbsd 4.0_beta стабильно.

qnub аватар

а никто не

а никто не говорил, что статья чем-то плоха. spinore плохих статей не пишет :)

spinore аватар

Цитата:А старая

Цитата:
А старая статья чем плоха, работает же.
Даже на netbsd 4.0_beta стабильно.

Если ты прочитаешь старую статью, а потом новую, то увидишь, что во-первых не работает, а во-вторых устраело, и в-треьих есть неточности (нелогичности) в предыдущей стетье и новые факты в этой.
+ К старой стаье есть комментарии: человек поинтересовался, почему у него "не работает". Я объяснил ему как сделать по-новому, чтобы заработало. Свои объяснения, по просьбе qnub'а, я здесь и изложил.

qnub аватар

за что я

за что я безмерно благодарен

untitled аватар

Про неработает

Про неработает это погорячились, у меня по первой статье все работает на 3.1 и на 4.0
Нелогичность исправлена, это хорошо.

bug2bug аватар

Помогите

Помогите пожалуйста. Действовал точно по руководству: пересобрал ядро, поправил конфиги.
Когда делаю

wsconsctl -f /dev/ttyE1 -dw font=koi8,

вся консоль в маленьких точках и ничего не видно.
После перезагрузки стандартный шрифт не меняется, в 0 консоли пишется от

Цитата:
wsconscfg: screen 0 is already configured

до

Цитата:
wsconscfg: screen 5 is already configured

Вот конфиги:

bug2bug% cat /home/bug2bug/.inputrc 
set convert-meta off
set input-meta on
set output-meta on

bug2bug% cat /usr/pkg/etc/zshrc 
export LC_ALL=ru_RU.KOI8-R

bug2bug% cat /etc/wscons.conf 
#       $NetBSD: wscons.conf,v 1.11 2004/07/06 04:02:05 fredb Exp $
#
# workstation console configuration

# fonts to load
#       name    width   height  enc     file
#font   ibm     -       8       ibm     /usr/share/wscons/fonts/vt220l.808

# Note: "pcvt" encoded fonts are only useful with the "*bf" screen types
#  of the "vga" driver. The kernel must be compiled with the option
#  "WSCONS_SUPPORT_PCVTFONTS" turned on. See vga(4).
#font   pcvt    -       -       pcvt    /usr/share/wscons/fonts/vt220h.816
#font   pcvt    -       8       pcvt    /usr/share/wscons/fonts/vt220h.808

font    koi8    -       -       -       /usr/share/wscons/fonts/koi8.816

# screens to create
#       idx     screen  emul
# Screen 0 is already configured as console in most cases.
#  Uncomment if a serial console is used.
#screen 0       -       vt100
screen  1       -       vt100
screen  2       -       vt100
screen  3       -       vt100
screen  4       -       vt100
screen  5       -       vt100

#screen 4       80x25bf vt100
# Note: You must uncomment the 'font    ibm' line above to get a useful
#       font for any 50 line screens.
#screen 5       80x50   vt100

#keyboard       auto

# Select a kernel builtin keyboard map by uncommenting the following line and
# altering the country code to your requirements
# (choose from user, us, uk, de, dk, it, fr, jp, sv, no, es, pt).
# See wsconsctl(8), pckbd(4), ukbd(4) etc. for more details.
#encoding ru

# Redefine individual keys from a file containing "keysym" and/or "keycode"
# entries.
# See wsconsctl(8) for more details.
#mapfile /usr/share/wscons/keymaps/pckbd.sv.svascii

mapfile /usr/share/wscons/keymaps/pckbd.ru.koi8-r

setvar repeat.del1=300
setvar repeat.deln=40

bug2bug% 

spinore аватар

Цитата:вся

Цитата:
вся консоль в маленьких точках и ничего не видно.

Это потому что NetBSD. Если вы правильный шрифт скопировали
себе, то считайте что вы впервые столкнулись с этим. Короче,
баг в DNA у разрабов. У меня тоже когнсоль бьётся в памяти,
приходится поользоваться только иксами. Багрепорт можно не
писать: всё равно им пох на ваши проблемы - привыкайте.
Как совет могу сказать "отключите старт иксов" и эффект
может пропасть (у меня так) - попробуйте. То есть: удалите старт
иксов сразу после перезагрузки, а загрузившись попробуй те руками
установить с помощью команд соответствующий шрифт. - Может быть,
это поможет замести мусор под ковёр. Вы поймите правильно, что
за куски кода овтечащие за wscons и иже с ним не брались со времён...
страшно знает каких... там столько тараканов... Лучше спросите почему
те костыли вообще работают. Я как-то редактировал wscons - проникся,
идиоты... так запудрить скрипт, и при этом всунуть туда части
строк которые не работают никогда - это жесть. Есть строка помощи
по функции которой нет там... гыгыгы. Лучше не заглядывайте.
А если честно снесите нахъ эту х*ю и рассмотрите другие бсд или
линукс. Это значете, хотят дяди понтонуться "бнэтбсд - круто,
- всё остальное сакс, это для хакеров...", а на самом деле
это общество своих которое насилует труп. А в обществе
некрофилов чужие не нужны :-) P.S.: ну вы иксы попробуйте всё же
отключить для начала (ради теста эффекта).

Цитата:
wsconscfg: screen 0 is already configured

В стартовых скриптах дважды вызывается функция добавления
дисплея - консоли. Ищите где это происходит.

Привыкайте пистать версию ос перед тем как репортить о проблемах.
Если у вас 3.1 то возможно стоит раскомментить строку encoding ru
- типа русскую кодировку снова в ядро добавили, и больше обратить
внимание на предыдущее руководство. (Мож ещё кто что подскажет).

bug2bug аватар

spinore писал(ла):А

spinore писал(ла):
А если честно снесите нахъ эту х*ю и рассмотрите другие бсд или
линукс. Это значете, хотят дяди понтонуться "бнэтбсд - круто,
- всё остальное сакс, это для хакеров...", а на самом деле
это общество своих которое насилует труп. А в обществе
некрофилов чужие не нужны :-)

Странная логика. Зачем же советовать сменить систему, если я только что её сменил? Имея честь знать, что есть такое Linux, FreeBSD и QNX, я всё таки постараюсь побороть трудности скорее, чем сдамся. Кстати, нельзя называть систему трупом, если ей пользуется хотя бы сотня человек, у неё есть сообщество. Ведь Minix, Syllable и им подобные ОС никто же так не зовёт.

bug2bug аватар

Да, 3.1. X'ов нет.

Да, 3.1. X'ов нет. Буду разбираться.

Added: По ходу дела я сомневаюсь в этой строчке в ядре:
options WSDISPLAY_DEFAULTSCREENS=8,
комментарий перед ней гласит:
# allocate a number of virtual screens at autoconfiguration time
Закомментировал, пересобрал ядро по-новой.

Резльтаты следующие: теперь сообщения в консоли:

wsconscfg: screen 0 is already configured
wsdisplay0: screen 1 added (80x25, vt100 emulation)
wsdisplay0: screen 2 added (80x25, vt100 emulation)
wsdisplay0: screen 3 added (80x25, vt100 emulation)
wsdisplay0: screen 4 added (80x25, vt100 emulation)
wsdisplay0: screen 5 added (80x25, vt100 emulation)

Но из-за этого screen 0, шрифт опять, по-видимому не применяется ко всем консолям, а по-отдельности, там так и становятся одни точки.
Опции ядра смотрел - возможно это из-за опции зелёного цвета системных сообщений.

spinore аватар

Цитата: Странна

Цитата:

Странная логика. Зачем же советовать сменить систему, если я только что её сменил? Имея
честь знать, что есть такое Linux, FreeBSD и QNX, я всё таки постараюсь побороть трудности
скорее, чем сдамся. Кстати, нельзя называть систему трупом, если ей пользуется хотя бы сотня
человек, у неё есть сообщество. Ведь Minix, Syllable и им подобные ОС никто же так не зовёт.

Миникс развивается. Free отвечает на репорты. Вопрос: что
делает netbsd? Ну что ж, попользуйтесь - всё полезно попробовать.
Мне год назад тоже интересно было, посмотрел, поюзал...
И скорей всего сменю этот стафф на что-то более адекватное.

Цитата:

Added: По ходу дела я сомневаюсь в этой строчке в ядре:
options WSDISPLAY_DEFAULTSCREENS=8,
комментарий перед ней гласит:
# allocate a number of virtual screens at autoconfiguration time
Закомментировал, пересобрал ядро по-новой.

Да, это правильно сделали - у меня тоже закомментировано.

Цитата:

wsconscfg: screen 0 is already configured

Я думаю что эта ошибка толком ни на что не влияет.
вы понимаете чему она соответствует? 0-й скрин кто-то пытается добавить,
а он уже есть (удалить его нельзя, кстати - так сделано специально).
Загрузка шрифта не связана с этой ошибкой никак.
Если скрин уже есть, то вы можете загрузить на него новый
шрифт - в том числе и на нулевой скрин.
Когда у меня бились шрифты я ещё такую схему применял - помогало:
  • удалить все скрины командой # wsconscfg -dF 1
    ...
    # wsconscfg -dF 8
    короче, все которые есть.
  • После этого загружаете на 0й скрин другой шрифт: # wsfontload -N odin
    /usr/share/wscons/fonts/flori.816
    # wsfontload -N dva
    /usr/share/wscons/fonts/koi8.816
    # wsconsctl -f /dev/ttyE0 -dw font=odin
    font -> "odin"
    # wsconsctl -f /dev/ttyE0 -dw font=dva
    font -> "dva"
  • Теперь можете добавлять новые скрины и загружать после этого на них шрифт (учтите что он там появляется не моментально а толкьо после небольшой задержки):
    # wsconscfg 1
    # wsconsctl -f /dev/ttyE1 -dw font=dva
    ....
    # wsconscfg 8
    # wsconsctl -f /dev/ttyE8 -dw font=dva
    и т.п.
Можете использовать модификации этого алгоритма. Таким образом,
идет простые:
1. Пробовать отключать иксы
2. Удалять и снова добавлять нужный скрин а также все кроме нулевого.
3. Менять шрифт времено на другой, а потом снова грузить русский.
4. Разбираться со скриптом /etc/rc.d/wscons
5. Курить маны по вышеиспользовавшимся командам.

P.S.: если вы считает что такие алгоритмы заметания мусор
под ковёр и откровенного шаманства нормальны для уважающей себя ОС
могу только посочувствовать.
P.P.S: есть вещи которые во фре и оупен реализованы куда здравее.
Во фре курсор мыши в консоли как стрелка, колёскико работает,
прокрутка на ура... В netbsd проще забыть про мышь в консоли
(хотя обычно она и не нужна там).

bug2bug аватар

spinore

spinore писал(ла):

Курить

Спасибо, пожалуй откажусь - не курю.

spinore писал(ла):

P.S.: если вы считает что такие алгоритмы заметания мусор
под ковёр и откровенного шаманства нормальны для уважающей себя ОС
могу только посочувствовать.

Спасибо за сочувствие. Даже оставшись в одиночестве, нулевая консоль не захотела воспринимать двойную смену шрифта. Возможно в этом виновата не ОС, а лэптоповский 12.1" монитор, его карточка. Пока остаюсь без русской консоли. В любом случае спасибо - получил неоценимый опыт, заодно поэксперементировав с опциями ядра.

spinore аватар

Цитата: Но из-за

Цитата:

Но из-за этого screen 0, шрифт опять, по-видимому не применяется ко всем консолям, а
по-отдельности, там так и становятся одни точки.

Нет, дело не в этом (если только не рассматривать способ заметания мусорв под ковёр,
когда требуется удалить скрин а потом добавить чтоб netbsd скашала шрифт по-нормальному).

Цитата:

Опции ядра смотрел - возможно это из-за опции зелёного цвета системных сообщений.

Во-первых, зелёный цвет - это дефолт, а во-вторых, это опять же
никак не связано. Вы вообще понимаете, что если у вас, длпустим,
скрипт в xterm пишет ошибку при выполнении, это не связано с тем,
какого цвета шрифт в xterm? Здесь так же.

Scr1pt аватар

Я понимаю, что

Я понимаю, что подобных просьб здесь очень много, но всё-таки. Сабж.

Хочу рассказать свою историю..

Задумал я русифицировать консоль своей NetBSD 3.1. После продолжительных поисков в сети были найдены всего лишь две нормальные статьи, заслуживающие внимания, как это сделать: Русификация консоли NetBSD от А до Я и, собственно, эта статья. Т.к. она является улучшенной и переработанной версией первой, то именно её я и взял как инструкцию для своих действий.

Что я сделал:

1) Скопировал русские терминальные шрифты, находящиеся по адресу http://runetbsd.ru/files/fonts.tar.gz к себе в систему в директорию /usr/share/wscons/fonts:

bash-3.2$ ls -l /usr/share/wscons/fonts | grep koi8
-rw-r-----  1 root  wheel  2048 Oct 31 12:46 koi8.808
-rw-r-----  1 root  wheel  3584 Oct 31 12:46 koi8.814
-rw-r-----  1 root  wheel  4096 Oct 31 12:46 koi8.816

2) Добавил новые переменные окружения LC_CTYPE и LANG. Для этого я поправил файл /etc/profile:

bash-3.2$ cat /etc/profile | grep ru_RU.KOI8-R
export LC_CTYPE=ru_RU.KOI8-R
export LANG=ru_RU.KOI8-R

3) Далее выполнил несколько команд, как здесь описано:

bash-3.2# wsfontload -N russian /usr/share/wscons/fonts/koi8.816 
bash-3.2# wsconsctl -f /dev/ttyE1 -dw font=russian
font -> "russian"

После этих нескольких шагов я уже смог в консоли пользоваться полноценной кириллицей, доступной при нажатии правого или левого Alt. Причём, если при нажатой левой клавише Alt набрать латинские qwerty, то получится ЯВЕРТЫ, а при нажатой правой - йцукен.

Вот, собственно, вопросы к All:

1) Сразу после этой небольшой победы, возник вопрос сохранения конфигурации, дабы кириллица оставалась доступной и после перезагрузки компьютера.

Очень странно, но решить эту проблему так, как описано в инструкции, у меня почему-то не получилось.
А именно, у меня не сохранялась кириллица после перезагрузки после добавления следующих строк в /etc/wscons.conf:

font koi8 - - - /usr/share/wscons/fonts/koi8.816 
mapfile /usr/share/wscons/keymaps/pckbd.ru.koi8-r

Не может ли сказать многоуважаемый All, почему так происходит?

2) Хотелось бы переключать раскладку в консоли с помощью Alt+Shift, ну, или хотя бы, Caps Lock. Настройка переключения раскладки клавиатуры с помощью последнего описана здесь, но по странному стечению обстоятельств ничего не работает. Никакие изменения исходных текстов системы с последующей перекомпиляцией не помогают. А может я делаю что-то не так?

Если нужна какая-то дополнительная информация - спрашивайте, с удовольствием предоставлю.

syn аватар

Scr1pt, попробуй

Scr1pt, попробуй добавить экспорт в .profile или .cshrc, только перед этим указав в них шел #!//usr/pkg/bin/bash или что там у тебя...

Scr1pt аватар

В переменных

В переменных окружения всё в порядке:

bash-3.2$ set | grep LANG
LANG=ru_RU.KOI8-R
bash-3.2$ set | grep LC_CTYPE
LC_CTYPE=ru_RU.KOI8-R

Да и вообще, похоже я нашёл решение своей проблемы.

После очередной попытки перекомпиляции ядра с изменениями в исходных текстах системы, дабы раскладка в консоли могла переключаться по Caps Lock, я раскоментировал в /etc/wscons.conf строки (которые, к несчатью, раньше были закоментированы - похоже, что это и было моей ошибкой):

font koi8 - - - /usr/share/wscons/fonts/koi8.816 
mapfile /usr/share/wscons/keymaps/pckbd.ru.koi8-r

И смог получить переключение раскладки клавиатуры в консоли по клавише Caps Lock!

Но! Вышеперечисленные строки в файле /etc/wscons.conf ни коим разом не сохраняют кириллицу в консоли после перезагрузки, как описано в руководстве выше!

Я решил эту проблему добавлением в /etc/rc.local следующего:

wsfontload -N russian /usr/share/wscons/fonts/koi8.816 
wsconsctl -f /dev/ttyE1 -dw font=russian > /dev/null

И я считаю, что это необходимо обязательно добавить в руководство. Если кто поддержит - могу добавить.

Scr1pt аватар

Вот ещё что.

Вот ещё что. Пишу вдогонку.

Попробовал закомментировать следующую строку в /etc/wscons.conf:

font koi8 - - - /usr/share/wscons/fonts/koi8.816

Ничего не изменилось.. Имхается, что она лишняя и может быть закомментирована..