[Devel-conf] UNICODE в консоли - что и где надо фиксить
Anton Farygin
rider на altlinux.com
Пн Авг 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