Описание работы пакета
=======================

Данный пакет основан на методе загрузки консольных шрифтов, приведённых
в статье https://wiki.archlinux.org/index.php/Fonts_(Русский) 
Ниже привожу краткий пересказ главы и описание применяемого метода.


Теория
=======

После запуска ядро Linux создаёт и поддерживает текстовую консоль.

Текст, выводимый в символьное устройство /dev/console , записывается в специальный буфер в памяти вместе с информацией о цвете.

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

При инициализации консоли в этот буфер записывается начальный шрифт, вкомпилированный в ядро (как правило, без кириллицы), 
а в дальнейшем шрифт в буфере может быть заменён с помощью утилиты setfont. Так как в этом буфере находится только содержимое файла со шрифтом,
но не его название, ядро не знает, какой шрифт в него загружен, и в случае создания консоли заново, как это происходит при переключении из текстового режима
во фрэймбуфер после старта соответствующего видеокарте drm-модуля, шрифт снова сбрасывается в начальное значение.

В дополнение к "реальной" консоли, ядро поддерживает динамически расширяемый набор виртуальных консолей /dev/tty1, tty2 и т.д., и корневую виртуальную консоль /dev/console

Хотя устройства для первых 59 виртуальных консолей создаются заранее, сами консоли при этом остаются в представлении ядра лишь номерами.
Реально они появляются только после первой попытки вывода в них текста. На экран все виртуальные консоли выводятся путём подмены буферов в единственной 
"реальной" консоли, причём буфер шрифта при создании новой виртуальной консоли берётся тот, что был в "реальной" на момент создания.

В результате, если шрифт был загружен в реальную консоль до создания виртуальной консоли, в последующем он автоматически распространяется на все виртуальные,
в противном случае этого не происходит, и каждая новая виртуальная наследует шрифт из предыдущей видимой, то есть тот, что был загружен в "реальную" в тот момент. 


Проблема с systemd
===================

В пакете systemd за загрузку консольного шрифта отвечает программа /lib/systemd/systemd-vconsole-setup , которая загружает нужный шрифт.

Имеющиеся в системе консольные шрифты находятся в каталоге /lib/kbd/consolefonts/ , проверить их можно, запустив команду setfont для каждого из них.

Если для вашей видеокарты при загрузке системы подключается drm-модуль, например i915 для intel, его старт приводит к появлению нового устройства фреймбуфера (или замене старого на новый) (/dev/fb0 и т.д.), и повторной инициализации консоли со сбросом шрифта. 
Если это происходит уже после того, как systemd-vconsole-setup загрузила ваш шрифт, вам требуется либо загрузить его повторно, либо обеспечить старт drm-модуля заведомо раньше загрузки шрифта. 

В данном пакете применён следующий рецепт из статьи. Мы отсрочиваем загрузку шрифта консоли до момента инициализации фреймбуфера. 
Для этого создаётся правило udev  /lib/udev/rules.d/991-fb-systemd.rules такого содержания:

  # Setup all vconsoles for a new framebuffer device
  KERNEL=="fb*", ACTION=="add", \
  RUN+="/bin/sh /lib/udev/all-vcs-set"


и скрипт, который это правило будет запускать  /lib/udev/all-vcs-set :

  #!/bin/sh
  # We must load locale for $VCS util
   . /etc/sysconfig/i18n

  export LANG
  VCS=/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


Скрипт читает локаль, которая требуется для нормальной работы утилиты systemd-vconsole-setup из файла . /etc/sysconfig/i18n, после чего выполняет
её для "реальной" консоли, и для каждой из созданных на этот момент виртуальных, если такие есть.
Для определения инициализированных виртуальных консолей здесь использованы устройства произвольного доступа к текстовым буферам соответствующих консолей
/dev/vcs*, которые в отличии от /dev/tty* создаются только для уже имеющихся консолей.
