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.

83 lines
1.9 KiB

2 years ago
#!/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
2 years ago
# @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
2 years ago
# 默认休眠时间(分钟)
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
}
2 years ago
# 入口函数, 读取设置并调用xset
function main() {
# 读取超时配置并转换为秒
TIMEOUT=$(get_timeout)
TIMEOUT=$((TIMEOUT * 60))
# 读取是否黑屏
BLANK_SCREEN=$(get_blank)
2 years ago
# 必须的, 似乎是需要等待X启动
while true; do
xset q 2>&1 >/dev/null && break
sleep 1
done
2 years ago
sleep 10
# 利用X的dpms功能触发屏幕休眠
xset dpms 0 0 $TIMEOUT
sleep 10
if [ x"$BLANK_SCREEN" == "xyes" ]; then
xset dpms force off
fi
2 years ago
}
main &