如何在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
相关产品推荐
相关产品推荐

