多显示器环境下如何单独使单台显示器休眠?xrandr/xset相关问题咨询
首先直接给结论:xset无法实现单台显示器的强制休眠,因为xset的DPMS控制是全局作用于整个X Server的,它没有针对单个显示器的细分控制能力——这也是为什么用xset休眠时所有屏幕都会进入睡眠状态的原因。
接下来给你几个更靠谱的替代方案,解决xrandr唤醒后窗口混乱的问题:
方案1:xrandr + 窗口布局保存/恢复脚本
既然xrandr的问题出在唤醒后窗口布局错乱,那我们可以在关闭显示器前先保存当前所有窗口的位置和状态,唤醒后再自动恢复。这里可以用wmctrl(一个控制X窗口的命令行工具)来实现:
步骤示例:
先安装wmctrl:
sudo apt install wmctrl # Debian/Ubuntu系 # 或者Fedora/RHEL系:sudo dnf install wmctrl编写一个脚本
toggle-monitor.sh,实现关闭/唤醒目标显示器并保存恢复窗口:#!/bin/bash MONITOR="HDMI-1" # 替换成你的目标显示器名称,用xrandr查看 LAYOUT_FILE="/tmp/window_layout.txt" # 检查显示器当前状态 if xrandr | grep "$MONITOR connected" | grep -q "disconnected"; then # 唤醒显示器 xrandr --output "$MONITOR" --auto # 恢复窗口布局 while read -r line; do WIN_ID=$(echo "$line" | cut -d',' -f1) WIN_GEOM=$(echo "$line" | cut -d',' -f2-) wmctrl -i -r "$WIN_ID" -e "0,$WIN_GEOM" done < "$LAYOUT_FILE" rm "$LAYOUT_FILE" else # 保存当前窗口布局(只保存非最小化的窗口) wmctrl -lG | grep -v " 0x" | awk '{print $1","$3","$4","$5","$6}' > "$LAYOUT_FILE" # 关闭目标显示器 xrandr --output "$MONITOR" --off fi给脚本加执行权限并运行:
chmod +x toggle-monitor.sh ./toggle-monitor.sh
这个方案的核心是提前备份窗口位置,唤醒后精准恢复,能解决xrandr带来的窗口移位问题,不过少数特殊窗口(比如全屏应用)可能需要额外处理。
方案2:用ddcutil直接控制显示器物理休眠
这是更优雅的方案——跳过X Server的配置修改,直接通过DDC/CI协议控制显示器的硬件电源状态,相当于按显示器的物理电源键让它休眠,完全不会影响X的显示布局,唤醒后窗口位置丝毫不乱。
步骤:
先确认你的显示器支持DDC/CI(大部分现代显示器都支持),然后安装ddcutil:
sudo apt install ddcutil # Debian/Ubuntu # Fedora/RHEL: sudo dnf install ddcutil测试并控制显示器:
- 查看可用显示器:
ddcutil detect - 让目标显示器休眠:
ddcutil --display 1 setvcp D6 5(--display 1是你的显示器编号,D6是电源控制VCP码,5代表休眠) - 唤醒显示器:
ddcutil --display 1 setvcp D6 1(1代表开启)
- 查看可用显示器:
如果运行时提示权限问题,可以添加udev规则让普通用户也能使用:
echo 'SUBSYSTEM=="i2c-dev", GROUP="i2c", MODE="0660"' | sudo tee /etc/udev/rules.d/60-ddcutil.rules sudo usermod -aG i2c $USER
然后重启系统或重新加载udev规则即可。
方案3:利用窗口管理器的原生功能
如果你用的是支持高级显示器管理的窗口管理器(比如i3、KDE Plasma、GNOME),它们通常有原生的单显示器休眠/关闭功能,且会自动处理窗口布局:
- i3:可以绑定快捷键执行
xrandr --output HDMI-1 --off,同时配合i3的move workspace to output命令提前把窗口转移到其他屏幕,唤醒时再移回来; - KDE Plasma:在系统设置→显示配置里,直接点击目标显示器的“关闭”按钮,系统会自动把该屏幕上的窗口转移到其他屏幕,唤醒时恢复;
- GNOME:在设置→显示里,关闭目标显示器的开关,同样会自动调整窗口位置。
这些原生方案的体验通常最好,因为窗口管理器对窗口的控制最精准。
内容的提问来源于stack exchange,提问作者Rolas

