Русский шрифт в терминале, консоли и ненавистные квадратики

Если для вас русский шрифт в консоли это такое себе одноразовое действо, то можно просто ввести команду

setfont cyr-sun16

После установки Manjaro всегда! возникает необходимость работы в терминалах tty (Ctrl-Alt-F2) вне Х. По умолчанию кирилица там отсутствует. Исправить это можно так:
1) Редактируем vconsole.conf:

sudo nano /etc/vconsole.conf

KEYMAP="ruwin_alt_sh-UTF-8"
FONT="cyr-sun16"

Сохраняем, выходим из нано. строка KEYMAP=»ruwin_alt_sh-UTF-8″ устанавливает переключение раскладок по Alt-Shift, другие варианты можно посмотреть так:

ls /usr/share/kbd/keymaps/i386/qwerty

Поэкспериментировать можно с помощью команды loadkeys <имя раскладки> в терминале (Ctrl-Alt-F2 например)
Шрифт задаёт строка FONT=»cyr-sun16″, посмотреть доступные:

ls /usr/share/kbd/consolefonts/

включить нужный шрифт:

setfont <имя шрифта>

2) Пересоздаём initrd.
сначала редактируем файл mkinitcpio.conf. В нём в строке HOOKS=»base udev autodetect modconf block keyboard keymap … должно присутствовать consolefont если нет — дописываем после keymap.

sudo nano /etc/mkinitcpio.conf

HOOKS="base udev autodetect modconf block keyboard keymap consolefont filesystems fsck"

Сохраняем, выходим из нано.
Пересоздаём initrd:

sudo mkinitcpio -Р

3) Перезагрузка. Проверка.

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

Как исправить:

1) Фреймбуфер дожен стартовать как можно раньше. (на 100% проблему это не решит но вместо квадратиков появятся русские буквы)

sudo lspci -vk

Находим какой модуль ядра отвечает за видео (VGA controller) в моём случае:

00:02.0 VGA compatible controller: Intel Corporation Haswell-ULT Integrated Graphics Controller (rev 09) (prog-if 00 [VGA controller])
Subsystem: Lenovo Device 3800
Flags: bus master, fast devsel, latency 0, IRQ 44
Memory at b5000000 (64-bit, non-prefetchable) [size=4M]
Memory at c0000000 (64-bit, prefetchable) [size=256M]
I/O ports at 6000 [size=64]
Expansion ROM at <unassigned> [disabled]
Capabilities: [90] MSI: Enable+ Count=1/1 Maskable- 64bit-
Capabilities: [d0] Power Management version 2
Capabilities: [a4] PCI Advanced Features
Kernel driver in use: i915
Kernel modules: i915

Для этого в пункте 2 выше помимо строки HOOKS редактируем строку

MODULES="i915 ext4 aes_i586 sha256 sha512"

Здесь я добавил i915 — модуль для интегрированного видео от intel — Вы добавляете своё.

2) За загрузку нужных нам параметров консолей отвечает SystemD сервис systemd-vconsole-setup — он отрабатывает не в то время и основной косяк именно здесь!
Исправляем это:

sudo nano /usr/lib/systemd/system/systemd-vconsole-setup.service

находим и приводим к виду

DefaultDependencies=no
Conflicts=shutdown.target
After=sysinit.target
Before=shutdown.target
ConditionPathExists=/dev/tty0

Сохраняем. Перезагружаемся, проверяем ….
делаем правильно как написано здесь
Возможно наверное вообще ограничиться этим способом (П2) не подгружая модуль, т.к

sudo systemctl restart systemd-vconsole-setup

решает проблему из иксов и квадраты исчезнут…

зы. «Фреймбуфер дожен стартовать как можно раньше.» -в арче давно есть хук kms, который автоматом добавляет в инитрамфс, все открытые драйвера для видюх, для раннего старта.
А для пользователей карт nvidia, надо в инструкцию добавить:
Если шрифты не меняются при загрузке или меняются только временно, скорее всего, они были сброшены при инициализации графического драйвера и переключении консоли на кадровый буфер. По умолчанию все драйверы ядра в дереве загружаются раньше, пользователи NVIDIA должны сделать NVIDIA#Ранняя загрузка , чтобы загрузить графический драйвер до /etc/vconsole.conf его применения.
Для базовой функциональности достаточно просто добавить параметр ядра nvidia-drm.modeset=1. Если вы хотите, чтобы он загружался как можно раньше, или заметили проблемы с запуском (например, модуль ядра nvidia загружается после диспетчера отображения ), вы можете добавить nvidia, и в файл initramfs. nvidia_modesetnvidia_uvmnvidia_drm.

За это дополнение благодарю @Dimon_Arch

Комментарии: 3
4 дня
0

Квадраты лучше

автор
4 дня
0

согласен, красивее

1 час
0

Не надо править /usr/lib/systemd/system/systemd-vconsole-setup.service.
Когда в один прекрасный день сустемда обновится — этот файл обновится вместе с ней.
Корректно скопировать в /etc/systemd/system/ и редачить там. Потом повторно стартануть сервис, это обновит симлинки.
Либо сделать systemctl edit --full systemd-vconsole-setup.service.