Разработчики Ubuntu планируют заменить ConsoleKit на systemd-logind

На недавно прошедшем онлайн-саммите разработчиков Ubuntu были озвучены планы по замене ConsoleKit на systemd-logind.

Ныне уже прекративший свое существование, ConsoleKit представлял собой механизм для отслеживания сеансов работы пользователей. Основной целью его разработки было решение ряда проблем с разделением доступа, возникающих при одновременном запуске на одной системе нескольких графических сеансов. Конечной целью его разработки являлось обеспечение полноценной функциональности multi-seat — одновременной работы на одной системе нескольких независимых графических сеансов для различных пользователей, каждый из которых имел бы свой «seat» (комплект из устройств ввода, монитора и, опционально, USB-хаба для других устройств).

Поставленная цель была достигнута лишь частично — удалось обеспечить беспроблемную работу быстрого переключения пользователей, что дало возможность многим десктоп-окружениям добавить опцию «заблокировать текущий сеанс и начать новый» (полезную при необходимости временно пустить за компьютер другого пользователя, не завершая свой сеанс). Полноценный multi-seat обеспечить так и не удалось — причиной тому стали архитектурные ограничения, для обхода которых требовалось радикально перестроить схемы управления устройствами, сеансами и процессами. В результате, в последние годы разработка ConsoleKit находилась в глубокой стагнации.

Упомянутые архитектурные проблемы были успешно решены несколько лет спустя усилиями разработчиков systemd и udev. В частности, systemd предоставил основанный на контрольных группах (cgroups) механизм отслеживания процессов, а также добавил PAM-модуль для корректной регистрации сеансов. В то же время, в udev появились средства распределения устройств по seat’ам. Логическим продолжением данной линии стало появление systemd-logind — компонента, который, основываясь на этой функциональности, предоставляет не только все ранее существовавшие возможности ConsoleKit, но и полноценную поддержку multi-seat.

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

Ранее, разработчики Ubuntu уже начали интеграцию в Upstart ряда компонентов systemd, в частности, hostnamed, localed и timedated. Интересно, что уже тогда разработчик systemd Леннарт Поттеринг верно предсказал следующий логический шаг — интеграцию logind, и описал проблемы, с которыми столкнутся разработчики Ubuntu. В частности, logind использует для отслеживания процессов иерархию контрольных групп, создаваемую systemd. Таким образом, разработчикам Ubuntu необходимо реализовать в Upstart практически с нуля одну из наиболее сложных возможностей systemd — управление службами на основе контрольных групп (при этом, вероятно, придется практически полностью отказаться от используемых сейчас в Upstart механизмов управления процессами). Кроме того, logind обращается к systemd через D-Bus API, например, для автоматического запуска getty при переключении на виртуальную консоль, и для завершения работы системы — такой интерфейс тоже необходимо предоставить.

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

©  OpenNet