Skip to content

Commit b9b3a88

Browse files
wineeezccrs
authored andcommitted
chore: refactor treeland screensaver to persistent daemon
Removed the D-Bus service file for org.freedesktop.ScreenSaver and converted treeland-screensaver from a transient service to a persistent daemon under treeland.service. The screensaver service now runs continuously in Treeland sessions instead of exiting when there are no active inhibits. Added systemd service configuration with proper dependencies and session detection. The D-Bus service will be handled by dde-session-daemon in X11 environments. Influence: 1. Verify treeland-screensaver starts automatically with treeland session 2. Test screensaver inhibit/uninhibit functionality in Treeland 3. Ensure service persists after all inhibits are removed 4. Confirm D-Bus service availability in Treeland sessions 5. Verify X11 sessions continue to use dde-session-daemon for screensaver 6. Test systemd service dependencies and startup order chore: 重构 treeland 屏保为常驻进程 移除了 org.freedesktop.ScreenSaver 的 D-Bus 服务文件,将 treeland- screensaver 从临时服务转换为 treeland.service 下的常驻守护进程。屏保服务 现在在 Treeland 会话中持续运行,而不是在没有活动抑制时退出。添加了带有正 确依赖关系和会话检测的 systemd 服务配置。X11 环境下的 D-Bus 服务将继续由 dde-session-daemon 处理。 Influence: 1. 验证 treeland-screensaver 是否随 treeland 会话自动启动 2. 在 Treeland 中测试屏保抑制/取消抑制功能 3. 确保服务在所有抑制移除后仍然保持运行 4. 确认 D-Bus 服务在 Treeland 会话中可用 5. 验证 X11 会话继续使用 dde-session-daemon 处理屏保 6. 测试 systemd 服务依赖关系和启动顺序
1 parent a2950f1 commit b9b3a88

File tree

6 files changed

+23
-12
lines changed

6 files changed

+23
-12
lines changed

debian/treeland.install

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ usr/lib/systemd/system/*
55
usr/libexec/*
66
usr/share/*/translations/*
77
usr/share/dbus-1/system.d/*
8-
usr/share/dbus-1/services/org.freedesktop.ScreenSaver.service
98
usr/lib/*/lib*.so.*
109
usr/lib/*/treeland/plugins/lib*.so
1110

misc/systemd/CMakeLists.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,13 @@ configure_file("dde-session-pre.target.wants/treeland-xwayland.service.in" "dde-
2121
configure_file("dde-session-pre.target.wants/treeland-shortcut.service.in" "dde-session-pre.target.wants/treeland-shortcut.service" IMMEDIATE @ONLY)
2222
configure_file("dde-session-pre.target.wants/treeland.service.in" "dde-session-pre.target.wants/treeland.service" IMMEDIATE @ONLY)
2323
configure_file("treeland-session-helper.service.in" "treeland-session-helper.service" IMMEDIATE @ONLY)
24+
configure_file("treeland-screensaver.service.in" "treeland-screensaver.service" IMMEDIATE @ONLY)
2425
configure_file("treeland.service.in" "treeland.service" IMMEDIATE @ONLY)
2526

2627
install(FILES ${SERVICES} DESTINATION ${SYSTEMD_USER_UNIT_DIR})
2728
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/treeland.service DESTINATION ${SYSTEMD_SYSTEM_UNIT_DIR})
2829
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/treeland-session-helper.service DESTINATION ${SYSTEMD_USER_UNIT_DIR})
30+
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/treeland-screensaver.service DESTINATION ${SYSTEMD_USER_UNIT_DIR})
2931

3032
install(DIRECTORY DESTINATION ${SYSTEMD_USER_UNIT_DIR}/dde-session-pre.target.wants/)
3133
install(DIRECTORY DESTINATION ${SYSTEMD_USER_UNIT_DIR}/dde-session-shutdown.target.wants/)
@@ -48,3 +50,4 @@ install_symlink(treeland-shortcut.service dde-session-pre.target.wants)
4850
install_symlink(treeland.service dde-session-pre.target.wants)
4951
install_symlink(treeland-session-shutdown.service dde-session-shutdown.target.wants)
5052
install_symlink(treeland-session-helper.service treeland.service.wants)
53+
install_symlink(treeland-screensaver.service treeland.service.wants)
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
[Unit]
2+
Description=Treeland ScreenSaver D-Bus Service
3+
CollectMode=inactive-or-failed
4+
5+
PartOf=dde-session-pre.target
6+
Before=dde-session-pre.target
7+
8+
Requisite=treeland-sd.service
9+
After=treeland-sd.service
10+
11+
[Service]
12+
ExecCondition=/bin/sh -c 'test "$XDG_SESSION_DESKTOP" = "Treeland" || exit 2'
13+
Type=dbus
14+
BusName=org.freedesktop.ScreenSaver
15+
ExecStart=@CMAKE_INSTALL_FULL_LIBEXECDIR@/treeland-screensaver
16+
Slice=session.slice
17+
Restart=on-failure
18+
RestartSec=1s

src/treeland-screensaver/CMakeLists.txt

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,6 @@ add_custom_command(
1818
COMMENT "Generating treeland-screensaver-v1.c"
1919
)
2020

21-
configure_file("org.freedesktop.ScreenSaver.service.in" "org.freedesktop.ScreenSaver.service" IMMEDIATE @ONLY)
22-
2321
qt_add_executable(treeland-screensaver
2422
screensaver.cpp
2523
${TREELAND_SCREENSAVER_HEADER}
@@ -34,4 +32,3 @@ target_link_libraries(treeland-screensaver
3432

3533
install(TARGETS treeland-screensaver RUNTIME DESTINATION "${CMAKE_INSTALL_LIBEXECDIR}")
3634
install(FILES org.freedesktop.ScreenSaver.xml DESTINATION "${CMAKE_INSTALL_DATADIR}/dbus-1/interfaces")
37-
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/org.freedesktop.ScreenSaver.service DESTINATION "${CMAKE_INSTALL_DATADIR}/dbus-1/services")

src/treeland-screensaver/org.freedesktop.ScreenSaver.service.in

Lines changed: 0 additions & 3 deletions
This file was deleted.

src/treeland-screensaver/screensaver.cpp

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,9 @@
44
/**
55
* org.freedesktop.ScreenSaver implementation using treeland_screensaver protocol
66
*
7+
* This service runs as a persistent daemon under Treeland session.
78
* For each Inhibit request a wayland connection is created, which will be terminated
8-
* upon UnInhibit. The app will exit when there are no more active inhibits.
9+
* upon UnInhibit.
910
*/
1011

1112
#include <QCoreApplication>
@@ -95,8 +96,6 @@ public Q_SLOTS:
9596
if (inhibits[caller].isEmpty())
9697
inhibits.remove(caller);
9798
}
98-
if (inhibits.isEmpty())
99-
QCoreApplication::quit();
10099
}
101100
};
102101

@@ -109,8 +108,6 @@ public Q_SLOTS:
109108
for (auto it = inhibits[caller].cbegin(); it != inhibits[caller].cend(); ++it) \
110109
uninhibit(it.value()); \
111110
inhibits.remove(caller); \
112-
if (inhibits.isEmpty()) \
113-
QCoreApplication::quit(); \
114111
}
115112

116113
static void onServiceUnregistered(const QString &service) {

0 commit comments

Comments
 (0)