You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Ubuntu 23.x环境下关闭电视时保持显示设备激活或恢复窗口布局的方案咨询

Ubuntu 23.x环境下关闭电视时保持显示设备激活或恢复窗口布局的方案咨询

你好,针对你遇到的Ubuntu 23.04下TV关机后显示设备被系统移除、重启后Firefox窗口全部堆叠的问题,我整理了两种可行的解决方案,分别从保持显示设备持续激活自动恢复窗口布局两个方向入手:


方案一:强制系统保留显示设备配置(适用于Xorg环境)

首先先确认你的系统用的是Xorg还是Wayland,运行命令:

echo $XDG_SESSION_TYPE

如果输出是x11,可以尝试以下操作强制系统保留显示设备:

  1. 先用xrandr命令获取当前四个显示器的输出名称(比如HDMI-1、HDMI-2等)和分辨率,记下来备用。
  2. 创建Xorg配置文件,强制系统保留显示设置:
    编辑/etc/X11/xorg.conf.d/10-monitor.conf文件(如果目录不存在就先创建),添加以下内容(根据你的实际设备参数调整):
    Section "Monitor"
        Identifier "HDMI-1"
        Option "PreferredMode" "1920x1080"  # 替换成你的TV分辨率
        Option "Position" "0 0"
        Option "DPMS" "false"  # 禁用电源管理,避免系统主动关闭显示
    EndSection
    
    Section "Monitor"
        Identifier "HDMI-2"
        Option "PreferredMode" "1920x1080"
        Option "Position" "1920 0"
        Option "DPMS" "false"
    EndSection
    
    Section "Monitor"
        Identifier "HDMI-3"
        Option "PreferredMode" "1920x1080"
        Option "Position" "0 1080"
        Option "DPMS" "false"
    EndSection
    
    Section "Monitor"
        Identifier "HDMI-4"
        Option "PreferredMode" "1920x1080"
        Option "Position" "1920 1080"
        Option "DPMS" "false"
    EndSection
    
    Section "Screen"
        Identifier "Screen0"
        Device "Card0"
        Monitor "HDMI-1"
        SubSection "Display"
            Modes "1920x1080"
        EndSubSection
    EndSection
    
  3. 重启系统后,即使TV关机切断HDMI信号,系统也会保留这些显示设备的配置,不会将其移除,窗口位置自然也不会乱。

方案二:自动恢复窗口布局(Xorg/Wayland通用)

如果方案一因为TV硬件限制无法生效(比如部分TV关机后完全切断HDMI握手信号),可以通过脚本或工具自动恢复窗口位置:

方法1:用wmctrl脚本(Xorg环境)

  1. 安装窗口控制工具wmctrl
    sudo apt update && sudo apt install wmctrl
    
  2. 创建窗口恢复脚本restore_window_layout.sh
    #!/bin/bash
    # 等待TV开机完成、显示器被系统识别,时间可根据实际调整
    sleep 15
    
    # 获取所有Firefox窗口的ID(按打开顺序排序)
    FIREFOX_WINDOWS=$(wmctrl -l | grep -i firefox | awk '{print $1}')
    # 检查窗口数量是否为4,避免误操作
    if [ $(echo $FIREFOX_WINDOWS | wc -w) -ne 4 ]; then
        echo "未检测到4个Firefox窗口,跳过布局恢复"
        exit 1
    fi
    
    # 逐个设置窗口位置和大小,对应四个显示器
    wmctrl -i -r $(echo $FIREFOX_WINDOWS | cut -d' ' -f1) -e 0,0,0,1920,1080
    wmctrl -i -r $(echo $FIREFOX_WINDOWS | cut -d' ' -f2) -e 0,1920,0,1920,1080
    wmctrl -i -r $(echo $FIREFOX_WINDOWS | cut -d' ' -f3) -e 0,0,1080,1920,1080
    wmctrl -i -r $(echo $FIREFOX_WINDOWS | cut -d' ' -f4) -e 0,1920,1080,1920,1080
    
    # 最大化所有窗口
    for win in $FIREFOX_WINDOWS; do
        wmctrl -i -r $win -b add,maximized_vert,maximized_horz
    done
    
  3. 给脚本添加执行权限:
    chmod +x restore_window_layout.sh
    
  4. 修改你的TV开机脚本,在打开TV的命令后调用这个恢复脚本即可。

方法2:用GNOME扩展(Wayland/Xorg通用,适用于GNOME桌面)

如果你的Ubuntu用的是默认GNOME桌面,可以通过扩展实现自动窗口管理:

  • 安装Auto Move Windows扩展:可以为Firefox窗口设置规则,比如根据窗口标题区分,让每个窗口打开时自动移动到指定显示器。
  • 安装Window Layout Manager扩展:可以手动保存当前的窗口布局,设置在显示器连接恢复后自动加载布局,完全实现自动化。

备注:内容来源于stack exchange,提问作者GRX

火山引擎 最新活动