openSUSE 12.3 RC1: ещё раз о кирилизации консоли

Мне казалось, что игрищами в консоли я на ближайшее время закрыл тему для ввода/вывода кириллицы в виртуальных терминалах. Однако это только казалось, и два события заставили меня вернуться к ней.

Во-первых, обновляя на своей Ноутбучке openSUSE 12.3 с Milestone 2 до RC1, я умудрился развалить систему до невосстановимого состояния. Правда, потом оказалось, что само по себе обновление было ни при чём, но это отдельная история. А в тот момент оказалось, что ряд настроек пришлось выполнять сначала — и в том числе обеспечение вывода и ввода кириллицы в текстовой консоли.

А во-вторых, обсуждение данной темы на форуме openSUSE и на блогофоруме Open-SUSE.RU показало, что с точки зрения высокой науки systemd’ологии я всё делал неправильно (хотя и с почти удовлетворительным результатом). Почему и решил на этот раз действовать так, как рекомендовали резонные люди, не одну systemd’ову собаку съевшие. О результатах чего и хочу рассказать.

Забегая вперёд, должен заметить, что и следуя чисто systemd’ологическим путём, указанным Великим Кормчим Леннартом Поттерингом, я добился результата ещё менее удовлетворительного. Однако при этом удалось скорректировать унаследованный от проклятого прошлого путь прихлёбно-плюралистический, приблизив его итоги к недостижимому пока идеалу.

Для начала — о том, почему путь, описанный здесь, дал результат лишь условно удовлетворительный. Конечно, после удаления /lib/systemd/system/kbd.service (символической ссылки на /dev/null) и установке через YaST желаемого экранного шрифта и раскладки клавиатуры кириллица в консоли начинала вводиться и выводиться правильно. Но — до первого крупного обновления системы: оказалось что эта зловредная ссылка обладает способностью к регенерации, и её опять приходилось удалять вручную.

Как решилась эта проблема — расскажу чуть позже. А пока перейду к описанию действий на systemd’ологическом пути.

В обсуждении на форуме openSUSE Lazy_Kent обратил внимание общественности на то, что при использовании systemd сервис kbd больше не нужен — его роль в этом менеджере инициализации исполняет сервис systemd-vconsole-setup. И, соответственно, вместо файлов /etc/sysconfig/console и /etc/sysconfig/keyboard в дело вступает конфиг /etc/vconsole.conf. А уничтожать /lib/systemd/system/kbd.service более не нужно.

Следствие показало, что ни в 12.2, ни в 12.3 (как в Milestone 2, так и в RC 1) такого файла нет. Однако нет и проблемы создать его руками, внеся всего две строки:

KEYMAP=keymap_name
FONT=font_name

где keymap_name и font_name — имена файлов раскладки клавиатуры и экранного шрифта, которые берутся из каталогов /usr/share/kbd/keymaps/i386/qwerty/ и /usr/share/kbd/consolefonts/, соответственно. Например, я задал для этих строк такие значения:

KEYMAP=rutype-legacy_cplk-UTF-8
FONT=ter-v32b

Первое — имя файла моей самодельной раскладки, соответствующей Иксовой Typewriter Legacy (подробности здесь), второе же — имя файла шрифта из комплекта Terminus.

Обращаю внимание, что суффиксы имён (map.gz и psfu.gz, соответственно) обязательно должны быть опущены — в отличие от старых конфигов keyboard и console, где допускается оба варианта этих значений.

После этого я дал команду

# systemctl restart systemd-vconsole-setup.service

И получил сообщение об ошибке. Природа её обнаружилась тут же: команда

# systemctl status systemd-vconsole-setup.service

выявила с моей самодельной раскладке какую-то синтаксическую ошибку — хотя, повторяю, с kbd.service мой кеймап работал прекрасно.

Что ж, на безошибочность я не претендую — и потому спокойно заменил значение KEYMAP на стандартное ruwin_cplk-UTF-8. После этого в статусе сервиса systemd-vconsole-setup никаких ошибок не обнаружилось, а его перезапуск привёл к желаемому изменению раскладки и экранного шрифта, но…

…но только в текущей виртуальной консоли — во всех остальных ситуация осталась без изменений. Да и здесь радоваться жизни можно было только до первой перезагрузки — после рестарта системы всё возвращалось на круги своя.

О причинах обоих явлений можно было догадаться. Первое, видимо, можно попробовать ликвидировать сочинением скрипта, перенаправляющего карту соответствия (так называемый mapscreen) на все виртуальные консоли. Лет 15 назад это было подробно описано Алексеем Выскубовым в приложении к «серой книжке» Патрика Фолькердинга сотоварищи. И когда-то любой действующий линуксоид мог выполнить эту операцию также легко, как справный солдат разбирает автомат Калашникова. Но за последние 7-8 лет мне, например, проделывать её не приходилось ни разу.

Так что в отношении русификации консоли прогрессивнейшая systemd отбросила нас лет на 10 назад. Пустячок, конечно — кто нынче делает в консоли что-то, кроме ликвидации последствий краха Иксов? Но пустячок неприятный, потому что заставляет ожидать последствий более серьёзных.

Что же до исчезновения кириллизации консоли после перезапуска системы — можно предположить, что она связана с пресловутым распараллеливанием активизации стартовых сервисов. Смутно припоминаю, что жалобы на это я видел на каком-то из форумов, где было предложено и решение этой проблемы.

Однако заниматься этим мне было откровенно лень — и я вернулся к идеологически неправильной схеме кириллизации консоли. Попутно решив задачу с регенерацией ссылки kbd.service -> /dev/null при обновлениях. Она всего-то и требовала вместо лобового удаления этого симлинка выполнения команды

# systemctl unmask kbd.service

Которая, в сущности, делает то же самое — но сохраняет свой результат навеки. По крайней мере, моя система пережила уже пару-тройку обновлений без регенерации пресловутого симлинка.

К проблеме же правоверной systemd’ологической кириллизации консоли я вернусь, когда и если (если и когда) до этого дойдут руки: ведь нельзя исключить, что некошерный способ со временем работать перестанет, и к тому моменту неплохо бы иметь готовое решение, хотя бы в духе прошлого тысячелетия.


К содержанию