MyTetra Share
Делитесь знаниями!
Поддержка русского языка в консоли
Время создания: 06.08.2018 12:08
Текстовые метки: linux ubuntu console cyrillic
Раздел: Ubuntu
Запись: Velonski/mytetra-database/master/base/1488264331m5k1njaan6/text.html на raw.githubusercontent.com

Почему в консоли квадратики вместо русских букв?

Многие замечали, что из версии в версию в Ubuntu у некоторых слетают русские фонты в консоли (куда можно попасть нажав CTRL+ALT+F1 - F6, а CTRL+ALT+F7 возвращает в графическую среду). Озаботившись причинами почему это происходит я (Sly_tom_cat ) облазил кучу мест в поисках решения. Залез и в initrd и смотрел в скрипты upstart и в UDEV… что ни правил - не помогает. Особо порадовал комментарий разработчиков в одном из скриптов Udev1 ). Cуть там примерно такова: «надо бы делать как-то так, но мы попробовали - у нас не вышло. Так что, делаем как получится, а если юзерам нужны нормальные фонты - пускай выполнят setupcon и все будет Ok»

Но все-таки нет такого решения, которого не найти в Интернете. Причем нашел я его даже по русски 2 )

Как же правильно лечить больного?

Оказывается, всего навсего, нужно включить поддержку фреймбуфера на этапе инициализации ядра. Это в свою очередь разрешит выполнение нужных скриптов, которые загрузят фонты на самом раннем этапе инициализации ядра.
Для этого:
1. в любом текстовом редакторе с правами рута нужно в файл /etc/initramfs-tools/initramfs.conf добавить строчку FRAMEBUFFER=Y. Это также можно сделать выполнив следующие команды:

sudo -i

echo 'FRAMEBUFFER=Y' >> /etc/initramfs-tools/initramfs.conf

exit

2. Обновить образ рамдиска периода инициализации ядра (initrd):

sudo update-initramfs -u

Поле этих манипуляций наконец начнут работать настройки сделанные командой3 ):

sudo dpkg-reconfigure console-setup

Кириллическими фонтами будет показываться все с самого начала - т.е. даже запрос на проверку дисков (возникающий в процессе инициализации ядра) будет выводится кириллицей, а не квадратами.

Возможно потребуется так же настроить и клавиатуру (раскладки, переключение раскладок и compose-key)
4 ):

sudo dpkg-reconfigure keyboard-configuration

Кому интересно - "откуда ноги растут"...

Покопавшись глубже можно обнаружить следующее:
В initrd/scripts/init-top/ лежат скрипты выполняющиеся в самом начале процесса инициализации ядра. И там мы видим все, что могло бы потребоваться для поддержки «правильных» фонтов

scripts/init-top/console_setup

scripts/init-top/keymap

scripts/init-top/blacklist

scripts/init-top/udev

scripts/init-top/framebuffer

scripts/init-top/ORDER

scripts/init-top/plymouth

scripts/init-top/all_generic_ide

Но, если заглянуть в файлы console_setup, keymap и framebuffer то в самом начале скрипта мы увидим такую строчку:

OPTION=FRAMEBUFFER

А покопавшись в скриптах инициализации можно понять, что OPTION обрабатывается так, что если значение переменной (что ей присвоено) не задано или не Y, то выполнение самого скрипта пропускается. Т.е. в нашем случае, если FRAMEBUFFER не равно Y, то ни один из скриптов, отвечающих за поддержку фонтов и раскладок клавиатуры, попросту не будут выполнятся в процессе инициализации ядра.
Но без FRAMEBUFFER не возможно загрузить шрифты с поддержкой национальных символов!
Примечательно то, что настройки раскладок клавиатуры все-таки будут применены в процессе загрузки ОС (уже после инициализации ядра). За это отвечает скрипт console-setup системы инициализации upstart, а вот консольные фонты скрипты upstart не настраивают.

Однако, это совсем не объясняет почему подобная проблема возникает не у всех. И как оказывается - она вылезает у любителей оптимизации системы, да еще и у пользователей серверной версии Ubuntu…

Что можно увидеть в любой инструкции по повышению скорости загрузки ОС?

Правильно - «уберите заставку при загрузке»: в файле
/etc/default/grub в переменной GRUB_CMDLINE_LINUX_DEFAULT значение splash замените на nosplash или просто уберите) и выполните sudo update-grub. Ну, а пользователи серверной версии Ubuntu по умолчанию обделены таким «счастьем», как графическая заставка во время загрузки.

Так вот, оказывается, разработчики решили, что фреймбуфер нужен для рисования заставки и … и только для этого. Больше (оказывается) он никому, ни зачем, не нужен. Поэтому, если заставку рисуем - то фреймбуфер разрешаем (а то как же - без него же не нарисовать заставку), а если заставку не рисуем, то и фреймбуфер включать незачем, не включаем…. Нет, позже, после инициализации ядра, фреймбуфер все-таки где-то активируется, но поезд уже ушел - фонты на этапе иницализации ядра не загрузились…. «а кому надо - те пусть вызывают setupcon …»

Решение для ubuntu 15.10 и более поздних

В Ubuntu 15.10 имеется неисправленный баг с настройкой локали https://bugs.launchpad.net/ubuntu/+source/console-setup/+bug/1511975. Поэтому для настройки русского языка необходимо проделать следующее 1.

sudo dpkg-reconfigure console-setup

(настройки в файле /etc/default/console-setup)

/dev/tty[1-6]

UTF-8

Combined - Latin; Slavic and non-Slavic cyrillic

Let system select suitable font

8x16

2.

sudo dpkg-reconfigure keyboard-configuration

(настройки в файле /etc/default/console-setup)

Generic 105-key (Intl) (выберите вашу клавиатуру)

Russian

Russian (выберите вашу раскладку)

Control+Shift (выберите шорткат для смены раскладки)

No temporary switch

The default for the keyboard layout

No compose key

3.

sudo vim /lib/systemd/system/console-setup.service

Заменить последнюю строку

ExecStart=/usr/bin/loadkeys /etc/console-setup/cached.kmap.gz

на

ExecStart=/bin/setupcon

4.

sudo reboot

Вредные советы

Поиск в сети порой дает много костыльных советов на данную тему. Особенно часто встречаются два из них:
1. костыль из костылей: «Прописать setupcon в /etc/rc.local» - мало того что это костыль, да еще и не помогает иногда :(
2. совсем эпический по своей дебильности костыль - персональный пакет для русского языка в консоли - console-cyrillic !!! …вызывает полное недоумение идея - «под каждый язык на свете создавать персональный пакет для консоли», когда по дефолту в UTF8 кодировке и основных консольных шрифтах есть все, что нужно для поддержки практически любого языка (по крайней мере европейского).

Если вам попадаются такие советы, не поленитесь - объясните людям их глубокое заблуждение и отправьте на эту страницу.

HOWTO , Tips , терминал , Консоль

1 ) даже там есть настройка фонтов консоли, но она не работает

2 ) Статья с решением

3 ) эта команда, кстати, тоже инициализирует процесс обновления initrd

4 ) хотя настройки клавиатуры работают нормально и без манипуляций с фреймбуфером

 
MyTetra Share v.0.59
Яндекс индекс цитирования