Моё решение проблемы шрифта в консоли

Natrio как насчёт в аур правило выложить? думаю первого варианта достаточно будет.
Да первый вариант отличный.
Его нужно не в аур продвигать,а в официальную поставку udev|systemd

Меня настораживает почему вариант с systemd-udev-settle.service не срабатывает как должен (((
Он просто обязан притормаживать зависящие сервисы пока устройства не будут готовы.
Псевдографический инсталлятор Arch Linux ver. 3.8.2
Благодарности принимаются на ЯД 410012815723874
nafanja
Да первый вариант отличный.
Я рад :)

Его нужно не в аур продвигать,а в официальную поставку udev|systemd
Увы, он не учитывает фонтмапы, так что для официальной поставки не годится. Вот второй – более универсален. Третий – аналогично.

Но к сожалению, есть машины, на которых модуль nouveau ухитряется инициализировать фреймбуфер ПОЗЖЕ, чем запускается getty, а после этого момента надо загружать шрифт уже не в одну консоль, а во все по очереди – и тут ни один из вариантов не срабатывает. Тут нужен или скрипт, который запустит setfont или systemd-vconsole-setup по очереди для каждого из tty1..12, причём желательно как-то определить эту печальную необходимость, или задерживать запуск getty, что чревато тем, что мы можем вообще не дождаться логина – откуда мы знаем, что искомое событие вообще должно произойти?
Natrio
причём желательно как-то определить эту печальную необходимость, или задерживать запуск getty
удев должен отрапортовать: -работа закончена Шеф.
Псевдографический инсталлятор Arch Linux ver. 3.8.2
Благодарности принимаются на ЯД 410012815723874
nafanja
Natrio
причём желательно как-то определить эту печальную необходимость, или задерживать запуск getty
удев должен отрапортовать: -работа закончена Шеф.
А если не закончена?
Пишите Поттеру! ;)
такие дела.
Natrio
nafanja
Natrio
причём желательно как-то определить эту печальную необходимость, или задерживать запуск getty
удев должен отрапортовать: -работа закончена Шеф.
А если не закончена?
у юнита есть таймаут, если вдруг реализовать запуск через него…однако и удева чтото должно быть…имхо
Лозунг у них был такой: "Познание бесконечности требует бесконечного времени". С этим я не спорил, но они делали из этого неожиданный вывод: "А потому работай не работай — все едино". И в интересах неувеличения энтропии Вселенной они не работали. (с)
Чего только не узнаешь, покурив маны :)

Консоль, на самом деле, технически одна. Известна как /dev/tty0 и /dev/console
Установка шрифта по-умолчанию работает именно для этой, “реальной” консоли.
Все остальные консоли, то бишь tty1, tty2 и т.д., создаются ядром по факту обращения к ним, а без этого от них одни названия. Фактически это просто подменные буферы в памяти, которые загружаются в консоль при переключении. Именно при создании новой виртуальной консоли в неё переписывается шрифт, который был установлен для “реальной”.

Отличить уже созданные консоли от “пустышек” очень просто – для каждой из них есть не только /dev/ttyN, но ещё и /dev/vcsN , где N номер консоли. Из этих устройств vcs можно получить полный дамп содержимого, но главное, что их можно использовать как список действующих консолей.

Пока systemd не запустил getty.target, у нас есть только одна консоль, и шрифт, загруженный в это время, будет использован для всех вновь создаваемых консолей. Но если getty уже запущены, значит и дополнительные консоли уже созданы, и шрифт для них надо задавать отдельно для каждой.

В принципе, их ещё можно удалять командой deallocvt N , и тогда они снова становятся “пустышками”, но такое можно провернуть не всегда.

В результате всех этих изысканий у меня получилось вот такое:
/etc/udev/rules/96-fb-all-vcs-setup.rules :
# Setup all vconsoles for a new framebuffer device
KERNEL=="fb*", ACTION=="add", RUN+="/bin/sh /etc/udev/all-vcs-set.sh"
/etc/udev/all-vcs-set.sh :
#!/bin/sh
# We must load locale for $VCS util
. /etc/locale.conf
export LANG
VCS=/usr/lib/systemd/systemd-vconsole-setup
# Setup the "real" (current) console first
$VCS
# Setup all other active consoles
for VC in /dev/vcs[0-9]*
do $VCS /dev/tty${VC#/dev/vcs}
done
В таком виде правило и скрипт работают так, что даже если модуль DRM с фреймбуфером не был загружен изначально, и его запустили руками через modprobe, это всё равно приведёт к загрузке шрифта для всех имеющихся консолей, сколько бы их ни было прописано в inittab или конфиге systemd , а все “пустышки” будут проигнорированы.
- А колбаску полковник лично коптил для Вас.
- Капитану Соколову медаль, полковнику Петренко - орден!
Копипаст, забрал на случай если понадобится. спасибо
Лозунг у них был такой: "Познание бесконечности требует бесконечного времени". С этим я не спорил, но они делали из этого неожиданный вывод: "А потому работай не работай — все едино". И в интересах неувеличения энтропии Вселенной они не работали. (с)
Глядя на последний скрипт, подумал, что всё это неплохо было бы уместить ВНУТРЬ самой утилиты systemd-vconsole-setup , которая от этого только выиграет.
Вот это, наверное, и имеет смысл предлагать разработчикам (udev). А само правило – факультативно, поскольку требуется далеко не всегда.

Осталось собраться с духом и сочинить обстоятельную телегу на английском, чтобы подъезжать на ней к авторам :)
 
Зарегистрироваться или войдите чтобы оставить сообщение.