LightDM — desktop manager на Си, позволяющий пользователям запускать графическое окружение рабочего стола (desktop environment) в операционных системах GNU/Linux.
Архитектура LightDM модульная:
- есть демон (daemon), отвечающий за авторизацию и запуск окружения рабочего стола;
- есть greeter — графическое приложение с окном приветствия и формой авторизации пользователя GNU/Linux.
Greeter`ов существует много, но у меня задача написать на Python свой greeter, взаимодействующий с демоном.
Документация описывающая API демона LightDM не очень хороша и напоминает скупой справочник по модулям и функциям с не до конца понятным примером простого greeter`а на языке Си (см.
тут в разделе Description).
Так же
в исходниках LightDM на GitHub я нашёл пример
тестового гритера на Python, написанный в функциональном стиле и без какой-либо документации или комментариев.
Помимо этого, на GitHub поиск репозиториев по запросу "LightDM language:python" дал другие примеры гритеров на Python (в основном, заброшенные):
Тестовый пример из исходников LightDM, в сравнении с другими примерами, выглядит неоправданно переусложнённым. Там реализована вся функциональность, явно запрашиваются переменные окружения Linux и зачем-то используется unix сокет, который как-то видимо надо указывать и для демона.
Кажется во всех примерах на Python используются сигналы GObject, которые дёргают методы API, а за авторизацию и открытие сессии отвечают сразу несколько методов API.
Но и по исходникам сторонних greeter`ов, я не до конца понимаю:
- Как происходит авторизация и валидация пароля пользователя, а так же открытие сессии? Особенно вопросы вызывает валидация пароля, который вроде обозначается словом prompt вместо password. При этом, часто фигурирует метод show_prompt, что странно для валидации.
- Можно ли тестировать взаимодействие greeter`а с демоном от обычного пользователя? Или надо после каждого изменения править системные конфиги и перезагружать машину?