#!/bin/bash ### # @Author: Zhang Yueqian zhangyueqian@antiy.cn # @Date: 2022-11-01 09:47:56 # @LastEditors: Zhang Yueqian zhangyueqian@antiy.cn # @LastEditTime: 2022-11-02 15:08:56 # @FilePath: /screensaver/backend/medr-lightdm-dpms-enable # @Description: 在lightdm(greeter)界面启用屏幕休眠功能 # # 本程序需安装在 /usr/local/bin/ 目录下, 配置到 /etc/lightdm/50-medr-dpms.conf 文件中 ### # 休眠时间设置文件路径 TIMEOUT_FILE=/var/run/medr-lightdm # 是否锁屏判断文件 LOCK_FILE=/var/run/medr-lightdm-lock # 默认休眠时间(分钟) DEFAULT_TIMEOUT=10 # 确认文件存在 if [ ! -f $TIMEOUT_FILE ]; then touch $TIMEOUT_FILE fi # 获取休眠超时配置, 如果未设置或设置格式非数字, 则返回默认配置 $DEFAULT_TIMEOUT function get_timeout() { # 首先保证TIMEOUT文件可被修改 chmod 777 $TIMEOUT_FILE # 读取TIMEOUT内容并确认为数字 TIMEOUT=$(cat $TIMEOUT_FILE) case $TIMEOUT in '' | *[!0-9]*) echo $DEFAULT_TIMEOUT ;; *) echo $TIMEOUT ;; esac } # 获取调用方有没有要求黑屏 function get_blank() { # 确保文件可修改 chmod 777 $LOCK_FILE # 读取命令 LOCK_CMD=$(cat $LOCK_FILE) case $LOCK_CMD in "BLANK" | "blank") echo "yes" ;; *) echo "no" ;; esac # 清空命令文件 echo 'done' >$LOCK_FILE } # 入口函数, 读取设置并调用xset function main() { # 读取超时配置并转换为秒 TIMEOUT=$(get_timeout) TIMEOUT=$((TIMEOUT * 60)) # 读取是否黑屏 BLANK_SCREEN=$(get_blank) # 必须的, 似乎是需要等待X启动 while true; do xset q 2>&1 >/dev/null && break sleep 1 done sleep 10 # 利用X的dpms功能触发屏幕休眠 xset dpms 0 0 $TIMEOUT sleep 10 if [ x"$BLANK_SCREEN" == "xyes" ]; then xset dpms force off fi } main &