debian квадратики в консоли

После того, как у меня пару раз при загрузке грохнулась последняя версия Fedora, я решил пока перейти на Ubuntu, так как заниматься решением возникающих проблем сейчас времени нет ― слишком много работы, которую я должен завершить до выхода в отпуск. Unity на Gnome 3, как оказалось, меняется очень просто: путем установки Gnome 3 и удаления Unity+Unity-2D (в предшествующих версиях Ubuntu такие манипуляции приводили к некоторой нестабильности системы). Все бы хорошо, да возникла одна проблема.

Большинство операций я привык делать через консоль, которая вызывается нажатием ALT+CTRL+F(1/6). В Ubuntu 12.04 же это оказалось не очень-то удобно из-за того, что в консоли по какой-то причине не отображалось ничего, кроме латинских букв и спецсимволов, все же остальное превращалось в белые квадратики. «Или шрифт не поддерживает кириллические символы, или проблемы с кодировкой», ― подумал я.

В Интернете часто встречаются сообщения о такой проблеме. Некоторым помогала установка пакета console-cyrillic, однако в моем случае после этого вообще ничего не произошло. Помогает только исполнение следующей команды:

В вики русского сообщества Ubuntu, как оказалось, достаточно много всего интересного. Среди этого интересного нашлось и решение моей ужасной проблемы :

UPD: Квадратики во время загрузки таки пропали после того, как я повторно запустил dpkg-reconfigure console-setup, так что проблема, можно сказать, полностью решена.

Содержание

В 15.10 изменена система загрузки (sustemd) и описанное ниже средство не помогает. Смотрите раздел Решение для ubuntu 15.10 и более поздних.

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

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

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

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

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

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

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

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

Но, если заглянуть в файлы console_setup, keymap и 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 имеется неисправленный баг с настройкой локали https://bugs.launchpad.net/ubuntu/+source/console-setup/+bug/1511975. Поэтому для настройки русского языка необходимо проделать следующее 1.

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

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

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

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

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

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

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

Пара примеров из того же Wiki:

А теперь перейдём к решению.

Для редактирования отображения симвлов в консоли существует специальный конфигуратор который запускается такой командой:

Далее все действия производятся в консольном графическом конфигураторе простым выбором необходимых пунктов с помощью кнопок вверх, вниз и “Enter”.

Выбираем кодировку — UTF-8 :

Выбираем таблицу символов — Кирилица — славянские языки (5 пункт):

Выбираем шрифт — Fixed или TerminusBold :

Выбираем размер шрифта — 8×16 :

Для того, чтобы наша настройка не слетела после перезагрузки нужно проделать следующее:

В открывшемся текстовом файле находим exit 0 и над этой строкой пишем:

Оцените статью