You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
142 lines
3.4 KiB
142 lines
3.4 KiB
<!--
|
|
* @Author: Zhang Yueqian zhangyueqian@antiy.cn
|
|
* @Date: 2022-11-02 13: 41: 19
|
|
* @LastEditors: Zhang Yueqian zhangyueqian@antiy.cn
|
|
* @LastEditTime: 2022-11-02 16:00:55
|
|
* @FilePath: /screensaver/README.md
|
|
* @Description: 屏保软件架构说明
|
|
-->
|
|
|
|
# 概述
|
|
|
|
本程序主要用来替换 `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
|
|
```
|
|
|