duanyao
deepin
2018-06-28 03:59 更新:已经查明,原因是 DDE 的 dde-session-daemon 程序和 XFCE 的 light-locker 程序有冲突。
dde-session-daemon 和 light-locker 都实现了 org.freedesktop.ScreenSaver 这个 d-bus 接口,用来控制屏保/熄屏。但是 dde-session-daemon 除了标准的方法外,还实现了 SetTimeout() 方法,light-locker 当然是没有实现的。
如果同时安装 DDE 和 XFCE 两个桌面,则登录时 dde-session-daemon 和 light-locker 都会启动,但只有一个有机会注册 org.freedesktop.ScreenSaver 接口,谁先抢到是随机的。
如果前者抢到,则一切正常,后者抢到,则无法修改熄屏时间。这是 dde-session-daemon 没能抢到时的日志:
6月 27 18:34:51 duanyao-laptop com.deepin.daemon.InputDevices[3044]: loader.go:151: enable module screensaver
6月 27 18:34:51 duanyao-laptop daemon/loader[3452]: loader.go:151: enable module screensaver
6月 27 18:34:51 duanyao-laptop com.deepin.daemon.InputDevices[3044]: screensaver.go:233: ScreenSaver has been register, exit...
6月 27 18:34:51 duanyao-laptop com.deepin.daemon.InputDevices[3044]: loader.go:159: enable module screensaver done, cost 94.986756ms
6月 27 18:34:51 duanyao-laptop daemon/screensaver[3452]: screensaver.go:233: ScreenSaver has been register, exit...
6月 27 18:34:51 duanyao-laptop daemon/loader[3452]: loader.go:159: enable module screensaver done, cost 94.986756ms
不好说这是谁的锅,但应该有几点可以改进:
1. light-locker 不应该随着 DDE 启动,只随着 XFCE 启动就好。目前它是由 /etc/xdg/autostart/light-locker.desktop 自动启动。
2. DDE 控制中心发现调用 SetTimeout() 失败后,应该给用户报错,而不是看起来一切正常,但并不生效。
3. 如果 deepin 认为 SetTimeout() 应该加入 org.freedesktop.ScreenSaver ,建议推动其标准化,让其它的桌面系统也实现,避免互操作问题。
如果不可能标准化,建议放到私有的接口里面。
@aida https://bbs.deepin.org/user/48640
dde-session-daemon 和 light-locker 都实现了 org.freedesktop.ScreenSaver 这个 d-bus 接口,用来控制屏保/熄屏。但是 dde-session-daemon 除了标准的方法外,还实现了 SetTimeout() 方法,light-locker 当然是没有实现的。
如果同时安装 DDE 和 XFCE 两个桌面,则登录时 dde-session-daemon 和 light-locker 都会启动,但只有一个有机会注册 org.freedesktop.ScreenSaver 接口,谁先抢到是随机的。
如果前者抢到,则一切正常,后者抢到,则无法修改熄屏时间。这是 dde-session-daemon 没能抢到时的日志:
6月 27 18:34:51 duanyao-laptop com.deepin.daemon.InputDevices[3044]: loader.go:151: enable module screensaver
6月 27 18:34:51 duanyao-laptop daemon/loader[3452]: loader.go:151: enable module screensaver
6月 27 18:34:51 duanyao-laptop com.deepin.daemon.InputDevices[3044]: screensaver.go:233: ScreenSaver has been register, exit...
6月 27 18:34:51 duanyao-laptop com.deepin.daemon.InputDevices[3044]: loader.go:159: enable module screensaver done, cost 94.986756ms
6月 27 18:34:51 duanyao-laptop daemon/screensaver[3452]: screensaver.go:233: ScreenSaver has been register, exit...
6月 27 18:34:51 duanyao-laptop daemon/loader[3452]: loader.go:159: enable module screensaver done, cost 94.986756ms
不好说这是谁的锅,但应该有几点可以改进:
1. light-locker 不应该随着 DDE 启动,只随着 XFCE 启动就好。目前它是由 /etc/xdg/autostart/light-locker.desktop 自动启动。
2. DDE 控制中心发现调用 SetTimeout() 失败后,应该给用户报错,而不是看起来一切正常,但并不生效。
3. 如果 deepin 认为 SetTimeout() 应该加入 org.freedesktop.ScreenSaver ,建议推动其标准化,让其它的桌面系统也实现,避免互操作问题。
如果不可能标准化,建议放到私有的接口里面。
@aida https://bbs.deepin.org/user/48640
Reply Like 0 View the author


中文 


这个问题应该在 deepin 15.5 就存在,更新 15.6 后还是有,所以再提一下。
出现频率:偶尔出现,尚未发现规律。
步骤:打开“控制中心-电源管理-关闭显示器于”面板,调整时间,比如1分钟。
实际结果:更改没有生效,1分钟没操作显示器仍然亮着。调整时间不生效时,系统日志(sudo journalctl -f)出现以下错误:
6月 25 01:27:41 duanyao-laptop com.deepin.daemon.InputDevices[3018]: power_save_plan.go:117: cancel all tasks
6月 25 01:27:41 duanyao-laptop com.deepin.daemon.InputDevices[3018]: power_save_plan.go:119: all tasks done!
6月 25 01:27:41 duanyao-laptop daemon/session/power[3448]: power_save_plan.go:117: cancel all tasks
6月 25 01:27:41 duanyao-laptop daemon/session/power[3448]: power_save_plan.go:119: all tasks done!
6月 25 01:27:41 duanyao-laptop com.deepin.daemon.InputDevices[3018]: power_save_plan.go:183: set ScreenSaver timeout 60 failed: Method "SetTimeout" with signature "uub" on interface "org.freedesktop.ScreenSaver" doesn't exist
6月 25 01:27:41 duanyao-laptop daemon/session/power[3448]: power_save_plan.go:183: set ScreenSaver timeout 60 failed: Method "SetTimeout" with signature "uub" on interface "org.freedesktop.ScreenSaver" doesn't exist
此功能正常时,日志是这样的:
6月 25 01:31:45 duanyao-laptop daemon/session/power[11075]: power_save_plan.go:117: cancel all tasks
6月 25 01:31:45 duanyao-laptop daemon/session/power[11075]: power_save_plan.go:119: all tasks done!
6月 25 01:31:45 duanyao-laptop daemon/screensaver[11075]: screensaver.go:176: SetTimeout to 60 0 false
修复措施:注销并重新登录可恢复正常;切换另一个账户登录再调时间也是正常的,但再切回来还是不正常。
试着杀掉 dde-control-center 或 dde-session-daemon ,并没有效果。
机器型号:联想 V470 笔记本。
https://bbs.deepin.org/user/101846