[Devel-conf] UNICODE в консоли - что и где надо фиксить

Anton Farygin =?iso-8859-1?q?rider_=CE=C1_altlinux=2Ecom?=
Пн Авг 15 13:36:33 MSD 2005


Stanislav Ievlev wrote:

>Излагаю результаты полудневного исследования проблемы "Почему при старте у
>нас не работает Unicode".
>
>Интрига:
>То что фонт якобы надо грузить на каждой консоли - это "миф". 
>   setfont совершенно замечательно отрабатывает на все консоли сразу.
>   Реальная проблема в недоделке в одном месте и недостаче в другом.
>
>Что было:
>При старте отрабатывал /sbin/setsysfont, который сначала выставлял шрифт
>через setfont, а потом вызывал unicode_start, а потом догружал acm, если
>надо
>При входе в систему отрабатывали из profile.d lang.sh и console.sh -
>последний в случае unicode ничего не делал ибо там acm не требуется
>
>Бага #1:
>	Мы используем unicode_start похоже не так как это
>	предполагал RH
>	Посмотрите внимательно в этот фрагмент:
>--
>DEFAULT_UNICODE_FONT=LatArCyrHeb-16
># Also drdos8x16 is a good candidate.
>   
>case $# in
>        2)
>                setfont $1 -u $2
>                ;;
>        1)
>                setfont $1
>                ;;
>        0)
>                setfont $DEFAULT_UNICODE_FONT
>                ;;
>        *)
>                echo "usage: unicode_start [font [unicode map]]"
>                ;;
>esac
>--
>
>У нас unicode_start вызывается без аргументов ибо нам не нужно ещё раз
>выставлять фонт, а он выставлялся и выставлялся в совершенно левое
>значение - иначе говоря его по ходу загрузки кто-то и где-то вообще
>срубал. Подробнее не скажу ибо эти пряди бородатого кода (rc.sysinit и
>/sbin/setsysfont) без пол-литра вообще не разберёшь.
>
>
>Там ещё setsysfont грузится для поправки шрифтов для fb - я всё проверял 
>без fb. Надо бы проверить ещё и с ним, но я просто не успел.
>
>Как фиксить:
>	Не фига нам по двадцать раз шрифты перегружать
>        Предлагается убрать вообще весь этот хвост из unicode_start
>        Если это жизненно необходимо - приведите пример, у меня после того
>        как я убрал эту вторичную перегрузку шрифта всё заработало "на ура"
>
>Проблема #2:
>       mingetty при выводе issue ресетит терминал посылая ему \033c
>       Поэтому при входе/выходе в систему половина настроек терминала слетает.
>       На этот случай у нас и существует console.sh, который перевключает
>       acm, посылая повторно \033(K.
>       при ресете слетает и режим unicode (unicode_start посылает \033%G),
>       поэтому его надо восстанавливать так же как и acm - у нас этого
>       просто не было вообще.
>
>Как фиксить:
>      Ну сам фикс-то простой, строчки следующего вида:
>--
>case "$LANG" in
>    *.utf8|*.UTF-8)
>        [ -x /usr/bin/unicode_start ] && /usr/bin/unicode_start
>        ;;
>esac
>--
>
>Но вот вопрос, куда его вставлять в /etc/profile.d?
>console.sh не годится ибо там нету ещё LANG
>В lang.sh самое место, но идеологически это в другом пакете получается
>RH держит все эти хаки для консоли прямо в lang.sh
>
>Результаты фиксов:
>После фикса unicode_start (удаления хвоста скрипта с лишним setfont) и
>lang.sh у меня тьфу-тьфу всё завелось - я пробовал без режима fb, но по
>идее и он должен работать ибо все фиксы были только вокруг одного скрипта
>unicode_start
>  
>
Я думаю что lang.sh самое место.

>Одно но:
>У нас рут работает под POSIX
>Если в режиме POSIX не сделать unicode_start (но грузить шрифт ес-но)
>то работает нормально mc, 
>но ес-но ничего русского не выводится,
>  
>
А какой русский может быть под POSIX ?

>если сделать unicode_start 
>то русский появится, но mc в таком режиме колбасит.
>  
>

Хм.. бага MC ?

>А в lang.sh проверка как помните была на локаль именно utf.8.
>
>В общем предлагаю ldv посмотреть это и решить куда вставлять вызов из
>profile.
>unicode_start живёт в kbd, поэтому в силу "отсутствия  де факто" мантейнера, можно фиксить его кому угодно.
>Кроме того замечено, что плющит и клобасит read-line в режиме UTF-8.
>Дима, пожайлуста, посмотри. Там как-то не очень понятно кого плющит больше
>- сам readline или терминал.
>
>Ну вот и всё ... давайте обсуждать и фиксить.
>
>  
>
тут похоже даже обсуждать особенно нечего - надо просто фиксить.

Может быть для начала баги развесить ?

Rgds,
Rider




Подробная информация о списке рассылки devel-conf