如何在Raspbian(RPI4)中用Conky显示DPMS待机剩余时间?
在Raspbian树莓派4上用Conky显示DPMS待机剩余时间 #在树莓派4的Raspbian系统上实现这个需求其实不难,核心是结合两个小工具获取必要数据,计算剩余时间后传给Conky显示。下面是具体步骤:
1. 安装必要工具 #首先需要xprintidle来获取系统当前的空闲时长(毫秒数),Raspbian默认没有预装这个工具,执行以下命令安装:
sudo apt update && sudo apt install xprintidle
2. 提取DPMS待机超时时间 #我们可以用xset q命令查看当前DPMS的配置,其中包含待机(Standby)的超时秒数。用以下命令可以直接提取这个数值:
xset q | grep -A 1 'DPMS is Enabled' | grep 'Standby:' | awk '{print $2}'
执行后会返回类似1200这样的数字,也就是你设置的待机超时秒数。
3. 编写计算剩余时间的脚本 #创建一个名为dpms_remaining.sh的脚本(建议放在用户主目录下,比如~/dpms_remaining.sh),内容如下:
#!/bin/bash
# 获取DPMS待机超时的秒数
DPMS_STANDBY=$(xset q | grep -A 1 'DPMS is Enabled' | grep 'Standby:' | awk '{print $2}')
# 如果DPMS未启用,提示信息并退出
if [ -z "$DPMS_STANDBY" ]; then
echo "DPMS未启用"
exit 1
fi
# 获取当前系统空闲的毫秒数
IDLE_MS=$(xprintidle)
# 转换为秒
IDLE_SEC=$((IDLE_MS / 1000))
# 计算剩余待机时间(秒)
REMAINING_SEC=$((DPMS_STANDBY - IDLE_SEC))
# 处理剩余时间为负的情况(已进入待机)
if [ $REMAINING_SEC -lt 0 ]; then
echo "屏幕已待机"
else
# 转换为分钟
REMAINING_MIN=$((REMAINING_SEC / 60))
echo "距离屏幕关闭还有${REMAINING_MIN}分钟"
fi
给脚本添加执行权限:
chmod +x ~/dpms_remaining.sh
4. 在Conky配置中调用脚本 #打开你的Conky配置文件(通常是~/.conkyrc),添加一行内容来调用这个脚本:
${execpi 10} ~/dpms_remaining.sh}
这里的execpi表示每隔指定秒数(这里是10秒)重新执行脚本并更新显示,你可以根据需要调整这个间隔(比如改成5秒)。
注意事项 #确保你的用户有访问X服务器的权限:xset和xprintidle都依赖X环境,如果你是自动登录的桌面用户,一般没问题;如果是远程连接,可能需要先设置export DISPLAY=:0环境变量。如果DPMS未启用,可以用xset s on启用,或者用xset s 1200直接设置待机超时为1200秒(20分钟)。内容的提问来源于stack exchange,提问作者Bdgisme