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.
 
 
zyq 6976cd915c 更新 'README.md' 2 years ago
.vscode Initial commit 2 years ago
backend feat: 第一个工作版本 2 years ago
command Initial commit 2 years ago
dialog feat: 第一个工作版本 2 years ago
.gitignore Initial commit 2 years ago
README.md 更新 'README.md' 2 years ago

README.md

概述

本程序主要用来替换 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 调用脚本

      # 本文件需安装在 /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

部署

安装

请按照如下说明安装

# 以下命令请以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

卸载

# 以下命令请以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