Кириллица в консоли linux

Поддержка русского языка в консоли

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

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

UPD: Русские фонты в сервере 14.04 также не работают без лекарства. Похоже отключенный FRAMEBUFFER — это хроническая болезнь серверной версии.

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

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

Читайте также:  Linux kernel git repository

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

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

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

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

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

Читайте также:  Creating make file in linux

Решение для 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/tty1 UTF-8 Combined - Latin; Slavic and non-Slavic cyrillic Let system select suitable font 8x16
sudo dpkg-reconfigure keyboard-configuration

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

Generic 105-key (Intl) (выберите вашу клавиатуру) Russian Russian (выберите вашу раскладку) Control+Shift (выберите шорткат для смены раскладки) No temporary switch The default for the keyboard layout No compose key
sudo nano /lib/systemd/system/console-setup.service

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

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

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

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

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

Источник

Как сменить locale в Debian или пишем кириллицей в консоли linux

Я знаю что кириллица в логах Linux – это самый страшный грех для айтишника, но иногда это просто необходимость. Одна из таких необходимостей возникает при создании централизованного хранения log-файлов различных операционных систем. Microsoft всегда в своих log`ах применяет кириллицу и поэтому если мы хотим получать log-файлы и от Win-серверов, то стоит смириться, что в log`ах будет кирилица.

Читайте также:  Linux undefined reference to symbol

Для того, чтобы эти логи нормально отображались нам и нужно явно указать locale в Debian, Ubuntu или какой Linux-дистрибутив Вы используете.

Проблемы отображения кириллических символов в Linux не существует. Есть проблема у русской версии Windows. Весь мир и Linux в том числе, работает в кодировке UTF -8, когда русская версия Microsoft использует CP1251. Такая ситуация сложилось исторически благодаря компании «Парус», которая взяла на себя обязательства по локализации всех операционных систем Windows. Выбрали они почему-то кодировку CP1251, которая применяется до сих пор. Использование этой «неправильной» кодировки в наши дни обусловлено сохранением совместимости всех версий ОС.

Чтобы добавить кириллицу, чтобы Linux сервер нормально отображал русские буквы, нужно объяснить ему, что необходимо работать в той же кодировке, что и Windows.

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

sudo apt-get install locales

Посмотреть установленную locale linux можно командой:

Для ручного указания кодировке в Linux Mint, Debian или ubuntu нужно отредактировать конфигурационный файл /etc/locale.gen :

Команду sudo не нужна, если Вы зашли как суперпользователь. Это относится к Linux Mint и Ubuntu, так как Debian ничего не знает о команде sudo.

В этом файле необходимо найти строчку и расскомментировать с той locale, которая Вам нужна. Для добавления кириллицы нужно раскомментировать строчки с UTF-8 или CP1251 .

    если хотим указать, чтобы ОС работала в UTF -8, раскомментирум:

Стоит обратить внимание, что первые 2 символа (в нашем примере это ru) говорят нам о языке локализации (кириллица).

После этого переопределяем настройки locales командой:

Команда locale-gen позволяет запустить скрипт /etc/locale.gen и перечитывает все кодировки для консоли.

Чтобы увидеть кириллицу в консоли Linux, остается только перелогиниться.

Комментарии

Попробую применить ваши методы, не знаю, что из этого выйдет, но просмотрим.

Создание Windows 7

Чтобы получать уведомления о всех исторических IT-событиях —

Если Вы используете материал моего блога, то будьте добры поставьте ссылку.

Источник

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