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

Мужики, может это точно реальный баг? И стоит доложить кому следует.
У меня хоть проблемы со шрифтами нет, но когда стал юзать ускоритель systemd-readahead, сеть иногда не запускается, ошибка типа сетевые устройства не найдены, а после загрузки netcfg.service спокойно грузится без ошибок.
Псевдографический инсталлятор Arch Linux ver. 3.8.2
Благодарности принимаются на ЯД 410012815723874
sleepycat
все отвалился юнит…видно придется свой врубать или выносить этот кудато дальше sysinit… что сдается мне трудновато будет.
Я же сказал, что пробовал именно так, как написал nafanja, то есть у меня было Requires, а НЕ Wants. И именно это было нестабильно, а Wants я даже и не пробовал.

В любом случае ждать, пока udev обработает вообще ВСЕ устройства – опасно, тем более на не заданном наперёд железе, ибо можно не дождаться или дождаться слишком поздно. Если у нас есть событие запуска фреймбуфера, и по этому событию он должен быть настроен, то привязывать настройку к каким-то левым событиям несколько странно.

Не обязательно вешать на это событие рестарт юнита, можно поставить напрямую setfont, но тогда придётся второй раз прописывать туда шрифт, можно поставить скрипт, который сначала прочтёт /etc/vconsole.conf , а потом подставить этот шрифт в setfont, но самым правильным решением было бы исправить ту утилиту, которую я первоначально пытался использовать, чтобы она сама читала локаль, и желательно в этом случае не трогала клавиатуру, или вообще сделать отдельную, и как и эту, прилагать к udev.
Настраивать устройства должен udev :)

Кстати, меня посетила мысль – почему бы в случае статических настроек сети не запускать их по факту появления сетевого интерфейса :)
Ну и конечно, надо переделать юнит dhcpcd, чтобы не ждать его сто лет, особенно при проблемах с сетью. Много ещё чего надо переделать, хотя бы запуск getty – пускай стартует по готовности, а не после всего. Разумеется, при этом надо или переключить консоль на чистую, или подавить вывод “опоздавших” юнитов, чтобы не лезли поверх логина.

nafanja
Мужики, может это точно реальный баг? И стоит доложить кому следует.
Это баг пакета udev, что в нём нету заранее заданного правила на шрифты? Могабыть, только тогда надо требовать досрочного выкидывания их из rc.conf, и требовать только vconsole.conf.
Требовать загрузки своевременной шрифтов от systemd довольно затруднительно, потому что ну не предназначен он для отлавливания событий udev. Они оба являются демонами асинхронной загрузки – только один занимается ядром и железом, а другой демонами и прочим юзерспейсом. Не очень-то удобно, и не очень правильно заставлять из синхронизироваться между собой.
Меня посетила еще одна идея, привязать сервис настройки консоли к сервису консоли…
Псевдографический инсталлятор Arch Linux ver. 3.8.2
Благодарности принимаются на ЯД 410012815723874
nafanja
Меня посетила еще одна идея, привязать сервис настройки консоли к сервису консоли…
А что это за сервис?

Меня посетила другая идея, которая могла бы посетить меня и раньше, но я всё тупил и тупил.
Всё просто – не надо изобретать велосипеды, они и так уже изобретены.
Не надо специальной утилиты или скрипта для загрузки шрифта, прописанного в конфиге – udev САМ может прочесть этот конфиг, потому что /etc/vconsole.conf сделан именно в виде ПЕРЕМЕННАЯ=значение.
96-fb-console-set.rules :
# Setup vconsole for a new framebuffer device
KERNEL=="fb*", ACTION=="add", IMPORT{file}="/etc/vconsole.conf", RUN+="/usr/bin/setfont $env{FONT}"
На этот раз проверил тщательно, наученный прошлым конфузом – работает, и мгновенно. Русский на месте :)
http://www.mail-archive.com/arch-genera … 28027.html
Тут нашел переписку, где обсуждалась та же проблема…
Ничего конкретного не решили.
Псевдографический инсталлятор Arch Linux ver. 3.8.2
Благодарности принимаются на ЯД 410012815723874
да! я таки нашел изъян в системд. Я уж думал будет все как не у людей. Вообщем все встроенные юниты , кроме наверно таргетов слишком сильно завязаны, так что пытаться навязать им свое мнение тяжело , не получив проблемы, второе, появления утсройства изрыгнутово удевом не равно окончанию др. работ связанных с его появлением. Несмотря на то что и системд может прочитать наш искомый файл, учитывая опыт с возней с “коробочными” юнитами , я все таки решил воспользоваться последним варинатом Natrio (и не нужно порождать лишнюю избыточность доп. юнитом всего лишь изза шрифта, а для удева это выглядит нормальным явлением). Вот теперь, согласен, универсальнинько получилось.
Да и wants я проверил на своем юните привязав его теста ради к wicd, который у меня дольше ввсех запускается. Все работает так как ожидается, кастрированный requires… А вот то что законы физики обходятся как то системными(встроенными) юнитами - это я уже встречал ))) . Но так как по умолчанию их трогать не рекомендуется (не считая отключения, mask) то думаю акции системд в моих глазах не упали. СТранно что гугл выдает только наш форум касательно этой проблемы, что у федоры все сразу чтоли завелось, или там из консоли никто не логинится?возможно такойже вопрос сусеводам. С дебиан ладно, она поидее скорее всего вообще в русском языке не нуждается обычно в консоли.
PS
Даже не знал что у меня драйвер поумолчанию еще и фб тянет, но к счастью как говориться, зато правило Natrio работает, честно говоря учитывая сегоднешнюю переписку, боюсь говорить безотказно, мало ли сглажу опять)) , так что пока просто работает.))
Лозунг у них был такой: "Познание бесконечности требует бесконечного времени". С этим я не спорил, но они делали из этого неожиданный вывод: "А потому работай не работай — все едино". И в интересах неувеличения энтропии Вселенной они не работали. (с)
А вот с сетевыми устройствами тоже самое можно ли провернуть?
Я к netcfg.service применил два возможных решения.
.include /usr/lib/systemd/system/netcfg.service
[Unit]
Requires=systemd-udev-settle.service
#Wants=systemd-udev-settle.service
After=systemd-udev-settle.service systemd-modules-load.service
Раз 20 перегружался, пока работает.
Псевдографический инсталлятор Arch Linux ver. 3.8.2
Благодарности принимаются на ЯД 410012815723874
Задумался над тем, что по этому поводу писать в вики, или посылать разработчикам.
Вариант с одной переменной FONT пришлось признать упрощённым, ведь есть же ещё FONT_MAP и FONT_UNIMAP, хотя обычно они и не требуются.

