From eceb632474c523a7cf30ba34a5615e9f1e8acbf5 Mon Sep 17 00:00:00 2001 From: fuleyi Date: Fri, 12 Dec 2025 17:04:56 +0800 Subject: [PATCH] feat: add deepin-daemon service group support MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Added support for deepin-daemon service group with specific user context 1. Created systemd drop-in configuration for deepin-daemon group to run as deepin-daemon user 2. Modified application initialization logic to detect deepin-daemon user and use QCoreApplication 3. Updated service group list to include deepin-daemon group 4. Added comments in service template explaining the deepin-daemon specific configuration Log: Added deepin-daemon service group support with dedicated user context Influence: 1. Test deepin-daemon service group startup and operation 2. Verify that services in deepin-daemon group run under deepin-daemon user 3. Check systemd service status and user context configuration 4. Test application behavior when running as deepin-daemon user vs regular user 5. Verify service group serialization order including new deepin-daemon group feat: 新增 deepin-daemon 服务组支持 添加对 deepin-daemon 服务组的支持,包含特定用户上下文配置 1. 创建 systemd drop-in 配置,使 deepin-daemon 组以 deepin-daemon 用户身 份运行 2. 修改应用初始化逻辑,检测 deepin-daemon 用户并使用 QCoreApplication 3. 更新服务组列表以包含 deepin-daemon 组 4. 在服务模板中添加注释说明 deepin-daemon 特定配置 Log: 新增 deepin-daemon 服务组支持,使用专用用户上下文 Influence: 1. 测试 deepin-daemon 服务组的启动和运行 2. 验证 deepin-daemon 组中的服务是否以 deepin-daemon 用户身份运行 3. 检查 systemd 服务状态和用户上下文配置 4. 测试应用在以 deepin-daemon 用户运行时与普通用户运行时的行为差异 5. 验证服务组序列化顺序,包括新的 deepin-daemon 组 --- misc/CMakeLists.txt | 7 +++++++ misc/deepin-service-group@.service.in | 5 +++++ .../override.conf.in | 5 +++++ src/deepin-service-manager/main.cpp | 15 ++++++++++++--- src/deepin-service-manager/servicemanager.cpp | 2 +- 5 files changed, 30 insertions(+), 4 deletions(-) create mode 100644 misc/deepin-service-group@deepin-daemon.service.d/override.conf.in diff --git a/misc/CMakeLists.txt b/misc/CMakeLists.txt index 107a080..3409599 100644 --- a/misc/CMakeLists.txt +++ b/misc/CMakeLists.txt @@ -33,6 +33,13 @@ install(FILES ${CMAKE_CURRENT_BINARY_DIR}/deepin-service-group@.service.system RENAME deepin-service-group@.service ) +# Install drop-in configuration for deepin-daemon group +configure_file(deepin-service-group@deepin-daemon.service.d/override.conf.in + deepin-service-group@deepin-daemon.service.d/override.conf @ONLY) +install(FILES ${CMAKE_CURRENT_BINARY_DIR}/deepin-service-group@deepin-daemon.service.d/override.conf + DESTINATION lib/systemd/system/deepin-service-group@deepin-daemon.service.d/ +) + install(FILES ${CMAKE_CURRENT_BINARY_DIR}/deepin-service-plugin@.service.system DESTINATION lib/systemd/system/ RENAME deepin-service-plugin@.service diff --git a/misc/deepin-service-group@.service.in b/misc/deepin-service-group@.service.in index 98f146f..fd9ba6a 100644 --- a/misc/deepin-service-group@.service.in +++ b/misc/deepin-service-group@.service.in @@ -10,5 +10,10 @@ ExecStart=/usr/bin/deepin-service-manager -g %i Restart=on-failure RestartSec=3 @SYSTEMD_SLICE@ +# 如果 group 是 deepin-daemon,使用 deepin-daemon 用户启动 +# 可以通过 systemd drop-in 配置覆盖: /etc/systemd/system/deepin-service-group@deepin-daemon.service.d/override.conf +# 内容: [Service] +# User=deepin-daemon +# Group=deepin-daemon @SYSTEMD_INSTALL@ diff --git a/misc/deepin-service-group@deepin-daemon.service.d/override.conf.in b/misc/deepin-service-group@deepin-daemon.service.d/override.conf.in new file mode 100644 index 0000000..9e16cdc --- /dev/null +++ b/misc/deepin-service-group@deepin-daemon.service.d/override.conf.in @@ -0,0 +1,5 @@ +# Override configuration for deepin-daemon group +# This file specifies that the deepin-daemon group should run as deepin-daemon user +[Service] +User=deepin-daemon +Group=deepin-daemon diff --git a/src/deepin-service-manager/main.cpp b/src/deepin-service-manager/main.cpp index e38596a..924cf38 100644 --- a/src/deepin-service-manager/main.cpp +++ b/src/deepin-service-manager/main.cpp @@ -15,6 +15,7 @@ #include #include +#include Q_LOGGING_CATEGORY(dsm_Main, "[Main]") int main(int argc, char *argv[]) @@ -22,10 +23,18 @@ int main(int argc, char *argv[]) // 声明一个指向 QCoreApplication 或 QGuiApplication 的指针 QCoreApplication *a; uid_t euid = geteuid(); - if (euid != 0) { - a = new QGuiApplication(argc, argv); - } else { + bool useCoreApp = (euid == 0); + + // 检查是否是deepin-daemon 用户 + if (!useCoreApp) { + struct passwd *pw = getpwuid(euid); + useCoreApp = (pw && QString::fromUtf8(pw->pw_name) == "deepin-daemon"); + } + + if (useCoreApp) { a = new QCoreApplication(argc, argv); + } else { + a = new QGuiApplication(argc, argv); } a->setApplicationName("org.deepin.service.manager"); diff --git a/src/deepin-service-manager/servicemanager.cpp b/src/deepin-service-manager/servicemanager.cpp index 64b9b3b..41aa25c 100644 --- a/src/deepin-service-manager/servicemanager.cpp +++ b/src/deepin-service-manager/servicemanager.cpp @@ -21,7 +21,7 @@ Q_LOGGING_CATEGORY(dsm_ServiceManager, "[ServiceManager]") -static const QStringList GroupSiral{ "core", "dde", "app" }; +static const QStringList GroupSiral{ "core", "dde", "app", "deepin-daemon" }; ServiceManager::ServiceManager(QObject *parent) : QObject(parent)