Это старая версия документа.


Данная статья актуальна по крайней мере для тех, у кого нет поддержки русского в консоли в версиях *Ubuntu с 11.04 по 14.10, и особенно для пользователей Ubuntu Server этих же версий.

В 15.04 изменена система загрузки (sustemd) и описанное ниже средство не помогает.

В версиях 12.10 и 13.04 эта проблема вроде как была решена.
UPD: Русские фонты в сервере 14.04 также не работают без лекарства. Похоже отключенный FRAMEBUFFER - это хроническая болезнь серверной версии.

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

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

Но все-таки нет такого решения, которого не найти в Интернете. Причем нашел я его даже по русски 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 по умолчанию обделены таким «счастьем», как графическая заставка во время загрузки.

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

Решение для ubuntu 15.04 и выше

Проблему решили так:

sudo dpkg-reconfigure console-setup

UTF-8 → и выбрал Cyrillic - KOI8-R and KOI8-U → Fixed → далее как есть.

Потом прописываем в /etc/profile в конец setupcon –force

Это чтобы не было ошибки при заходе в иксы (отключаем проверку - в консоли мы или нет).

Всё. Результат изменения виден сразу.

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

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

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

Ну не работает ёлы палы

1)
даже там есть настройка фонтов консоли, но она не работает
3)
эта команда, кстати, тоже инициализирует процесс обновления initrd
4)
хотя настройки клавиатуры работают нормально и без манипуляций с фреймбуфером