在 Linux 中启用硬件加速和 Xinerama 以实现多显示器/多 GPU

在 Linux 中启用硬件加速和 Xinerama 以实现多显示器/多 GPU

我当前的设置是三个显示器,连接方式如下(从左到右依次列出显示器):

GPU0(nVidia GTX 280):
- 戴尔 2405FPW(1920x1200)
- 戴尔 U2410(1920x1200)
GPU1(nVidia 210):
- 戴尔 2405FPW(1920x1200)

在 Windows 7 上效果很好,但在 Linux 上效果就差了。我似乎只有三个真正的选择:

  1. 将所有三个监视器作为单独的 X 屏幕运行,我获得了硬件加速,但由于它们都是独立的 X 会话,所以我无法在它们之间移动窗口,并且在任何给定时间只能在一个监视器上打开 Firefox。
  2. 在 TwinView 模式下在 GPU0 上运行这两个显示器,并将 GPU1 作为单独的 X 屏幕。限制与 1 相同,但至少两个显示器可以正常工作。不过,我确实遇到了一个问题,Linux 偶尔会将 GPU0 上的两个显示器视为一个大显示器。
  3. 启用 Xinerama 后,一切都按我想要的方式运行,但是硬件加速消失了,并且显示呈现 Windows 95 风格,不流畅。

我的理想解决方案是让所有屏幕都像在 Xinerama 下一样工作,而不受禁用硬件加速的限制。我甚至不在乎这是否意味着在 GPU0 上渲染所有三个屏幕并以某种方式将第三个显示器的显示外包给 GPU1,只要可行就行。

我的问题是:有什么方法可以实现这一点吗?我觉得我的用例不太广泛,不应该至少有某种形式的支持(除了上面介绍的三个有限选项之外),还是我最好的选择是忍受它并拿起一张更好的卡来替换两张卡,这样它本身就可以处理三个输出?

答案1

这是我在 Linux Mint 上使用 XFCE 为相同类型的设置编写的脚本。不使用 Xinerama。我的设置是第一台显示器纵向显示,第二台和第三台显示器横向显示。运行良好。启动时暂停 5 秒是因为它设置为从会话开始,如果运行得太早,则无法正常工作。

还请注意,在我的特定示例中,我必须将屏幕对齐在底部,因为其中一个屏幕高于其他屏幕。对齐在顶部并没有给出预期的行为。

最后,使用 xrandr 是让它按照我想要的方式工作的唯一方法。

使用您自己的设置尝试一下

#!/bin/bash
sleep 5
xrandr --size 5040x1920 --output HDMI-0 --mode 1920x1080 --pos 1200x840 --primary \
--output DVI-1-1 --mode 1920x1080 --pos 3120x840 \
--output DVI-0 --mode 1920x1200 --pos 0x0 --rotate left

我在我的博客上发表了一篇文章,但是这是法语的:https://akim.sissaoui.c​​om/linux-attitude/un-bureau-etendu-sur-trois-ecrans-avec-deux-cartes-graphiques/

答案2

您基本上已经回答了自己的问题。目前在 Linux 中这是不可能的,因为 Linux 对多 GPU 没有任何适当的支持。

Linux 的多 GPU 支持已经建议作为项目为 Google Summer of Code 而设。但在我看来,它不太可能在短期内准备好迎接黄金时段。

相关内容