Расширить сервис Dbus
Большая цель:
Написание пакетного менеджера пользователей, предназначенного для школьной среды.
Эта проблема
Я хочу написать менеджера пользователей, который использует графический интерфейс для добавления, управления и удаления пользователей в классах. Программа, над которой я работаю, это ltsp-manager.
До настоящего времени все управление пользователями осуществлялось с помощью команд bash. Из скрипта Python. Это означает, что весь графический интерфейс должен работать от имени пользователя root, и все сделано вручную.
Цель
Создайте службу Dbus, которая обрабатывает все управление учетными записями и позволяет графическому интерфейсу работать как обычный пользователь, время от времени требующий пароль.
Я оглянулся и обнаружил, что в org.freedesktop.Accounts
уже есть служба, выполняющая множество функций, которые я хочу сделать. Однако, это также испытывает недостаток в некоторых. Что-то, чего полностью не хватает, - это управление группами.
Какой хороший способ использовать org.freedesktop.Accounts
функциональность и добавить некоторые дополнительные функции / методы?
Мысли пока
Вот что мне пришло в голову:
- просто переделывать все - много дублирующихся работ.
- скопируйте интерфейсы и напишите функции, которые вызывают исходные
- написать сервис, который реализует только дополнительные функции, не касаясь оригинальных. Затем клиент будет использовать исходный сервис и только что написанный.
Все мои тестовые эксперименты сделаны с python3
а также pydbus
который кажется лучшим выбором среди многих.
Я никогда не писал реальный сервис dbus - хотя эксперименты показывают некоторые результаты в d-feet
, Этот вопрос на самом деле не является тем, что мне нужно, чтобы напечатать тип вопроса, а скорее вопросом наилучшей практики.
1 ответ
Лучшим долгосрочным ответом было бы исправить восходящее обслуживание аккаунтов для поддержки групп. Уже есть работа для этого; ему просто нужно, чтобы кто-то взял его и закончил. accountservice - проект, который обеспечивает каноническую реализацию org.freedesktop.Accounts
,
Другие подходы плохие, потому что:
просто переделывать все - много дублирующихся работ.
Как вы говорите, это много дублируемой работы, и тогда вам придется поддерживать все это.
скопируйте интерфейсы и напишите функции, которые вызывают исходные
Это означает, что вы должны всегда быть в курсе изменений и дополнений в обслуживании учетных записей.
написать сервис, который реализует только дополнительные функции, не касаясь оригинальных. Затем клиент будет использовать исходный сервис и только что написанный.
Это не связано с какими-либо дополнительными проблемами обслуживания, но означает, что ваш сервис не будет хорошо интегрирован с обслуживанием учетных записей. Например, могут быть условия состязания между обновлениями ваших объектов D-Bus и обновлениями объектов обслуживания учетных записей. Вы не сможете разделить бремя обслуживания кода групп со многими пользователями аккаунта.