Помогите, пожалуйста, русифицировать консоль NetBSD..

Scr1pt аватар

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

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

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

Что я сделал:

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) Далее выполнил несколько команд, как и описано в Русификация консоли NetBSD 3.0:

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. Настройка переключения раскладки клавиатуры с помощью последнего описана в инструкции
Русификация консоли NetBSD 3.0, но по странному стечению обстоятельств ничего не работает. Никакие изменения исходных текстов системы с последующей перекомпиляцией не помогают. А может я делаю что-то не так?

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

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

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

Эх, а у меня так

Эх, а у меня так и не получилось её русифицировать, ибо шрифты "бились". :(

Scr1pt аватар

Но люди ведь

Но люди ведь как-то это делают? :)

spinore аватар

Вы

Вы перекомпилировали ядро с учётом правки некоторых строк как написано в инструкции?
Это во-первых.

<[ибо шрифты "бились". :(]> В консоли? У меня тоже бьются. Под иксами нормально. Это баг. Баг ДНК разрабов NetBSD-team. Стоит отметить, что он сидит в коде которому хуева туча лет и исправлять они его не собираются (в общем-то они вообще на багрепорты не овтечают, так что можно и не писать). Короче, non e` colpa sua.

Цитата:

# 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.

это отрывок из /etc/wscons.conf

Согласно этому файлу, /etc/wscons.conf сиречь, кодировка ru есть в ядре, а, значит копировтаь mapfile не надо. Реально же в ветках до 3.0 эта кодировка была, но в 3.0 её выкинули из ядра, но в конфигах оставили (!). (Да, это не косяк с точки зрения NetBSD-team, это толкьо в OpenBSD ошибка или неточность даже в доке считается официальным багом). Из-за того что она в конфигах есть, а реально её нет, требовалось выполнить ряд шагов в 3.0, которых не нужно было выполнять ранее.... Это ещё не всё. Насколько я слышал, в 3.1 раскладку ru опять добавили в ядро... Отсюда делается вывод, что вполне вероятно тупое следование шагам в 3.0 может ничего не дать и это будет неудеивительно. Пока никто ещё не написал руководство под 3.1 и не заявил что он это проделал и у него работает.

Ещё раз оговариваюсь, что алгоритм в статье "Русификация консоли NetBSD 3.0" псиал не я, а чел который мог собрать из известных кусочков правильный алгоритм русификации... У меня на это банально недостаточно опыта, я не настолько глубоко знаю UNIX. Я опсиал лишь те шаги которые мне сказали выполнить и всё.

В идеале нужно написать Кристосу Зулосу (все знают его?) и сказать что "Бля, а не желает ли Его Величество написать русификацию ибо оборзели давно уже". Писать доку к своим же програмам - удел разрабов а не пользователей, коих вышеназванное мудачьё отправляет "читать сорс до просвещения". В частности, таковой подход, отношение разрабов к ользователям приводит к тому что многие не хотят даже браться за изучение UNIX.

Я сам сижу на 3.0 пока и помочь ничем не могу при всём желании :(
Неочевидно что буду себе ставить 3.1. Возможно, просто свалю на OpenBSD и всё.

AlexA аватар

............. >Возможн

.............
>Возможно, просто свалю на OpenBSD и всё.
Там тоже не все так пушисто и тепло(. После руссификации на МС смотреть без слез нельзя! Ломается цветовая схеиа. ... уж лучше без рашин но с нормальным МС. А вот в стрекозе ... такое ощущение, будто писали ее в ... Москве! Рашин лучше, чем инглиш! ). Шрифт в консоли как в Х-ах! )

Scr1pt аватар

spinore

spinore писал(ла):
Вы перекомпилировали ядро с учётом правки некоторых строк как написано в инструкции?

Да, конечно.

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

После очередной попытки перекомпиляции ядра с изменениями в исходных текстах системы, дабы раскладка в консоли могла переключаться по 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

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

Вот ещё что.

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

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

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

spinore писал(ла):
Пока никто ещё не написал руководство под 3.1 и не заявил что он это проделал и у него работает.

Похоже, что я всё-таки могу точно сказать, что описанное в руководстве Русификация консоли NetBSD 3.0 всё-таки работает под NetBSD 3.1. Правда, без танца с бубном вокруг компьютера как всегда не обошлось.

unlk аватар

Кроме того,

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

spinore аватар

Цитата:Я решил

Цитата:
Я решил эту проблему добавлением в /etc/rc.local следующего:
wsfontload -N russian /usr/share/wscons/fonts/koi8.816
wsconsctl -f /dev/ttyE1 -dw font=russian > /dev/null

Кажется, я где-то писал эти строки...
разве их нет в полной доке?
Цитата:
Попробовал закомментировать следующую строку в /etc/wscons.conf:
font koi8 - - - /usr/share/wscons/fonts/koi8.816
Ничего не изменилось.. Имхается, что она лишняя и может быть закомментирована..

Понимаете в чём дело, это всё логично как раз.
Вышенаписанныя команда wsfontload присваивает шрифту метку-имя,
а wsconsctl ставит шрифт по его метке на указнную в опциях консоль.
Вы можете руками повыполнять эти команды и убедиться...
Добавление этих команд в /etc/rc.local означает что они будут выполняться каждый раз после перезагрузки системы (но их можно было бы выполнять и руками :)). Я не помню как должно быть точно, но у меня rc.local пустой.
Вся эта бодяга происходит следующим образом:
Есть скрипт /etc/rc.d/wscons - он и выполняется при инициализации консоли. теоретически вы могли бы его изучить и добавить ваши строки в него сразу, но через rc.local это более правильно чем лезть в системный страртап.
В частности, читая /etc/rc.d/wscons вы можете увидеть как он парсит конфиг /etc/wscons.conf, читает из него опции, и выполняет те самые команды что вы написали в rc.local !!! Я не могу не отметить крайний идиотизм авторов этого запутанного скрипта, который вместо 10 строчек занимает пару разворотов экрана из-за стремления авторов к слишком абстрактному интерфейсу... который там нихрена не нужен в принципе...
Я разбирался с тем скриптом как раз потому что хотел его доработать с тем условием, чтобы он парсил модфиицированный для установления новых опций конфиг
wscons.conf, где я бы прописывал на какую консоль какой шрифт ставить (а не на все один как по умолчанию). (да, есть такой красивый шрифт flori но там нет русских... = хотел его кое-где поставить на консоли)...
ну что, в итоге из-за косяка с тем что шрифт в консоли бьётся (слава ослам из NetBSD-team!) реализованная возможность оказалась невостребованной :( ибо при такой конфигурации запуска шрифты бились вообще всегда и мусор под ковёр замести не получилось :(
Цитата:
Похоже, что я всё-таки могу точно сказать, что описанное в руководстве Русификация консоли NetBSD 3.0 всё-таки работает под NetBSD 3.1.

Кстати, это вполне логично: 3.1 есть практически чисто баг-фикс-релиз..., то есть концептуальных отличий нет. Я, вот использую для 3.0 пакеты от 3.1 и пока никаикх косяков с этим связанных, не было.

Scr1pt аватар

spinore

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

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

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

Кажется, я где-то писал эти строки...
разве их нет в полной доке?

Нет. В ней не сказано, что для сохранения шрифтов в консоли необходимо вышеприведённые строки добавить в /etc/rc.local. А строка

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

В файле /etc/wscons.conf сама по себе только заменяет команду

wsfontload -N russian /usr/share/wscons/fonts/koi8.816

Которая добавляет определённый шрифт. Но для сохранения шрифта после перезагрузки ещё необходимо добавить этот свежедобавленный шрифт на определённую виртуальную консоль! Т.е. сделать:

wsconsctl -f /dev/ttyE1 -dw font=russian

Я просто хочу донести до Вас, что описанное в статье:

Цитата:
6. Для закрепления сделанных изменений, чтобы те не сбрасывались перезагрузкой, редактируем конфигурационный файл /etc/wscons.conf:
  1. Строка, отвечающая за шрифт должна быть единственной и выглядеть как font koi8 - - - /usr/share/wscons/fonts/koi8.816
  2. То же самое касается строки mapfile /usr/share/wscons/keymaps/pckbd.ru.koi8-r
  3. Строка с encoding ru
    должна быть закомменченой, ибо русскую раскладку выкинуть в 3.0 уже успели, а конфигурационный файл поправить - не судьба, ибо NetBSD.
  4. Строка screen 0 - vt100
    должна быть раскомменченой вопреки яростным заверениям некоторых аполгетов, боящихся краха системы (см. примечание ниже).

Не работает.

А для действительного сохранения определённого шрифта в консоли после перезагрузки необходима правка start-up скриптов, то /etc/rc.local или /etc/rc.d/wscons, а файла /etc/wscons.conf здесь явно не достаточно.

spinore аватар

Цитата:Не

Цитата:
Не работает.

А для действительного сохранения определённого шрифта в консоли после перезагрузки необходима правка start-up скриптов, то /etc/rc.local или /etc/rc.d/wscons, а файла /etc/wscons.conf здесь явно не достаточно.


Возможно, это всё проблемы в 3.1...
Поидее действие wsconsctl должен делать скрипт /etc/rc.d/wscons, правда.. делает ли онего на самом деле сказать не могу :) нужно долго рыться вэтом дерьме. Можете сами поискать все команды содержащие $wsctl и попытаться раскрутить через запутанные переименования какая реально команда wsconsctl выполняется...
Я за приемлемое время сходу сказать не могу, силь уж запутанный скрипт. На вашем месте я бы добавил те строки в rc.local и забыл...

P.S.: попытаюсь отредактировтаь вики.

spinore аватар

Scr1pt, я поправил

Scr1pt, я поправил руководство.
Ещё замечания по существу есть к нему?

Scr1pt аватар

spinore

spinore писал(ла):
Scr1pt писал(ла):
Не работает.

А для действительного сохранения определённого шрифта в консоли после перезагрузки необходима правка start-up скриптов, то /etc/rc.local или /etc/rc.d/wscons, а файла /etc/wscons.conf здесь явно не достаточно.

Возможно, это всё проблемы в 3.1...
Поидее действие wsconsctl должен делать скрипт /etc/rc.d/wscons, правда.. делает ли онего на самом деле сказать не могу :)

Т.е. сам скрипт /etc/rc.d/wscons, увидев в своём конфигурационном файле что-то вроде такого:

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

Должен не только вызвать wsfontload, добавив определённый шрифт и обозвав его, но ещё и wsconsctl, "поставив" этот шрифт на все виртуальные консоли?

Не знаю, как у Вас в NetBSD 3.0, но у меня в NetBSD 3.1 такого не происходит.

spinore писал(ла):
Я за приемлемое время сходу сказать не могу, силь уж запутанный скрипт. На вашем месте я бы добавил те строки в rc.local и забыл...

Эээ.. Так не пойдёт! :) Просто хочется докопаться до истины. И создать нормальное руководство, следуя пунктам которого можно будет прийти к желаемому результату, а не думать - какие ещё ненужные строки необходимо добавить в конфигурационные файлы.

spinore писал(ла):
Scr1pt, я поправил руководство.

Спасибо.

spinore писал(ла):
Ещё замечания по существу есть к нему?

Я Вас уже замучал, но всё же:

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

редактируем конфигурационный файл /etc/wscons.conf:

  1. Строка, отвечающая за шрифт должна быть единственной и выглядеть как font koi8 - - - /usr/share/wscons/fonts/koi8.816
  2. То же самое касается строки mapfile /usr/share/wscons/keymaps/pckbd.ru.koi8-r
  3. Строка с encoding ru
    должна быть закомменченой, ибо русскую раскладку выкинуть в 3.0 уже успели, а конфигурационный файл поправить -

    не судьба, ибо NetBSD.

  4. Строка screen 0 - vt100
    должна быть раскомменченой вопреки яростным заверениям некоторых аполгетов, боящихся краха системы (см.

    примечание ниже).

  5. По заверениям некоторых, также необходимо добавить строчки:
    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 3.1, будем так говорить, если есть пункт E, то пункт A не нужен. И его можно удалить из этого списка.

Да и вообще, лучше сделать так, раз пошли такие проблемы. В пункте A указать, что он необходим для NetBSD 3.0, но, в свою очередь, не нужен для NetBSD 3.1. А в пункте E наоборот.

spinore аватар

Цитата:Т.е. сам

Цитата:
Т.е. сам скрипт /etc/rc.d/wscons, увидев в своём конфигурационном файле что-то вроде такого:
font koi8 - - - /usr/share/wscons/fonts/koi8.816

Должен не только вызвать wsfontload, добавив определённый шрифт и обозвав его, но ещё и wsconsctl, "поставив" этот шрифт на все виртуальные консоли?


Не совсем, за то на какие консоли ставить шрифт отвечают строчки типа
screen 1 - vt100
Последние парсятся м подаются как аргументы на wsconctl, а первые - на wsfontload.
Цитата:
Просто хочется докопаться до истины.

Это истина?! Если хотеть истины то удаляйте нахер всё что есть в /etc/rc.d/wscons и пишите туда что-то типа
#!/bin/sh
# NetBSD sucks and must die

wsfontload -N russfont /usr/share/wscons/fonts/koi8.816 
wsconsctl -f /dev/ttyE0 -dw font=russfont
wsconsctl -f /dev/ttyE1 -dw font=russfont
wsconsctl -f /dev/ttyE2 -dw font=russfont
wsconsctl -f /dev/ttyE3 -dw font=russfont

И рискните перезагрузиться. Поидее должно всё получиться, хотя сам не пробовал (если что я за последствия не отвечаю, просто самому лом перезагружаться...)
ну и... оцените сколько строчек кода в файле /etc/rc.d/wscons было изначально и сколько стало, при той же функциональности :-)
Подсказываю: было 180, стало - 8, отличе почти в 20 раз. А теперь представьте, что ВЕСЬ код пишется в таком стиле... Страшно, да?
В общем, не льстите NetBSD, это на ссамом деле параша с опарышами как и масса другого софта.
Ну да, да, самым назойливым ещё советую доработать чуть этот скриптик чтобы он читал параметры с /etc/wscons.conf :-) Чтобы всё совсем медово было. Пусть в итоге получится 20-30 строк, но внятных, но никак не 180.
Цитата:
Да и вообще, лучше сделать так, раз пошли такие проблемы. В пункте A указать, что он необходим для NetBSD 3.0, но, в свою очередь, не нужен для NetBSD 3.1. А в пункте E наоборот.

Указал.

Scr1pt аватар

spinore

spinore писал(ла):
Scr1pt писал(ла):
Т.е. сам скрипт /etc/rc.d/wscons, увидев в своём конфигурационном файле что-то вроде такого:
font koi8 - - - /usr/share/wscons/fonts/koi8.816 

Должен не только вызвать wsfontload, добавив определённый шрифт и обозвав его, но ещё и wsconsctl, "поставив" этот шрифт на все виртуальные консоли?

Не совсем, за то на какие консоли ставить шрифт отвечают строчки типа

screen 1 - vt100

Последние парсятся м подаются как аргументы на wsconctl, а первые - на wsfontload.

Строчки с описанием виртуальных консолей у меня в NetBSD 3.1 не добавляют на эти консоли вышеописанные шрифты.

И ещё: у меня в NetBSD 3.1 в файле /etc/rc.d/wscons 170 строк, а не 180.
Да и вообще:

bash-3.2# md5 /etc/rc.d/wscons
MD5 (/etc/rc.d/wscons) = 39c54a9129bcd4af9878f7c048ac0b98

bash-3.2# head /etc/rc.d/wscons
#!/bin/sh
#
# $NetBSD: wscons,v 1.10 2004/08/13 18:08:03 mycroft Exp $
#

# PROVIDE: wscons
# REQUIRE: mountcritremote
# BEFORE:  LOGIN

$_rc_subr_loaded . /etc/rc.subr

Дата (13 августа 2004 года), кажется, не совпадает с релизом NetBSD 3.1. Тогда, может, разработчики изменили содержимое файла, забыв изменить дату последнего редактирования?

А у Вас? Хотелось бы узнать, как этот скрипт изменялся от версии NetBSD 3.0 к 3.1.

spinore писал(ла):
Ну да, да, самым назойливым ещё советую доработать чуть этот скриптик чтобы он читал параметры с /etc/wscons.conf :-) Чтобы всё совсем медово было. Пусть в итоге получится 20-30 строк, но внятных, но никак не 180.

Очень сомневаюсь, что полноценный парсинг конфигурационного файла /etc/wscons.conf можно уместить всего в 20-30 строк кода.

spinore аватар

Цитата:Строчки

Цитата:
Строчки с описанием виртуальных консолей у меня в NetBSD 3.1 не добавляют на эти консоли вышеописанные шрифты.

По кр. мере так предполагалось, видимо, разработчиками.
Цитата:
Дата (13 августа 2004 года), кажется, не совпадает с релизом NetBSD 3.1. Тогда, может, разработчики изменили содержимое файла, забыв изменить дату последнего редактирования?

Насколько я знаю, в файлах пишется дата последнего исправления самого файла ане релиза ОС. Аналогично и в манах. Релиз 3.1 был багфикс-релизом по отношению к 3.0 версии, поэтому вполне логично что файл целиком и полностью тот же как и в 3.0 (хотя не поручусь).
Цитата:
А у Вас? Хотелось бы узнать, как этот скрипт изменялся от версии NetBSD 3.0 к 3.1.

У меня не осталось оригинальной версии.... по крайней мере я не уверен. Текущий вариант - мной отредактированный с учётом парсинга допвозможностей с /etc/wscons.conf файл, но, впоследствии, с закоменченными новыми строками доповзомжностей из-за того что шрифты при таких вариантах бьются...