You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

多显示器环境下如何单独使单台显示器休眠?xrandr/xset相关问题咨询

解答:单显示器休眠的方案选择

首先直接给结论:xset无法实现单台显示器的强制休眠,因为xset的DPMS控制是全局作用于整个X Server的,它没有针对单个显示器的细分控制能力——这也是为什么用xset休眠时所有屏幕都会进入睡眠状态的原因。

接下来给你几个更靠谱的替代方案,解决xrandr唤醒后窗口混乱的问题:

方案1:xrandr + 窗口布局保存/恢复脚本

既然xrandr的问题出在唤醒后窗口布局错乱,那我们可以在关闭显示器前先保存当前所有窗口的位置和状态,唤醒后再自动恢复。这里可以用wmctrl(一个控制X窗口的命令行工具)来实现:

步骤示例:

  1. 先安装wmctrl:

    sudo apt install wmctrl  # Debian/Ubuntu系
    # 或者Fedora/RHEL系:sudo dnf install wmctrl
    
  2. 编写一个脚本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
    
  3. 给脚本加执行权限并运行:

    chmod +x toggle-monitor.sh
    ./toggle-monitor.sh
    

这个方案的核心是提前备份窗口位置,唤醒后精准恢复,能解决xrandr带来的窗口移位问题,不过少数特殊窗口(比如全屏应用)可能需要额外处理。

方案2:用ddcutil直接控制显示器物理休眠

这是更优雅的方案——跳过X Server的配置修改,直接通过DDC/CI协议控制显示器的硬件电源状态,相当于按显示器的物理电源键让它休眠,完全不会影响X的显示布局,唤醒后窗口位置丝毫不乱。

步骤:

  1. 先确认你的显示器支持DDC/CI(大部分现代显示器都支持),然后安装ddcutil:

    sudo apt install ddcutil  # Debian/Ubuntu
    # Fedora/RHEL: sudo dnf install ddcutil
    
  2. 测试并控制显示器:

    • 查看可用显示器: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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 04:29:54