认识
想象一下,有两台显示器,一台放在左边,一台放在右边。通常情况下,X11 会将它们视为两个完全独立的“屏幕”,进而我们的鼠标无法在两个屏幕之间移动,窗口也无法从一个屏幕拖到另一个屏幕。
Xinerama 是项允许将多个独立的物理显示器合并成一个单一、虚拟大桌面的老旧技术。所以,当今天听到 Xinerama 时,基本上可以将其理解为 Linux 多显示器发展史上的一个重要遗迹。
组成
拼接显示器技术
Xinerama 的作用就是“欺骗”操作系统和应用程序,让它们认为这两个物理显示器其实是一个超大桌面的一部分。这个虚拟桌面的宽度是两个显示器宽度之和,高度则以最高那个显示器的高度为准。
- 物理状态:两个独立的显示器。
- 逻辑状态(Xinerama 启用后):一个 3840×1080 的虚拟桌面(假设两个显示器都是 1920×1080)。
技术背景与定位
- 属于 X11 体系:Xinerama 是 X Window System 的一个扩展,具体来说是 X11 的一个扩展。
- 老旧技术:它是在多显示器还不是很普遍的年代开发的。它的设计相对简单,主要解决的是“拼接”问题。
- 与“双头显示”的关系:在早期,一张显卡支持两个输出(即“双头”)是比较高级的功能。Xinerama 是实现这种多显示器设置的主流方式之一。
性质
- 无缝体验:窗口可以自由地在多个显示器之间拖动,鼠标也可以无边界移动。
- 跨显示器最大化:你可以将一个窗口最大化,使其铺满所有显示器,形成一个超宽的显示区域。
- 应用兼容性:针对应用程序来说,它只看到了一个巨大的桌面,因此大多数程序无需做任何修改就能正常工作。
改进
缺点 and 局限性
- 性能问题:Xinerama 是在 X Server 层面实现的,所有涉及跨显示器的渲染操作(比如拖动一个窗口跨越两个屏幕)都可能需要经过主 X Server 处理,可能导致性能瓶颈,尤其是在使用硬件加速时。
- 混合输出模式困难:由于它创建的是一个统一的虚拟桌面,所有显示器的刷新率必须相同。你很难让一个 60Hz 的显示器和另一个 144Hz 的显示器在 Xinerama 模式下都以各自的原生刷新率工作。
- 无法独立设置:你无法为合并后的虚拟桌面中的某个“区域”(即某个物理显示器)单独设置色彩深度、刷新率(如上所述)等。
- 对现代显卡支持不佳:现代显卡(尤其是 NVIDIA 和 AMD)有自己更先进的、绕过 Xinerama 的多显示器技术。
现代替代品:RandR
由于 Xinerama 的种种局限性,一个更现代、更灵活的技术取代了它,那就是 RandR 技术。其为当前 Linux 桌面环境管理多显示器的标准和推荐方式。
现在,当使用现代桌面环境(例如,GNOME, KDE Plasma, Ubuntu,……)时,其背后的图形设置工具几乎都是在使用 RandR 来管理你的显示器。
RandR 与 Xinerama 的主要区别:
| 特性 | Xinerama | RandR |
|---|---|---|
| 架构 | X Server 扩展,创建单一虚拟屏幕 | 动态配置和管理多个独立屏幕 |
| 性能 | 相对较差,跨屏操作有开销 | 更好,由驱动和硬件直接管理 |
| 灵活性 | 差,所有显示器必须同步 | 极高,每个显示器可独立设置分辨率、刷新率、旋转 |
| 混合刷新率 | 不支持 | 支持 |
| 热插拔 | 支持不佳,通常需要重启 X | 完美支持 |
| 命令行工具 | 通常通过 `xorg.conf` 文件配置 | `xrandr` |
如何判断和使用?
- 检查当前状态:
在终端输入 xrandr,如果看到多个以 CONNECTED 开头的行,并且它们有不同的名称(如 HDMI-1,DP-1),说明你正在使用 RandR。
如果使用 xinerama,可能需要通过 xdpyinfo 等命令来查看。
如果使用 xinerama,可能需要通过 xdpyinfo 等命令来查看。
- 启用 Xinerama:
强烈不推荐,除非你有非常特殊的遗留需求。启用它需要在 X11 的配置文件 /etc/X11/xorg.conf 或 /etc/X11/xorg.conf.d/ 下的某个文件中添加 Section,并设置 Option “Xinerama” “on”。对于绝大多数用户,让系统自动通过 RandR 管理是最好的选择。