fly4life
написал 30 декабря 2003 года в 00:54 (1083 просмотра)
Ведет себя
как мужчина; открыл 182 темы в форуме, оставил 5340 комментариев на сайте.
Скомпилил ядро с поддержкой frame buffer’а. Выставил расширение для консоли 1024х768 и всё бы ничего, но есть один неприятный косяк =(.
Русские буквы нормально отображаются только в первой консоли (той, в которую выкидывает после загрузки и которая tty1). Во всех остальных вместо русских букв отображаются квадратики. Можно ли это исправить и если да, то как?
Последние комментарии
- OlegL, 17 декабря в 15:00 → Перекличка 21
- REDkiy, 8 июня 2023 года в 9:09 → Как «замокать» файл для юниттеста в Python? 2
- fhunter, 29 ноября 2022 года в 2:09 → Проблема с NO_PUBKEY: как получить GPG-ключ и добавить его в базу apt? 6
- Иванн, 9 апреля 2022 года в 8:31 → Ассоциация РАСПО провела первое учредительное собрание 1
- Kiri11.ADV1, 7 марта 2021 года в 12:01 → Логи catalina.out в TomCat 9 в формате JSON 1
ecobeing.ru
Экология и вегетарианство на благо всем живым существам Планеты.
a echo -ne «\033(K» не пробовал? может просто управляющий код надо запихать в консоль…..
А с предыдущей версией ядра все нормально было?
Какое ядро собирал?
По симптомам очень напоминает ситуацию когда скрипт локализации был запущен только для первой виртуальной консоли.
Подробности — в соответствующем HOWTO, сам я читал его давно, подробностей уже не помню.
2sarutobi:
> a echo -ne «\033(K» не пробовал? может просто управляющий
> код надо запихать в консоль…..
Нет, это я сделал в первую очередь — не помогает =(.
2Anarchist:
> А с предыдущей версией ядра все нормально было?
> Какое ядро собирал?
С предыдущими версиями (2.4.20, 2.4.22, 2.5.69) было тоже самое, но тогда мне это не мешало и я не сильно обращал на это внимания. В данный момент ядро 2.6.0.
Что за скрипт локализации?
Имелась в виду последовательность команд задающая состояние терминала.
Запускается только один раз для терминала по умолчанию (tty1), а надо циклом:
for i in 1 2 3 4 5 6
do
выставляем состояние tty$
done
Во, подсказали хаутушку:
http://www.mgul.ac.ru/~t-alex/Linux/Cyrillic-HOWTO/Cyrillic-HOWTO-russian-3.html
Вбил в консоли, где нет русского, следующую команду:
И проблема разрешилась =).
Дык о чем и говорил…
Только проблема пока не разрешилась:
ищешь где у тебя в системе при загрузке выставляются шрифты и прописываешь выставление шрифтов для всех консолей.
Нда… И вправду всё гораздо сложнее, чем я понадеялся… Пытался я найти скрипт, в котором инициализируются шрифты, но беглый осмотр загрузочных скриптов мне не дал ответа =(. Может кто подскажет?
П.С. ASPLinux 9
файл в котром шрифт выставляется /etc/sysconfig/i18n
а в /etc/rc.d ищи кто вызывает его
Про /etc/sysconfig/i18n всё известно и понятно. Я знаю, что команда setsysfont включает в консоли системный шрифт, который задан в переменной SYSFONT файла /etc/sysconfig/i18n (получается аналог команды setfont /lib/kbd/consolefonts/Cyr_a8×16.psfu.gz, о которой писал выше). Но в каком скрипте это всё вызывается я не нашёл =(. Сам i18n нигде не вызывается (опять же, по крайней мере, я не нашёл).
Правда, подумывал как более изощренным (и в лоб) способом решить проблему свою. Т.е. написать скрипт, который бы присваивал консолям tty$i системные шрифты и запихать этот скрипт отдельным скриптом в автозагрузку, либо вообще приписать в конец rc.local. Но как связать эти самые tty-ки и команду setsysfont я хз =(.
хмм у меня такойже зверушка с ядром правда поменьше но не о том хочу сказать
вот примеры с моих скриптов
#
/etc/rc.d/init.d/functions
#
[ -z "${CONSOLETYPE:-}" ] && CONSOLETYPE=«`/sbin/consoletype`»
if [ -f /etc/sysconfig/i18n -a -z "${NOLOCALE:-}" ] ; then
. /etc/sysconfig/i18n
if [ "$CONSOLETYPE" != "pty" ]; then
case «${LANG:-}» in
ja_JP*|ko_KR*|zh_CN*|zh_TW*)
export LC_MESSAGES=en_US
;;
*)
export LANG
;;
esac
else
export LANG
fi
fi
#
/etc/rc.d/rc.sysinit
#
if [ "`/sbin/consoletype`" = "vt" -a -x /sbin/setsysfont ]; then
echo -n «Setting default font ($SYSFONT): »
/sbin/setsysfont
if [ $? -eq 0 ]; then
success
else
failure
fi
echo ; echo
fi
вроди ничего не напутал ))
Я также нашёл, что /sbin/setsysfont также вызывается в /etc/rc.d/init.d/keytable (скрипт, который выпоняется при старте сервиса keytable). Но, ни в привидённом тобой, ни в привидённом мной сриптах я не знаю как связать setsysfont и консоли tty$i (где i in 2 3 4 5 6) =(. Может подскажешь?
Впринципе, есть ещё одно какое-никакое решение. Если добавить в конец файла /etc/bashrc (просто у меня у всех пользователей в качестве рабочей оболочки стои тbash) строку /bin/setfont /lib/kbd/consolefonts/Cyr_a8×16.psfu.gz, то при логоне каждого пользователя будет загружать нужный мне системный шрифт. Зато при загрузке иксовых консолей идёт ругань (putfont: PIO_FONT: Invalid argument), что тоже не очень приятно =((.
Вобщем, не одно, так другое…
хмммм
хочу такуюж феньку как у тебя :-)
кинь на мыло скрипты rc.sysinit, setsysfont и functions
я вот тут сижу и вспоминаю. вроди есть софтинка которая позволяет выполнять на указанной консоли приложение. вспоминаю, а вспомнить не могу. однажды лазил по манам и наткнулся
ксли оная есть (к примеру назовем ее dest_exec и возможно она должна находится в /sbin или /usr/sbin), то можно сваять чтото вроди:
if [ -x /sbin/dest_exec -o -x /usr/sbin/dest_exec ]: then
for i in 1 2 3 4 5 6
do
dest_exec --console /dev/tty($i) --exec /sbin/setsysfont (или /bin/setfont /lib/kbd/consolefonts/Cyr_a8×16.psfu.gz, но думаю первое лучше)
done
fi
но сам я тоже чето не улавливаю связки сего творения с выше изложенными фрагментами /etc/rc.d/init.d/functions и /etc/rc.d/rc.sysinit.
у меня то все без циклов работает
Или ты их просто не встретил?..
fly4life,
а почему бы не помедитировать над выводом `grep -e font < /etc/inittab`?
[root@host ~]# grep -e font < /etc/inittab
# Fix fonts for framebuffer.
fb:2345:once:/etc/rc.d/scripts/framebuffer_setfont
[root@host ~]#
:)
гм.. у меня ничего такого в inittab нету…
Так пусть будет! :)
#!/bin/sh
#
# /etc/rc.d/scripts/framebuffer — run once at boot time from inittab.
. /etc/init.d/functions
# Parse framebuffer config.
SourceIfNotEmpty /etc/sysconfig/framebuffer && [ "$ENABLE" != no ] || exit 0
sleep 1
# fbset program
FBSET=/usr/sbin/fbset
# Setup videomode if defined
if [ -n "$MODE" -a -x "$FBSET" ]; then
«$FBSET» -a «$MODE» >>/dev/tty12 2>&1
fi
# Update system font
if [ -n "$MODULE" -o -f /proc/progress ] || [ -n "$MODE" -a -x "$FBSET" ]; then
for i in $TTYS; do
/sbin/setsysfont --tty=/dev/tty$i >>/dev/tty12 2>&1
done
fi
[root@host ~]# rpm -q -f /etc/rc.d/scripts/framebuffer_setfont
initscripts-5.49-ipl50mdk
[root@host ~]#
1.
«# Update system font
if [ -n "$MODULE" -o -f /proc/progress ] || [ -n "$MODE" -a -x "$FBSET" ]; then
for i in $TTYS; do
/sbin/setsysfont --tty=/dev/tty$i >>/dev/tty12 2>&1
done
fi
»
странно, но я не нашел в /sbin/setsysfont ни одного $* или $@ ($1 и тд.) или case’а, с помощью котрого можно былоб передать значение описонного арнумента --tty. к тому же переменная $TTYS у меня не нашлась в скриптах и призагрузке она пуста (у меня). а версия initscripts замечу на два порядка выше. так что если и пригодна. то не всем. идея мне нравится но ….
2.
«Или ты их просто не встретил?.. »
нашел нечто. что копирует пустые строки на каждую консоль. но фенечки не уловил. прошу объяснить цель этой процедуры
/etc/rc.d/rc.sysinit
last=0
for i in `LC_ALL=C grep '^[0-9]*.*respawn:/sbin/mingetty' /etc/inittab | sed ’s/^.* tty\([0-9][0-9]*\).*/\1/g’`; do
> /dev/tty$i
last=$i
done
if [ $last -gt 0 ]; then
> /dev/tty$((last+1))
> /dev/tty$((last+2))
fi
Genie извиняюсь :-)
у меня не поставлены утилиты для рабоиты с фб
но мой /sbin/setsysfont действительно не принимает параметров из вне.
fly4life
вот еще дурь нашел
/sbin/setsysfont
echo -en «\\033(K» > /dev/console
«Скомпилил ядро с поддержкой frame buffer’а. Выставил расширение для консоли 1024х768 и всё бы ничего, но есть один неприятный косяк =(»
У меня 2.6.0. вообще с ним не компилится:(
Итак, праздники с запоем затянулись, но я уже пояти в форме =). Собрал мозги из киселя в нечто более мозгоподобное. Вышел, так сказать, из штопора и… добрался-таки до фреймбуфера =)
2 Genie: скрипт твой, к сожаелнию, мне не помог =(. Как и у ing’а, setsysfont мой не принимет никаких параметров (в частности, '--tty=’).
2 ing:
> ксли оная есть (к примеру назовем ее dest_exec и возможно
> она должна находится в /sbin или /usr/sbin), то можно сваять
> чтото вроди:
подобного я что-то не нашёл =(.
> echo -en «\\033(K» > /dev/console
вот это тоже не работает (точнее, может как-то и работает, но мою проблему не решило ;)).
Думаю и ищу дальше =)
взял у товарища сидюк. а то мой сдох, добрался до пакетов дистра
вроди нашел такую софтинку
зовется open
да, точно open
вот может такая последовательность поможет
for i in 1 2 3 4 5 6
do
open -c $i — setfont /lib/kbd/consolefonts/Cyr_a8×16.psfu.gz
done
а может стоит так
for i in 1 2 3 4 5 6
do
open -c $i — setsysfont
done
или даже так
for i in `LC_ALL=C grep '^[0-9]*.*respawn:/sbin/mingetty' /etc/inittab | sed ’s/^.* tty\([0-9][0-9]*\).*/\1/g’`; do
open -c $i — setsysfont
done
и на мой взглял запуск сетсисфонта более оптимален, достаточно менять в i18n фонт а также в сетсисфонте выполняется \\033(K
:-)
К сожаленю, open тоже не спас… Системный шрифт прописался только для той консоли, в которой я запускал этот скрипт.
П.С. и всё-таки. Кто мне объяснит такую штуку. Почему, если не использовать фреймбуфер (т.е. в загрузчике никаких параметров не передавать для установки расширения консоли), а использовать стндартную 80х25 консоль, то русские шрифты во всех консолях отображаются правильно?
Это следует из логики работы видоеплат. В текстовом режиме знакогенератор подгружается в память и его хватает только на 512 символов максимум (при этом мы, в общем то, жертвуем бит мерцания/повышенной яркости на вторую страницу из 256 символов). Один раз при переключении в текстовой режим таблицу установили, и пользуемся.
Фреймбуфер — по сути — графический режим отображения текста, поэтому шрифт приходится хранить в памяти драйвера консоли, и видимо, было решено дать возможность для разных консолей устанавливать разные шрифты — в одной русский, а во второй, скажем, — японский, в третьей — китайский, а в четвертой — арабский. Мало ли чего кому взбредёт в голову.
Наиболее простое решение проблемы, видимо в том, чтобы вкомпилировать в драйвер фреймбуфера нужный русский шрифт (выбирается в опциях фреймбуфера при компиляции ядра). Хотя тут, как говорится, бабушка надвое сказала….
PS: емнис, в RU.LINUX тема с шрифтами на 2-6 консоли при фреймбуфере не раз осуждалась… И последний раз — вроде бы как раз в RH9 и ядре 2.6.0. Точно не помню….
Спасибо =)
Такого для фркймбуфера в опциях ядра нету.
Если ты про тот, на который есть ссылка на главной странице, то там я ничего подобного не нашёл =(.
Да не за что :)
Ааааасссьь???!!! Как это «нету»??!
А это что (для 2.6.*):
$ make menuconfig
Далее «Device Drivers» — «Graphics support» — «Console display driver support»
???!!
Конечно, при этом придётся малость поковыряться в исходниках, заменить шрифт кириллическим, и вообще это через Ж… Зато надежно :)
Мммм.. Это не RU.LINUX FAQ, а именно сама RU.LINUX.
<font size=«-2»>Я ж не зря в обсуждении о ЧаВО уточнения наводил, за что от Dmitry V. Ivanov по шее малость схлопотал — ЧаВО далеко неактуально. :-(</font>
<font size=«-2»>Точнее оно актуально до такой степени, пока кто-нибудь не ужаснётся и не решится-таки исправить хотя бы один вопрос-ответ. Не говоря уже о глобальном и значимом пересмотре оного ЧаВО. Майнтайнер лишь собирает и рассылает, ничего более, насколько мне известно не_входит в обязанности. По возможности — желательно, но необязательно.</font>
=))) Ааа, вот ты о чём.
Но, ведь русского нету же. Правкой исходников можно что угодно туда вставить, например, поддержку индикатора кругового обзора ПОРИ П2, но ведь, не говорят, что эта поддержка есть ;) Ну да ладно…
Серёг, может и можно сделать то, что ты говоришь (т.е. вкорячить в ядро поддержку русского для фрейм буфера), но я даже представления не имею как это сделать! Я не настолько гуру ;)
Мдааа.. тяжело ж в деревне без нагана… :))))
Файлики — тут:
linux-2.6.{0,1,2}/drivers/video/console/
с именами
font_8x{8,16}.c
А вообще, вперёд-ка читать группу fido7.ru.linux на news://news.fido7.ru/
Гыг. Где файлики хранятся-то я знаю. Но что с ними делать — эт я хз. Ну не знаю и усё =). Хотя я бы предположил, что в них нужно записать хекс-коды для русских букв. Ну, дык, они там уже есть ;). Так что же с этими файлами нужно всё-таки сделать, чтобы мой фреймбуфер перестал выделываться?!
Там нужно прописывать.. ну да, хекс-коды, но так, чтобы они описывали начертание русских буковок.
Приглядись к тем 1-ками и 0-кам получше. с расстояния побольше. Увидишь буквы.
Вот так и недо записать.
В инете просто обязано валяться уже готоое.
Но — я ж уже сказал — это путь через Ж… лучше так не делай, раз не уверен.
Иди искать в fido7.ru.linux У меня траф, к сожалению, либо хороший, но дорогой, либо дешевый, но… почти никакой.. и найти я в группе fido7.ru.linux точнее не смогу. :(
Тэкс. Нашлось более-менее правильное решение для кириллизации фреймбуферных консолей.
consolechars -f [то что в ~/.i18n прописано как SYSFONT]
Включить проверку на tty-ность (а не pty-ность) консоли и запускать.
Осталось установить утилиту consolechars ;).
Спасибо, попробую.