# Debian GNOME(X11) 无输入30s自动熄屏排查笔记

前置排查结论:
xset q DPMS参数全0、GNOME电源空闲超时=0、logind空闲策略注释关闭、无xautolock/swayidle/light-locker、cron无熄屏任务;熄屏程序不调用xset命令,直接通过X11底层API下发DPMS指令,常规配置无法捕获源头。

优先执行【现象验证测试】

新开终端运行常驻防御循环:

while true; do xset -dpms; xset s off; sleep 3; done

等待观察30秒,区分两种结果:

  1. 不再黑屏
    结论:存在用户态X11客户端程序持续发送 DPMS Off 请求,循环持续重置DPMS状态抵消熄屏指令。
    重点嫌疑人:cloakbrowser / Playwright Chromium 浏览器自动化套件(当前主机大量浏览器renderer进程)

  2. 依然黑屏
    排除X11 DPMS应用层通路,仅剩两类硬核原因:

  • 场景A:KVM虚拟机/云工作站/VNC远程桌面,宿主机虚拟化层强制30s切断视频信号(虚拟机内部所有系统配置完全无效,高频踩坑点)
  • 场景B:显卡驱动BUG、EDID异常,GPU硬件层面主动停止画面输出

需要确认的2个关键现象(定位根本方向)

  1. 当前Debian:物理机直连显示器,还是 KVM虚拟机/云主机/VNC/RDP远程桌面
  2. 黑屏时显示器状态:
    • 仅背光熄灭,显示器指示灯正常接收信号
    • 显示器弹出OSD提示【无信号 No Signal】

追加排查命令(浏览器自动化方向)

检查Chromium/Cloakbrowser启动参数,搜寻节能相关标识

ps aux | grep chrome

重点留意参数:--screensaveridlepower-savedisplay-suspend

临时业务兜底方案(优先保障业务,暂缓溯源)

后台常驻防熄屏进程,持久抑制DPMS熄屏

# 后台启动
nohup bash -c 'while true; do xset -dpms; xset s off; sleep 3; done' > /dev/null 2>&1 &

# 后续关闭进程
pkill -f "while true; do xset -dpms"

补充背景知识点

Playwright、二次定制打包Chromium(cloakbrowser)存在冷门特性:
页面长时间无交互时,部分修改版浏览器内置底层显示节能逻辑,直接调用X11协议发送熄屏指令;不会修改系统全局DPMS超时,无法通过xset、gsettings捕捉配置异常

方案:systemd 服务管理 持续禁用DPMS防熄屏

注意:X11会话服务必须指定DISPLAY环境变量,否则xset无法连接X Server,不生效!

1. 创建服务文件

sudo nano /etc/systemd/system/dpms-keep-active.service

[Unit]
Description=Keep X11 DPMS Disabled, Prevent Monitor Auto Off
After=graphical-session.target

[Service]
Type=simple
# 修改为你的登录用户
User=guan
Environment="DISPLAY=:0"
Environment="XAUTHORITY=/home/guan/.Xauthority"
ExecStart=/bin/bash -c 'while true; do xset -dpms; xset s off; sleep 3; done'
Restart=always
RestartSec=5

[Install]
WantedBy=graphical-session.target

⚠️ 重要说明:

  1. DISPLAY=:0 绝大多数本地GNOME X11默认值;如果你的环境不是:0,执行 echo $DISPLAY 获取真实值替换
  2. XAUTHORITY 路径确保正确,没有这个权限不足,xset执行无效

2. 重载systemd、启用开机自启

sudo systemctl daemon-reload

# 开机自启
sudo systemctl enable dpms-keep-active.service

# 立即启动
sudo systemctl start dpms-keep-active.service

3. 常用管理命令

# 查看状态
systemctl status dpms-keep-active.service

# 停止服务
sudo systemctl stop dpms-keep-active.service

# 重启服务
sudo systemctl restart dpms-keep-active.service

# 取消开机自启
sudo systemctl disable dpms-keep-active.service

4. 故障排查(服务运行但不生效时)

# 查看日志
journalctl -u dpms-keep-active.service -f

常见报错:

  • Can't open display :0 → DISPLAY变量不对 / XAuthority路径错误

5. 一键部署脚本(可选,直接复制运行自动创建服务)

新建 install-dpms-guard.sh

#!/bin/bash
SERVICE_PATH="/etc/systemd/system/dpms-keep-active.service"

cat > $SERVICE_PATH << EOF
[Unit]
Description=Keep X11 DPMS Disabled, Prevent Monitor Auto Off
After=graphical-session.target

[Service]
Type=simple
User=guan
Environment="DISPLAY=:0"
Environment="XAUTHORITY=/home/guan/.Xauthority"
ExecStart=/bin/bash -c 'while true; do xset -dpms; xset s off; sleep 3; done'
Restart=always
RestartSec=5

[Install]
WantedBy=graphical-session.target
EOF

systemctl daemon-reload
systemctl enable dpms-keep-active.service
systemctl start dpms-keep-active.service

echo "============================================="
echo "服务安装完成!"
echo "查看状态: systemctl status dpms-keep-active.service"
echo "停止: sudo systemctl stop dpms-keep-active.service"
echo "============================================="

赋予权限执行:

chmod +x install-dpms-guard.sh
sudo ./install-dpms-guard.sh

补充限制提醒

  1. 仅对X11环境有效,Wayland环境xset完全失效;
  2. 如果根源是【宿主机/KVM虚拟化层强制切断信号】,此服务只能缓解,无法彻底解决;
  3. 若多显示器/多DISPLAY,需要多实例运行;
  4. 用户注销重登X会话时,服务会自动重启恢复规则。

卸载方式

sudo systemctl stop dpms-keep-active.service
sudo systemctl disable dpms-keep-active.service
sudo rm /etc/systemd/system/dpms-keep-active.service
sudo systemctl daemon-reload
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容