bug:“控制中心-电源管理-关闭显示器”的时间调节有时无效
Tofloor
poster avatar
duanyao
deepin
2018-06-25 21:46
Author
本帖最后由 duanyao 于 2018-6-25 13:48 编辑

这个问题应该在 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



Reply Favorite View the author
All Replies
avatar
duanyao
deepin
2018-06-28 03:59
#1
更新:已经查明,原因是 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
Reply View the author
avatar
duanyao
deepin
2018-06-28 04:03
#2

这是用 d-feet 查到的,light-locker 抢注接口的情况,可见没有 SetTimeout 方法。

Reply View the author