Алексей Федорчук
Кириллизация консоли (или, если смотреть на вопросы ширше, настройка консольных экранных шрифтов вообще) — дежурная развлекуха перед выходом каждого очередного релиза Ubuntu со времён её systemd’изации. Правда, подозреваю, что и в других дистрибутивах, столь же затронутых прогрессом, ситуация аналогична, но о других сейчас речи не будет.
Не так давно, во время выхода релиза 15.10, казалось, что появилось окончательное решение консольного вопроса, описанное, например, здесь. Оно сводилось к замене в файле /lib/systemd/system/systemd-vconsole-setup.service
строки:
ExecStart=/bin/true
на
ExecStart=/bin/setupcon
Однако из комментариев к указанной заметке почти сразу проявилось «Недолгое счастье Френсиса Маккомбера». Во-первых, файл systemd-vconsole-setup.service
по заданному адресу мог отсутствовать как класс. Что, впрочем, могло решаться его созданием и вписыванием в него приведённой выше строки.
Но могло — и не решаться. В этом случае какое-то время помогало решение, найденное Eronex’ом: вписывание всё той же строки в файл /lib/systemd/system/console-setup.services
. Однако, по сообщению Татьяны Ивановой aka Vita на форуме Matuntu, в тестовых сборках *buntu, предшествующих выходу второй бета-версии релиза 16.04, и этот метода перестал работать.
Занявшись тренировками по сборке своей Cintu на базе пре-релизных сборок Xenial’а, я не мог пройти мимо этого вопроса. Поскольку «десктопизацию» базовой системы (то есть установку Иксов и Cinnamon’а) начинал всегда с настройки комфортной среды в консольном режиме. И дело тут не только в его кириллизации: в конце концов, на время отладки системы можно дать команду
# export LANG=C.UTF-8
чтобы вывод консольных программ был хотя бы английско-читаемым. Но увы — не различаю я буковки консольного шрифта по умолчанию, да и сам шрифт, ИМХО, отменно скверен.
Даю установку, как говаривал некогда известный народный «целитель»: сразу после развёртывания базового Xenial’а с mini.iso
с русским языком (подробнее здесь), выбранным на первом шаге инсталляции, буковки в консоли очень мелкие, и символы кириллицы (например, в выводе команды date
) отображаются в виде квадратиков. Исправление этого осуществляется с помощью команды
# dpkg-reconfigure console-setup
и выполнения предписанных ею действий (даю подробности). После чего, как пел Тимур наш, Шаов,
Мир обретает образы и краски,
Глядеть в консолю можно без опаски.
Однако прыгать в половецкой пляске рано — после первой же перезагрузки системы консольный шрифт возвращается в исходное, то есть не русское и плохо читаемое, состояние. Единоразово это исправляется запуском команды
# setupcon -f
Но опять-таки — до ближайшего рестарта. Так что задача сводится к тому, чтобы обеспечить запуск указанной команды в ходе загрузки системы. Как — возможно несколько вариантов, о которых я скажу чуть позже. Потому что в итоге я вернулся к редактированию файла /lib/systemd/system/console-setup.services
. В свежеустановленной системе он у меня содержал такую строку:
ExecStart=/usr/bin/loadkeys /etc/console-setup/cached.kmap.gz
Можно предполагать, что именно она и заставляла возвращаться к первоначально определённому шрифту. Так что я удалил её, заменив на
ExecStart=/bin/setupcon -f
Это обеспечило вывод настроенных через dpkg-reconfigure
шрифтов на всех виртуальных терминалах. Хотя не уверен, что опция -f
тут необходима, но проверять без неё мне уже было лениво.
Также у меня нет уверенности, что указанный способ будет работать и впредь, при последующих обновлениях пакета systemd
(а именно они, как я догадываюсь, и создают нам все эти подлянки). Поэтому привожу несколько паллиативных костылей, которые я надыбал в ходе своих экспериментов.
Во-первых, если устанавливается чисто консольная базовая Ubuntu или она же с каким либо оконным менеджером, запускаемым через startx
, можно отредактировать лучший костыль всех времён и народов — файл /etc/rc.local
. По умолчанию он пуст, и в него достаточно вписать строку
setupсon -f
Однако при авторизации через дисплейный менеджер (MDM — точно, остальные — предположительно) этот способ не сработает. И тогда можно запускать setupcon -f
из профильного файла login shell пользователя. То есть через ~/.profile
или ~/.zshenv
— для Bash или Zsh, соответственно. Правда, в этом случае умолчальный шрифт заменится только после авторизации пользователя — но, кажется, способа работать в консоли без неё ещё не придумали.
Если пользователей в данной системе более одного, редактировать конфиги для каждого из них не обязательно: строку
setupсon -f
можно вписать в /etc/profile
или /etc/zsh/zshenv
. Обращаю внимание, что во всех случаях редактировать нужно профильные файлы именно для login shell, а не для интерактивной оболочки (то есть не ~/.bashrc
, /zshrc
, /etc/bash.bashrc
или /etc/zsh/zshrc
). Иначе в терминальном окне, запущенном в Иксах, будет появляться раздражающее сообщение о том, что это не консоль.
В заключение скажу, что в ходе описанных экспериментов я постоянно вспоминал стих, приписываемый нашему великому поэту Владимир Владимировичу (Маяковскому):
Товарищ онанист, радуйся!
Машина дрочки налажена!
К твоим услугам любая дыра,
Любая замочная скважина!
Похоже, что создатели systemd
обеспечили нам именно такую универсальную машину, к которой придётся обращаться при кириллизации консоли в каждом новом релизе. То есть для очередного решения задачи, казалось бы, решённой раз и навсегда лет 12 назад.
К сожалению, ни один из предложенных костылей мне не помог избавиться от квадратиков :(
На Debian Jessie помогло добавление setupсon -f в /etc/profile
Решение найдено на русскоязычном сайте поддержки Ubuntu — http://help.ubuntu.ru/wiki/russian_font_in_console
>Похоже, что создатели systemd обеспечили нам именно такую универсальную машину…
воистину мазохисты! Поттерингу бы накалякали благодарственное письмо что ли…
Каюсь, поспешила с выводами о найденном решении. После перезагрузки системы квадратики в консоль вернулись.
Vita, и я как раз только что завершил проверку того, что рассказывается в статье. Результат также отрицательный. Через часок размещу заметку в продолжение темы.
Найденное на хабре решение в моём сообщении на форуме — http://forum.matuntu.org/index.php?topic=388.msg3085#msg3085
Проверено в нескольких вариантах дистрибутивов на разных компьютерах.
После очередного обновления системы всё возвращается в прежнее состояние. Увы…
Работает, спасибо. Но более грамотно, мне кажется, не редактировать напрямую /lib/systemd/system/console-setup.service, а сделать «как положено»:
systemctl edit console-setup.service
Это создаст файл override.conf в /etc/systemd/system/console-setup.service.d/
По идее после этого апдейты пакетов не должны «сносить» изменения.
dad, да, согласен, спасибо за подсказку
Но это — если заработает. Как показывает практика, такое не всегда бывает.
Так что правильней всего было бы — запихать в апстрим патченный пакет.
Но это, увы, не от нас зависит…