В результате у меня получилось три варианта.

  • Первый – простой:
    96-fb-setfont.rules
    # Set font for a new framebuffer device
    KERNEL=="fb*", ACTION=="add", IMPORT{file}="/etc/vconsole.conf", RUN+="/usr/bin/setfont $env{FONT}"
  • Второй – универсальный, с утилитой из комплекта systemd-tools . С ней тоже можно использовать чтение конфига, только для локали:
    96-fb-vconsole-setup.rules
    # Setup vconsole for a new framebuffer device
    KERNEL=="fb*", ACTION=="add", IMPORT{file}="/etc/locale.conf", RUN+="/usr/lib/systemd/systemd-vconsole-setup"
  • Третий – расширенный вариант первого:
    96-fb-setfontmap.rules
    # Set font and map for a new framebuffer device
    KERNEL=="fb*", ACTION=="add", GOTO="fb_set"
    GOTO="fb_end"
    LABEL="fb_set"
    IMPORT{file}="/etc/vconsole.conf"
    ENV{.setfont}="/usr/bin/setfont $env{FONT}"
    ENV{FONT_MAP}=="?*", ENV{.setfont}+=" -m $env{FONT_MAP}"
    ENV{FONT_UNIMAP}=="?*", ENV{.setfont}+=" -u $env{FONT_UNIMAP}"
    RUN+="$env{.setfont}"
    LABEL="fb_end"
    Даже не знаю, как смотреть на него после первых двух, я сделал его исключительно из принципа :)
Вопрос по мат. части systemd и общей загрузки. Немного не по теме.

У меня когда грузится система первые строчки вывода выглядят как то так:
running early hook
running hook [udev]
trigerring uevents
running hook [consolefont]

Порядок строчек намекает, что udev грузится раньше consolefont и keymap. Без этих хуков у меня шрифт не работает (modules=nouveau, кстати, не ставил). С хуками работает. Естественно, все настроено через vconsole и locale. Точно ли проблема в systemd … Или я неправильно понимаю порядок загрузки?
time lords
У меня когда грузится система первые строчки вывода выглядят как то так:
running early hook
running hook [udev]
trigerring uevents
running hook [consolefont]

Порядок строчек намекает, что udev грузится раньше consolefont и keymap. Без этих хуков у меня шрифт не работает (modules=nouveau, кстати, не ставил). С хуками работает. Естественно, все настроено через vconsole и locale. Точно ли проблема в systemd … Или я неправильно понимаю порядок загрузки?
Хук consolefont грузится в initcpio действительно после udev, и после загрузки модулей, НО – только тех модулей, которые добавлены в сам initcpio. Если вы добавите свой DRM-модуль в initcpio, то хук consolefont запустится после него, и настроит вам шрифт в консоли.

Если НЕ добавите – модуль загрузится уже ПОСЛЕ initcpio со всеми его хуками, запустит фреймбуфер и опять сбросит шрифт в дефолт, после чего вам остаётся надеяться только на то, что “основная” настройка шрифтов в initscripts или systemd сработает после этого модуля, а не до него. Если повезёт – у вас будет шрифт, не повезёт – не будет.

Теоретически модуль может при своём старте сохранить текущий шрифт, а потом восстановить его уже в своём фреймбуфере. Такое видимо возможно, но насколько я заметил, intel (модуль i915) такого явно не делает.

Поэтому я и сделал у себя в переносном Арче на флешке такое правило, которое настраивает шрифт именно в момент после запуска фреймбуфера, когда это и требуется – ни раньше, ни позже.
 
Зарегистрироваться или войдите чтобы оставить сообщение.