parent
ee1c2416f2
commit
336c45cba4
5 changed files with 308 additions and 69 deletions
@ -0,0 +1,142 @@ |
||||
<!-- |
||||
* @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 medr-lightdm-dpms-enable /usr/local/bin |
||||
cp medr-lightdm-dpms-disable /usr/local/bin |
||||
|
||||
# ukui屏保 |
||||
cp backend/medr-screensaver-backend.py /usr/local/bin/ukui-screensaver-backend |
||||
cp command/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 |
||||
``` |
Loading…
Reference in new issue