资讯动态

Ubuntu 22.04多显示器扩展屏配置与故障排查实战

发布时间:2026/10/23 3:56:13 来源:尧图企业网站定制
多接一块屏是很多人装完 Ubuntu 22.04 之后第一件想干的事也往往是第一个被劝退的事。插上线系统没反应好不容易亮了分辨率不对改完之后重启又回到原样再狠一点直接黑屏进不了桌面。这篇内容就是围绕Ubuntu 22.04 多显示器扩展屏配置与故障排查展开的把我这几年在台式机、笔记本、扩展坞、USB 转显这套组合上踩过的坑按先看清环境、再理解模型、然后动手配、最后学会查的顺序捋一遍。适合三类人看刚装完系统想接第二块屏的新手被 Wayland 和 Xorg 折腾过的中级用户以及需要给一堆机器做统一显示布局、想找个可复现方案的运维或者桌面支持同学。全程不聊虚的命令可以直接复制参数会告诉你为什么这么填。1. 先把会话类型和显卡栈摸清楚不然所有命令都是白敲动手之前必须先确认一件事你现在跑的是 Xorg 还是 Wayland。这不是学术问题而是决定你后面能不能用 xrandr 的根本前提。我在社区里见过太多人贴出 xrandr 报错最后发现人家在 Wayland 会话里命令返回的是几个虚拟输出名改完毫无效果白折腾两小时。1.1 Wayland 还是 Xorg这是第一个岔路口Ubuntu 22.04 默认搭载 GNOME 42桌面会话默认走 Wayland但登录界面右下角或者用户名下方的齿轮可以切到 Ubuntu on Xorg。两者的差别在显示配置上非常直接Xorg 会话xrandr 是真正生效的--pos、--mode、--rate、--primary这些参数改完立刻作用于显卡输出还能写脚本固化。Wayland 会话xrandr 依然存在但它操作的是 XWayland 兼容层里的虚拟输出改了不会影响真实显示器布局。只有在极少数场景下比如某些老的 Java 程序XWayland 的分辨率设置才有意义。所以判断标准很简单如果你需要精确控制每块屏的位置、刷新率、开关状态并且希望重启后自动恢复优先考虑 Xorg 会话如果你更在意触控板手势、混合 DPI 缩放、每个屏幕独立缩放比例这些体验那就在 Wayland 下用 GNOME 设置面板解决问题别硬上 xrandr。1.2 三条命令确认当前输出与驱动登录之后先敲这三条信息量足够定位大部分问题echo $XDG_SESSION_TYPE返回x11就是 Xorg返回wayland就是 Wayland。这是最直接的判断。xrandr --listmonitors xrandr --query--listmonitors告诉你系统当前认为有几个显示器注意monitor 和 connector 不是一回事--query输出所有接口名、连接状态、支持的分辨率和刷新率。接口名通常是eDP-1笔记本内屏、HDMI-1、DP-1、DP-2、USB-C-1这类看到connected才算物理上通了看到disconnected说明线材、接口、显示器电源至少有一个环节有问题。lspci -k | grep -EA3 VGA|3D|Display这条看的是显卡型号和当前加载的内核驱动。输出里Kernel driver in use那一行是关键Intel 核显正常是i915AMD 是amdgpuNVIDIA 专有驱动是nvidia如果显示nouveau说明你还在用开源驱动多屏行为会和专有驱动有差异后面第 6 节细说。1.3 切换会话的实操与取舍建议想临时切到 Xorg最省事的办法是注销在登录界面的齿轮里选 Ubuntu on Xorg 再登录。但如果你 Remote 登录、或者根本进不到登录界面比如显卡驱动把 Wayland 会话搞崩了可以改配置把 Wayland 关掉sudo nano /etc/gdm3/custom.conf # 取消注释这一行 WaylandEnablefalse sudo systemctl restart gdm3注意改完之后是整台机器统一走 Xorg不是只对某个用户生效。如果你是多用户共享的机器最好提前跟其他人打个招呼。我的建议是固定用途的台式机、有固定双屏或三屏布局、希望每次开机都一模一样就用 Xorg笔记本经常带着走、外接屏分辨率差异大、需要每屏独立缩放就留在 Wayland。最怕的是两个会话来回切配置脚本按 Xorg 写的切到 Wayland 全失效还以为是显卡坏了。2. 读懂显示拓扑connector、mode、CRTC 到底是什么很多人配多屏失败根源不在命令写错而在于没搞明白 xrandr 输出的那几列到底在说什么。一旦你理解了接口 → 显示模式 → 输出通道这三层结构绝大多数报错都能自己读出来。2.1 xrandr 输出里每一列的含义xrandr --query的原始输出大概长这样不同硬件名字不同Screen 0: minimum 320 x 200, current 3840 x 1080, maximum 16384 x 16384 eDP-1 connected primary 1920x108000 (normal left inverted right x axis y axis) 309mm x 174mm 1920x1080 60.00* 59.97 59.96 HDMI-1 connected 1920x108019200 (normal left inverted right x axis y axis) 527mm x 296mm 1920x1080 60.00* 50.00 59.94 1280x720 60.00第一行Screen 0里的current 3840 x 1080是整个虚拟画布的尺寸也就是所有屏幕拼起来之后的总宽高maximum 16384 x 16384是这块显卡驱动允许的最大画布。这个最大值非常关键——我遇到过一台老机器最大只给 8192接三块 2K 屏横向排开算下来 7680 是够的但四块就不行了--fb直接报错。每个接口后面跟的那串1920x108000是当前模式加偏移坐标19200表示这块屏在总画布里的左上角位置。下面缩进的是这个接口支持的所有模式星号*是当前生效的加号是该接口的首选模式。真正决定能不能同时点亮的还有一个隐含概念叫 CRTC显示控制器通道。每块显卡的 CRTC 数量有限来源一般是 2 到 6 个。你可以用xrandr --verbose看到相关信息虽然它不直接标 CRTC 数量但当你接了三块屏却有一块怎么也开不了很可能不是线的问题而是 CRTC 不够。这种情况的典型特征是connected有模式列表也有但--mode加上去没反应或者报cannot find crtc。2.2 EDID 与这块屏到底几寸、支持什么EDID 是显示器自己上报的一份自荐信里面写着厂商、型号、物理尺寸、支持的所有分辨率、刷新率和色域信息。xrandr 的模式列表就是从这个文件里读出来的。当系统识别不到正确分辨率或者只能给到一个很别扭的1024x768八成是 EDID 读取失败。查看方式# 先安装解析工具 sudo apt install edid-decode # 找到对应接口 ls /sys/class/drm/ # 比如 card0-HDMI-A-1读它的 edid cat /sys/class/drm/card0-HDMI-A-1/edid | edid-decode如果输出为空或者全是 0就说明内核没拿到 EDID——常见于廉价 HDMI 转接线、KVM 切换器、老式 VGA 转接头、以及某些超长线材。这种情况下系统无法知道屏幕支持什么只能给个保守的默认值。处理办法有几个层次能换线就换线这是最省事的换不了线可以在内核参数里强制启用输出在/etc/default/grub的GRUB_CMDLINE_LINUX_DEFAULT里加videoHDMI-A-1:ee表示强制启用d表示强制禁用然后sudo update-grub重启还可以在 Xorg 下用xrandr --newmode手工造一个模式再加进去第 3 节详解。2.3 带宽与接口4K60 为什么插上只给 30Hz这是新手最容易误判为系统 bug的情况。明明屏幕是 4K 60Hz 的接上之后 xrandr 只给 3840x216030。原因基本都在物理层带宽接口规格常见最大带宽下的典型能力实际表现HDMI 1.44K30Hz接 4K 屏只能 30Hz鼠标拖动有拖影感HDMI 2.04K60Hz正常但开 HDR 或提色深会掉到 30HzDP 1.24K60Hz正常DP 1.44K120Hz / 双 4K60Hz需要 HBR3 认证的线USB-CDP Alt Mode视通道数而定单通道常见 4K30双通道才 60除了接口规格还有两个隐形杀手线材质量和色深设置。一根标称支持 4K的赠品线实际跑 4K60 时会出现间歇黑屏而把色深从 8bit 提到 10bit带宽需求会增加约 25%本来刚好够的链路就会掉档。排查时可以先用低分辨率高刷测试确认链路没问题再逐步往上加xrandr --output HDMI-1 --mode 1920x1080 --rate 60 # 确认没问题再试 xrandr --output HDMI-1 --mode 3840x2160 --rate 60如果高模式报Configure crtc failed或者干脆屏幕黑掉几秒后回退那基本就是带宽不够别再怀疑系统了。3. 三条配置路线怎么选设置面板、命令行、可复现脚本配置多屏有三条路图形界面点、命令行敲、脚本固化。它们不是互斥的而是不同深度的工具用对了能省掉大量重复劳动。3.1 GNOME 设置面板的能力边界打开设置 → 显示器你会看到一个灰底区域上面密密麻麻排着代表各显示器的方块可以拖动位置、选择分辨率、选择刷新率、设置主屏、设置缩放比例、选择是否镜像。对于两块分辨率相同的普通屏这里点两下就完事完全不需要命令行。它的边界也很清楚没有任意的负坐标布局拖动是有限的吸附式排版不能精确控制--pos到像素级不支持给每块屏单独设刷新率后又做复杂旋转Wayland 下没有全局 DPI 设置。另外如果你在设置面板里切了分辨率而这块屏的 EDID 有问题面板有时会卡住或者直接闪回原值。真正让人崩溃的是GNOME 会把显示配置记到用户目录下的一个二进制文件里用monitors.xml这个名字路径~/.config/monitors.xml。机器换线、换扩展坞之后这份记录和实际硬件对不上系统就会一边尝试套用旧配置一边失败表现就是每次开机屏幕都要闪三四次才对。3.2 xrandr 手工布局逐条拆解完整的一条布局命令通常包含这几个参数我用三屏举例xrandr \ --output eDP-1 --mode 1920x1080 --rate 60 --pos 0x0 --primary \ --output HDMI-1 --mode 2560x1440 --rate 60 --pos 1920x0 --rotate normal \ --output DP-1 --mode 1920x1080 --rate 75 --pos 4480x0 --rotate normal拆开看每个参数在干什么--output后面跟的是接口名必须和第 1 节里xrandr --query看到的完全一致大小写都不能错。--mode是分辨率--rate是刷新率。这两个要成对使用因为同一个分辨率下可能有多个刷新率不指定 ratexrandr 会挑一个它认为合适的未必是你要的。--pos是这块屏在整个画布里的左上角坐标单位像素。第三块屏的 x 坐标 第一块宽 第二块宽即 1920 2560 4480。--primary表示主屏决定任务栏、通知、默认弹窗出现在哪块屏上。--rotate支持normal、left、right、inverted竖屏就靠它。也可以用相对位置代替绝对坐标写起来更省心xrandr --output HDMI-1 --right-of eDP-1 --output DP-1 --right-of HDMI-1--right-of、--left-of、--above、--below四个方向够用但它依赖命令执行顺序如果接口名写错或者某块屏当时没连上整条链会直接失败。我更偏好绝对坐标因为可控、可校验、出错了容易定位是哪一块错。关闭笔记本内屏只留外接xrandr --output eDP-1 --off --output HDMI-1 --mode 2560x1440 --primary需要提醒的是--off之后如果显示器没被重新识别内屏可能一直是黑的。恢复靠xrandr --output eDP-1 --auto但如果你是在只有一块屏的情况下执行就得盲敲或者用 SSH 连进去救。这一点在第 5 节会展开。3.3 arandr 出图 autostart 固化手敲 xrandr 命令有个问题每次换环境都要重写一遍。所以我一般用 arandr 做可视化布局 导出脚本这一套sudo apt install arandr arandr它就是一个拖拽式的 xrandr 前端界面里每一块屏都可以拖、可以设分辨率、可以旋转、可以设主屏。摆好之后点Layout → Save As会导出一个.sh文件内容就是第 3.2 节那串命令。这个脚本可以直接跑也可以放起来做开机自启。固化到登录时自动执行最靠得住的方式是放一个 autostart 条目mkdir -p ~/.config/autostart nano ~/.config/autostart/display-layout.desktop写入[Desktop Entry] TypeApplication NameDisplay Layout Exec/home/你的用户名/bin/display-layout.sh X-GNOME-Autostart-enabledtrue NoDisplaytrue脚本内容建议加一个延迟和可用性判断因为登录初期输出设备可能还没枚举完#!/usr/bin/env bash sleep 3 # 没接外屏就直接退出不要误关内屏 xrandr | grep -q ^HDMI-1 connected || exit 0 xrandr --output eDP-1 --off \ --output HDMI-1 --mode 2560x1440 --rate 59.95 --primary很多人把配置写进~/.xprofile然后在 Xorg 会话里发现偶尔不生效原因就是.xprofile执行时机太早。自动启动项是登录后由桌面环境触发的时机更靠后命中率高得多。4. 布局实战坐标、主屏、旋转与混合 DPI 缩放布局不只是把屏排开还要考虑人怎么用。屏幕高度不一致、DPI 不一致的时候物理上一字排开视觉上却会错位鼠标跨屏时跳一下这才是真正影响效率的地方。4.1 --pos 坐标怎么算才不会叠在一起坐标系统的原点(0,0)是整个虚拟画布的左上角每块屏用左上角定位。计算规则很朴素横向排列时后一块屏的 x 前面所有屏宽度之和纵向排列时y 前面所有屏高度之和。举个容易出错的例子主屏 2560x1440 放左边副屏 1920x1080 放右边并且希望两块屏底部对齐。因为高度不同1440 vs 1080副屏的 y 坐标不能是 0得是 1440 - 1080 360xrandr --output DP-1 --mode 2560x1440 --pos 0x0 --primary \ --output HDMI-1 --mode 1920x1080 --pos 2560x360对齐方式决定了鼠标路径是否自然。顶部对齐副屏 y0、底部对齐副屏 y360、垂直居中y180各有各的适用场景我自己是主屏居中、副屏底部对齐因为副屏一般放工具栏和聊天窗口底部齐平看着更整齐。再强调一次画布上限xrandr --query第一行的maximum是硬约束。如果算出来的总宽高超过它命令会失败报错信息通常是screen cannot be larger than 16384x16384这一类。这时候只能降分辨率或者减少屏幕数量。4.2 分数缩放该不该开Ubuntu 22.04 默认的显示设置里只有 100%、200% 这种整数缩放想要 125%、150% 得手动开启实验特性gsettings set org.gnome.mutter experimental-features [scale-monitor-framebuffer]设置完注销重登显示器里就会出现 125%、150%、175% 这些选项。这个功能在 Wayland 下体验不错在 Xorg 下也能用但它是有代价的部分 X11 老应用会出现模糊、字体重影、界面边缘发虚。原因是应用按 100% 渲染到一张位图上再由合成器整体放大等于给整个窗口做了一次缩放插值。我的经验是分场景屏幕情况建议缩放原因双 1080p24 寸左右100%没必要缩放开了反而占空间27 寸 2K100% 或 125%100% 字偏小125% 比较舒服27 寸 4K150% 或 200%100% 完全没法看笔记本 14 寸 1080p 外接 27 寸 2KWayland 下分别设Xorg 下只能统一混合 DPI 的核心痛点只调字体不调界面还有一个折中方案对性能影响最小gsettings set org.gnome.desktop.interface text-scaling-factor 1.254.3 双屏不同 DPI 的实际调法混合 DPI 是 Xorg 的死穴。Xorg 的缩放是全局的只能有一个整体比例笔记本内屏 14 寸 1080p 设 125%外接 27 寸 2K 也会被一起拉到 125%后者就变得巨大无比。Wayland 下每块屏可以独立设缩放这也是我建议笔记本用户留在 Wayland 的主要原因。但 Wayland 也有它的问题某些基于 X11 的工具类应用截图、录屏、老式 IDE在高分屏上会显示得很小因为它们拿不到正确的缩放信息。这种时候可以单独给这些程序加环境变量GDK_SCALE2 QT_SCALE_FACTOR2 程序名把这一行写进.desktop文件的Exec前面或者包一层启动脚本基本能解决大部分显示异常。还有一种情况是竖屏 高分屏组合。竖屏旋转之后--pos的坐标要按旋转后的宽高算不是原来的。比如 2560x1440 转成竖屏实际占位是 1440 宽 x 2560 高写坐标时按后者算否则会和相邻屏重叠。5. 故障排查实录识别不到、黑屏、闪、配置丢故障排查我习惯按从物理到逻辑的顺序走线 → 接口 → 内核 → 驱动 → 会话 → 配置。每一步都有对应的验证手段别一上来就重装驱动。5.1 屏压根没出现在列表里现象xrandr --query里只有内屏外接接口显示disconnected或者干脆连接口名都没有。第一步查内核有没有看到这个接口sudo dmesg | grep -iE drm|hdmi|displayport|edid正常插入时会有类似[drm] HDMI-A-1: EDID block 0 read这样的日志。如果一行都没有说明信号根本没到显卡问题在物理层换线、换接口、换显示器电源、把线两头对调试试。如果日志里出现EDID checksum invalid或者Failed to read EDID说明线通了但数据不对常见于长线、转接头、KVM。第二步确认是不是被内核参数禁用了。有些机器出厂配置里带了videoHDMI-A-1:d或者你在折腾时自己加过检查一下cat /proc/cmdline第三步考虑强制启用# 临时测试不用重启 sudo modprobe -r i915 sudo modprobe i915 # 或者改 grub 加 videoHDMI-A-1:e 后 update-grub 重启注意modprobe -r i915会让显示瞬间黑掉务必在能 SSH 进去或者有第二台设备可查的情况下操作别把自己关在门外。5.2 出现在列表里但没信号现象xrandr里能看到HDMI-1 connected也有一堆模式但执行--mode之后屏幕黑着或者显示无信号。这种情况优先怀疑模式不匹配。显示器虽然上报了某个分辨率但当前色深、刷新率组合超出了链路能力。降级测试xrandr --output HDMI-1 --mode 1920x1080 --rate 60 --depth 24如果低分辨率能亮高分辨率不亮就是带宽问题第 2.3 节。如果所有模式都不亮但connected一直在尝试强制重置一次输出xrandr --output HDMI-1 --off sleep 2 xrandr --output HDMI-1 --auto还有一类隐蔽情况主屏被设成了不存在的那块。当你--primary到一块实际关掉的屏上桌面会渲染到虚空看起来像黑屏。这种时候按CtrlAltF3切到 TTY登录后把 primary 改回来DISPLAY:0 xrandr --output eDP-1 --primary --auto5.3 重启或拔插后配置丢失现象手动配好的布局重启就回到默认或者拔掉扩展坞再插回来屏幕位置全乱。原因有两层。一是 xrandr 的修改是运行时的不写进任何持久化文件重启必然丢。二是 GNOME 自己有~/.config/monitors.xml它会尝试恢复上次配置但那份文件是按显示器指纹匹配的换了接口、换了线序、换了扩展坞指纹对不上就退回默认。解决办法就是第 3.3 节的 autostart 脚本或者用 autorandr 做配置文件管理sudo apt install autorandr # 配好一个布局后保存 autorandr --save office # 换到家里再配一次 autorandr --save home # 之后根据当前接的屏自动匹配 autorandr --changeautorandr 的原理是把当前所有已连接显示器的 EDID 指纹组合起来做哈希每个 profile 记住一组指纹对应的布局。插上扩展坞指纹变成 office 那组--change就套用 office 布局。把autorandr --change放进登录脚本或者配一个 systemd user service 在会话启动时跑一次基本能解决 90% 的位置乱掉问题。5.4 常见问题速查表现象优先怀疑验证命令处理方向接口显示 disconnected线材/接口/供电sudo dmesg | grep -i drm换线换口检查显示器输入源有 connected 无模式列表EDID 读取失败cat /sys/class/drm/card0-*/edid | edid-decode换线或内核参数强制启用加 mode 报 crtc 错误CRTC 数量不足xrandr --verbose | grep -i crtc降分辨率、减屏数、换显卡高分辨率黑屏链路带宽不足逐级降分辨率测试换 DP 线、降色深、降刷新率重启后布局丢失无持久化配置cat ~/.config/monitors.xmlautostart 脚本 / autorandr鼠标跨屏跳跃高度或 DPI 不对齐xrandr --listmonitors调整--pos的 y 值界面模糊分数缩放 X11 应用echo $XDG_SESSION_TYPE换 Wayland或关分数缩放闪屏间歇黑屏线材临界、供电不稳长时间dmesg -w观察缩短线长、换认证线材、加供电6. 不同显卡的差异化处理同样是 Ubuntu 22.04Intel 核显、AMD 独显、NVIDIA 独显在多屏上的行为差别不小尤其是最后一家多屏配置踩坑概率明显更高。6.1 Intel 与 AMD开源栈省心但要看内核版本Intel 用i915驱动AMD 用amdgpu这两家都走内核自带的开源栈装机即用多屏配置基本就是 xrandr 那套不需要额外组件。Ubuntu 22.04 默认内核 5.15对新的接口标准比如 DP 2.0、HDMI 2.1支持有限如果机器比较新、接口比较前沿可以考虑装更新的 HWE 内核sudo apt install linux-generic-hwe-22.04需要留意的是AMD 的 DSC显示流压缩支持。高分辨率高刷屏在单接口带宽不够时硬件会启用压缩来塞进去但如果内核或驱动对 DSC 支持不完整表现就是显示器规格明明支持 4K144实际只能跑到 4K60 或者 4K100。这种问题通常不是配置错是支持度问题能做的只有升级内核和固件或者降一档使用。另一类值得知道的现象叫AMD 多屏显存频率锁定。部分显卡接多屏尤其是刷新率不一致的多屏时显存会一直跑在高频导致待机功耗和温度偏高。这是驱动行为不是故障配置层面改不了只需要心里有数。6.2 NVIDIA 专有驱动的额外步骤NVIDIA 的专有驱动在多屏上多一层东西nvidia-settings。它有一套自己的 X Server Display Configuration 面板能做的事比 xrandr 多一点比如单独设置每块屏的旋转、色深、Sync to VBlank但两边配置容易打架——你在 nvidia-settings 里改了xrandr 那边看到的可能还是旧值。我的用法是布局用 xrandr 或 GNOME 面板需要精细调色深、抗撕裂时用 nvidia-settings并且改完之后在 nvidia-settings 里点一次 Save to X Configuration File把它写到/etc/X11/xorg.conf这样重启也能保留。sudo nvidia-settings # 在 X Server Display Configuration 里配好后 # 点 Save to X Configuration File路径填 /etc/X11/xorg.conf要注意的是一旦有了xorg.confxrandr 的某些修改会被这份静态配置覆盖出现改了没反应的情况。排查时先看看这个文件存不存在ls -l /etc/X11/xorg.conf如果里面是历史遗留配置而你又不需要它可以考虑备份后删除回到纯运行时配置的模式反而更灵活。另外NVIDIA 在 Wayland 下的支持在 22.04 上不算完善很多情况下 GDM 会自动禁用 Wayland 会话。你在登录界面看不到 Ubuntu 只看到 Ubuntu on Xorg很可能就是这个原因。6.3 双显卡笔记本的外接口归属问题这是个特别典型的坑笔记本有 Intel 核显 NVIDIA 独显HDMI 接口在物理上直连独显但系统默认用核显渲染桌面。结果就是插上 HDMI 之后xrandr --listproviders里能看到两个 provider但直接--output HDMI-1不起作用因为 HDMI-1 属于独显那个 provider。正确做法是先做 provider 输出源绑定# 看有哪些 provider0 通常是主核显1 是独显 xrandr --listproviders # 把独显的输出能力借给核显用 xrandr --setprovideroutputsource 1 0 xrandr --auto如果报错说 provider 不支持可能需要用prime-select切到性能模式prime-select query sudo prime-select nvidia # 注销重登代价是整机功耗上升、续航下降。所以这类机器我一般建议只在需要外接屏时切独显平时用核显或者干脆在 BIOS 里看看有没有MUX Switch / 独显直连开关有的话直接切能省掉这一层软件折腾。7. 特殊场景合盖、扩展坞、USB 转显、无头远程真实使用场景比实验室复杂得多。笔记本合盖当主机、每天插拔扩展坞、用 USB 转接线接第三块屏这些才是日常。7.1 笔记本合盖不休眠默认行为是合盖就睡接外屏当台式机用的时候必须改掉。两个地方要改缺一不可# 一、systemd 层面 sudo nano /etc/systemd/logind.conf # 改成 HandleLidSwitchignore HandleLidSwitchExternalPowerignore HandleLidSwitchDockedignore sudo systemctl restart systemd-logind# 二、GNOME 层面 gsettings set org.gnome.settings-daemon.plugins.power lid-close-ac-action nothing gsettings set org.gnome.settings-daemon.plugins.power lid-close-battery-action nothing只改 systemd 不改 GNOME桌面环境还是会拦截只改 GNOME 不改 systemdsystemd 依然会把机器挂起。两处都改完再合盖测试一次。注意合盖之后内屏其实是物理断电的但系统里eDP-1可能仍然显示connected。如果你在合盖状态下执行xrandr --output eDP-1 --primary桌面会渲染到一块看不见的屏上表现就是外接屏只剩鼠标指针。所以合盖当主机用时记得把 primary 显式设到外接屏。7.2 扩展坞热插拔与配置自动切换每天上下班插拔扩展坞的人最烦的就是插上之后布局要重配。除了第 5.3 节的 autorandr还有一个更省事的思路按场景准备两套脚本用快捷键或者桌面图标手动触发。比如我给自己准备了两套# ~/bin/layout-office.sh —— 扩展坞双屏 xrandr --output eDP-1 --off \ --output DP-1 --mode 2560x1440 --primary --pos 0x0 \ --output DP-2 --mode 1920x1080 --pos 2560x0 # ~/bin/layout-mobile.sh —— 只留内屏 xrandr --output eDP-1 --auto --primary \ --output DP-1 --off --output DP-2 --off然后绑到 GNOME 的自定义快捷键上设置 → 键盘 → 自定义快捷键插上扩展坞按一下拔掉再按一下。比等 autorandr 自动判断更快也不会误判——有时候扩展坞插着但显示器电源关了自动判断会认为没接手动触发更可控。扩展坞还有两个常见坑一是USB-C 通道分配有些扩展坞在插了 USB 3.0 移动硬盘之后显示带宽被挤压导致高刷降档或者屏幕闪二是供电不足尤其是带 4K 屏的扩展坞笔记本本身供电不够时屏幕会间歇性黑屏。这两个都不是软件能解决的属于硬件选型和供电规划问题。7.3 USB 转显与无头虚拟屏有些机器接口就那么多想接第三块屏只能靠 USB 转显方案。这类方案本质是把画面压缩后通过 USB 传给外置芯片解码走的是 evdi 这类内核模块需要装对应驱动。它的特点是CPU 占用会明显上升看视频、拖动窗口时能感觉到延迟不适合做视频剪辑或者高刷游戏但做文字工作、挂文档、看监控完全够用。配置上它和普通接口没区别出现在 xrandr 列表里就当普通输出用。需要注意的是这类设备不参与 GPU 硬件加速某些应用3D 渲染、部分播放器拖过去会出现黑屏或者软件渲染告警。解决办法一般是在该应用的配置里关闭硬件加速或者就别把这类窗口拖过去。还有一个冷门但很有用的场景无头机器远程访问。服务器没有显示器但你需要一个完整的桌面环境来跑 GUI 程序。这时候可以创建虚拟显示器# 创建一个 1920x1080 的虚拟 monitor xrandr --setmonitor VIRTUAL1 1920/508x1080/28600 none然后配合 VNC 之类的桌面共享工具就能看到一个不存在但能用的屏幕。这种方法在 Xorg 会话下有效Wayland 下不适用。做 CI 跑 GUI 测试的团队经常用这一套比插一个 HDMI 假负载俗称 dummy plug本质是骗过 EDID 检测更干净。8. 长期维护的几个习惯配置多屏这件事一次配好只是开始真正麻烦的是半年后内核升级、驱动更新、换了根线之后一切又不对了。几个习惯能省掉不少重复劳动。8.1 把你的显示配置版本化我现在的做法是所有跟显示相关的脚本都放在~/bin/display/目录下用 git 管理机器上不同场景的布局各一个文件文件名带上场景名office、home、projector、single。换机器或者重装系统把目录拉下来.desktop文件一放五分钟恢复全部布局。同时把几个关键信息记录下来出问题时对照# 记录当前硬件环境 { echo session ; echo $XDG_SESSION_TYPE echo gpu ; lspci | grep -E VGA|3D echo outputs ; xrandr --listmonitors echo providers ; xrandr --listproviders echo kernel ; uname -r } ~/display-info.txt这份文件在求助、对比新旧机器、判断是不是升级之后变的时特别有用。我遇到过好几次配置突然失效最后靠对比这份记录发现是内核从 5.15 升到 5.19 后接口命名规则变了HDMI-1变成了HDMI-A-1脚本里的名字全部对不上。8.2 升级前后的回归检查清单内核、显卡驱动、桌面环境这三样任意一个升级都可能影响多屏。升级完做一遍这几个检查比出了问题再翻日志快得多echo $XDG_SESSION_TYPE确认会话类型没被改掉——有几次驱动更新后 GDM 自动禁用了 Wayland用户以为是自己切错了。xrandr --listmonitors确认接口名没变、数量对得上。dmesg | grep -i edid确认没有新的 EDID 读取失败。手动跑一次布局脚本看是否有报错。重启一次确认 autostart 仍然生效。还有一个容易被忽略的点别把xorg.conf当成必须存在的文件。很多人从网上抄了一段配置写进/etc/X11/xorg.conf之后所有 xrandr 修改都被静态配置压着怎么改都不对。排查时先看看这个文件在不在内容是不是很久以前的。现代显卡绝大部分情况下不需要手写 xorg.conf让系统自动检测反而更省事。最后分享一个我用了很久的小技巧如果你的机器接了三块屏以上把布局脚本的第一行改成set -x执行时会把每条命令和结果打印出来某一块屏失败时一眼就能看出是哪一步、报了什么。这个习惯帮我省掉了很多次整条命令没反应但不知道错在哪的困惑尤其是在远程指导别人的时候让对方把set -x的输出贴过来比问十句你那边什么情况都管用。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