我当前的设置是三个显示器,连接方式如下(从左到右依次列出显示器):
GPU0(nVidia GTX 280):
- 戴尔 2405FPW(1920x1200)
- 戴尔 U2410(1920x1200)
GPU1(nVidia 210):
- 戴尔 2405FPW(1920x1200)
在 Windows 7 上效果很好,但在 Linux 上效果就差了。我似乎只有三个真正的选择:
- 将所有三个监视器作为单独的 X 屏幕运行,我获得了硬件加速,但由于它们都是独立的 X 会话,所以我无法在它们之间移动窗口,并且在任何给定时间只能在一个监视器上打开 Firefox。
- 在 TwinView 模式下在 GPU0 上运行这两个显示器,并将 GPU1 作为单独的 X 屏幕。限制与 1 相同,但至少两个显示器可以正常工作。不过,我确实遇到了一个问题,Linux 偶尔会将 GPU0 上的两个显示器视为一个大显示器。
- 启用 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.com/linux-attitude/un-bureau-etendu-sur-trois-ecrans-avec-deux-cartes-graphiques/
答案2
您基本上已经回答了自己的问题。目前在 Linux 中这是不可能的,因为 Linux 对多 GPU 没有任何适当的支持。
Linux 的多 GPU 支持已经建议作为项目为 Google Summer of Code 而设。但在我看来,它不太可能在短期内准备好迎接黄金时段。