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 mailing list
[email protected]
https://lists.altlinux.ru/mailman/listinfo/devel-conf

Ответить