В systemd предложено включить средства для замены консоли, agetty и /bin/login

Дэвид Херрманн (David Herrmann), автор проекта kmscon (реализация консоли в пространстве пользователя) опубликовал серию патчей, позволяющих обеспечить работу окружения на базе systemd в системах с ядром, собранным без поддержки виртуальных терминалов (CONFIG_VT=n). Из дальнейших планов отмечена интеграция в системный менеджер systemd компонентов с реализацией системной консоли, загрузочной заставки и приглашения входа в систему. В частности, в будущем предлагается перейти к конфигурации без встроенной в ядро поддержки виртуальных терминалов (CONFIG_VT=n). Организовать работу системы в режиме CONFIG_VT=n можно уже сейчас, например, с использованием kmscon в качестве консоли и systemd-logind для переключения сессий, требуются лишь незначительные доработки и реализация компонентов для работы в случае невозможности сразу перейти в полноценный графический интерфейс.

Для воплощения идеи в жизнь предложена специальная библиотека sd-gfx, которая унифицирует поддержку всех операций с графикой, экраном и шрифтами, используемых при инициализации и запуске системы. По сути, библиотека sd-gfx продолжает развитие kmscon и заменяет собой код для работы с виртуальными терминалами, ранее реализованный на уровне ядра. На база данной библиотеки планируется подготовить несколько новых компонентов systemd:

systemd-consoled — эмулятор терминала для замены штатных консолей (kernel-console, linux-console), предоставляемых при сборке ядра с опцией CONFIG_VT=y; systemd-splashd — реализаций бесшовной графической заставки, отображаемой в процессе загрузки. Отмечается, что splashd не претендует для замены Plymouth и ограничится только интерфейсом для ввода пароля для шифрованного корневого раздела в условиях сборки ядра без поддержки виртуальных терминалов; systemd-welcomed — экран приглашения входа в систему, заменяющий собой agetty и /bin/login. После входа пользователя будет задействован systemd-consoled. systemd-er — урезанная версия консоли systemd-consoled для экстренных ситуаций, таких как необходимость выполнения операций при выявлении сбоя на ранних этапах загрузки. В systemd-er отсутствует поддержка управления пользовательскими сеансами, разделения привилегий и т.п. В качестве основных проблем с поддержкой виртуальных терминалов на уровне ядра отмечается необходимость в поддержании дополнительных компонентов в ядре, усложняющих реализацию, дублирующих подсистемы пользовательского уровня, негативно сказывающихся на безопасности и надёжности (ошибка в коде терминала может привести к уязвимостям и крахам на уровне ядра). В частности, для обеспечения работы текстовых консолей в ядре требуется поддержка отдельной прослойки для управления клавиатурой и обработки ввода (упрощённый аналог XKB), жестко заданные фильтры для подсистемы hotplug, средства для выполнения графических операций, код для отображения шрифтов и обработки курсора, код эмуляции терминала и т.п.

Из доводов в пользу поддержания кода работы с терминалом в ядре упоминаются поддержка отладки на начальном этапе загрузки, вывод отчётов о крахах и отладка через kdb. В настоящее время актуальность данных доводов поставлена под вопрос, так как первые две задачи успешно могут быть решены через модули ядора fblog/drmlog, а для решения третьей задачи можно использовать kgdb или специально собрать ядро в режиме «CONFIG_VT=y».

©  OpenNet