# 概述 本程序主要用来替换 `ukui-screensaver` 程序 ## 组件 - medr-screensaver-backend 后台程序, 开机(登陆桌面)运行. 监控系统 session 状态,当进入 idle 状态后触发 dialog 程序. - medr-screensaver-command 手动调用屏保功能 - medr-screensaver-dialog 被 backend 调用进入锁屏状态, 主要实现 --session-idle 功能 ### backend #### 后端程序需求分析 - 开机(登陆)启动 - 监控 session 状态并触发 dialog 程序 #### 后端程序代码设计 - /etc/xdg/autostart/medr-screensaver.desktop 同时要禁用 ukui-screensaver - 监听 dbus 信号 `org.gnome.SessionManager.Presence.StatusChanged` 同时, 还要监控 gsettings 设置 `org.mate.session.idle-delay` 并将设置写入到 /var/run/medr-lightdm ### command #### command 程序需求分析 - 支持 --lock 命令 - 支持 --query 命令 #### command 程序代码设计 - 调用 dialog --lock 即可 - TODO: 后续修改实现 ### dialog #### dialog 程序需求分析 - 支持 --lock 命令 - 支持 --screensaver 命令 - 支持 --session-idle 命令 #### dialog 程序代码设计 - 不做任何配置, 直接调用 `dm-tool lock` - 直接调用 `xset dpms force off` - 配置后调用 `dm-tool lock` 如何配置 - 设置 lightdm 调用脚本 ```conf # 本文件需安装在 /etc/lightdm/lightdm.conf.d/ 目录下 [SeatDefaults] display-setup-script=/usr/local/bin/medr-lightdm-dpms-enable session-setup-script=/usr/local/bin/medr-lightdm-dpms-disable ``` - 实现脚本 `/usr/local/bin/medr-lightdm-dpms-enable` 1. 根据用户提供的设置来配置锁屏时长 2. 判断用户配置以执行`xset dpms force off` 由于是 root 用户运行 lightdm, 需要由用户态程序`dialog`来设置 用来通信的文件为 `/var/run/medr-lightdm-lock` 如果需要黑屏, 写入内容 `blank` ## 部署 ### 安装 请按照如下说明安装 ```sh # 以下命令请以root权限执行! # lightdm 配置 cp backend/50-medr-dpms.conf /etc/lightdm/lightdm.conf.d/ cp backend/medr-lightdm-dpms-enable /usr/local/bin cp backend/medr-lightdm-dpms-disable /usr/local/bin # ukui屏保 cp backend/medr-screensaver-backend.py /usr/local/bin/ukui-screensaver-backend cp dialog/medr-screensaver-dialog.py /usr/local/bin/ukui-screensaver-dialog # 额外工作 mv /usr/bin/ukui-screensaver-backend{,.bak} mv /usr/bin/ukui-screensaver-dialog{,.bak} # 支持开始菜单的锁屏 cp /usr/local/bin/{ukui-screensaver-dialog,mate-screensaver-command} # 准备一些额外的文件 touch /var/run/medr-lightdm touch /var/run/medr-lightdm-lock touch /tmp/medr-screensaver.lock ``` ### 卸载 ```sh # 以下命令请以root权限执行! # 删除medr屏保 rm /usr/local/bin/ukui-screensaver-backend rm /usr/local/bin/ukui-screensaver-dialog rm /usr/local/bin/mate-screensaver-command # 恢复麒麟原生屏保 mv /usr/bin/ukui-screensaver-backend{.bak,} mv /usr/bin/ukui-screensaver-dialog{.bak,} # 删除配置文件 rm /etc/lightdm/lightdm.conf.d/50-medr-dpms.conf rm /usr/local/bin/medr-lightdm-dpms-{enable,disable} rm /var/run/medr-lightdm{,-lock} rm /tmp/medr-screensaver.lock ```