1. 问题初现:当双屏遇上黑屏,我的排查起点
那天我正兴冲冲地给主力开发机接上第二块显示器,准备扩展工作空间,结果一开机就傻眼了。Ubuntu 22.04 的登录界面只在一块屏幕上亮着,另一块屏幕漆黑一片,指示灯却显示有信号输入。我进到系统里,打开“设置”->“显示”,里面果然只识别到一块屏幕,无论怎么点“检测显示器”都没用。这场景太熟悉了,但凡在Linux下用过NVIDIA显卡配多屏的朋友,估计都踩过这个坑。问题不在于硬件,因为两块屏幕单独插都能亮;也不在于驱动,因为 nvidia-smi 命令明明显示驱动(我装的是535版本)加载得好好的。问题就出在那个看不见摸不着,但又至关重要的环节——图形显示服务器X11与NVIDIA驱动之间的“握手”协议上。
很多朋友一遇到黑屏,第一反应就是重装驱动,或者切换lightdm、gdm3这些显示管理器。我一开始也这么干,折腾了大半天,驱动卸了装、装了卸,桌面环境来回切换,结果问题依旧。后来我灵机一动,用U盘启动了一个全新的Ubuntu Live系统,接上双屏,嘿,两块屏幕都正常显示了!这直接证明了硬件和基础驱动都没毛病,问题肯定出在我这个用了很久、经过多次系统备份还原的“老”系统上。它的某些配置“记忆”还停留在过去,和新环境产生了冲突。这个冲突的焦点,十有八九就是那个经典的配置文件——/etc/X11/xorg.conf。接下来的排查,就像一场侦探游戏,目标就是找出这个配置文件里到底写了什么“过时”的指令,让我的第二块屏幕始终无法被正确唤醒。
2. 核心疑犯:深入理解 xorg.conf 的前世今生
要破案,得先了解“嫌疑人”。xorg.conf 这个文件,可以说是Linux图形界面的“上古”配置文件了。在早些年,X Window System(也就是X11)没法很好地自动检测所有显卡和显示器,所以需要手动编写这个文件来告诉系统:你有几块显卡、分别插在哪个PCI插槽上、连接了什么型号的显示器、用什么分辨率刷新率等等。你可以把它想象成电脑启动图形界面时必须阅读的一份“硬件接线图”。
然而,时代变了。现在的Linux发行版,包括Ubuntu,其X11服务器已经非常智能,能够通过内核和驱动自动探测到绝大多数硬件并应用合理的默认设置。因此,在绝大多数新安装的、运行良好的系统上,/etc/X11/xorg.conf 这个文件根本就是不存在的。系统更倾向于使用位于 /usr/share/X11/xorg.conf.d/ 目录下的那些模块化的、更灵活的配置片段。只有当用户手动运行了像 nvidia-xconfig 这样的工具,或者某些显卡驱动安装程序在特定情况下,才会自动生成一个全局的 xorg.conf 文件来覆盖自动检测的规则。
这就引出了问题的关键:这个自动生成的文件,是一个“静态快照”




