我希望那里有一些 xorg 专家。
我正在尝试在 Linux 中设置三显示器。我有 2 个液晶显示器和一台电视,分辨率各不相同。我使用 2 个显卡:9800 GTX 和 7900Gt。
我见过很多关于人们尝试实现这一目标的帖子,但在每种情况下,他们要么放弃,要么 Xinerama 神奇地解决了他们所有的问题。
基本上,我的主要问题是无法让 Xinerama 工作。每次我在选项中打开它时,我的机器就会陷入无休止的启动循环。如果我禁用 Xinerama,我就只有三个 Xorg 屏幕,但我无法将窗口从一个屏幕拖到另一个屏幕。
我可以毫无问题地将 2 个液晶显示器放在 Twinview 上,将电视放在单独的 Xorg 屏幕上。但我不太喜欢这个解决方案。我宁愿将它们全部放在单独的屏幕上,然后使用 Xinerama 将它们拼接在一起。
有人做过这个吗?
这是我的 xorg.conf,供参考。
附言:我在 Windows XP 中花了整整 30 秒才完成设置!附言:我曾在某处看到过 randr 或许可以解决我的问题?但我不太清楚该如何解决?
Section "Monitor"
Identifier "Main1"
VendorName "Acer"
ModelName "H233H"
HorizSync 40-70
VertRefresh 60
Option "dpms"
EndSection
#Section "Monitor"
# Identifier "Main2"
# VendorName "Acer"
# ModelName "AL2216W"
# HorizSync 40-70
# VertRefresh 60
# Option "dpms"
#EndSection
Section "Monitor"
Identifier "Projector"
VendorName "BenQ"
ModelName "W500"
HorizSync 44.955-45
VertRefresh 59.94-60
Option "dpms"
EndSection
Section "Device"
Identifier "Card1"
Driver "nvidia"
VendorName "nvidia"
BusID "PCI:5:0:0"
BoardName "nVidia Corporation G92 [GeForce 9800 GTX+]"
Option "ConnectedMonitor" "DFP,DFP"
Option "NvAGP" "0"
Option "NoLogo" "True"
#Option "TVStandard" "HD720p"
EndSection
Section "Device"
Identifier "Card2"
Driver "nvidia"
VendorName "nvidia"
BusID "PCI:4:0:0"
BoardName "nVidia Corporation G71 [GeForce 7900 GT/GTO]"
Option "NvAGP" "0"
Option "NoLogo" "True"
Option "TVStandard" "HD720p"
EndSection
Section "Module"
Load "glx"
EndSection
Section "Screen"
Identifier "ScreenMain-0"
Device "Card1-0"
Monitor "Main1"
DefaultDepth 24
Option "Twinview"
Option "TwinViewOrientation" "RightOf"
Option "MetaModes" "DFP-0: 1920x1080; DFP-1: 1680x1050"
Option "HorizSync" "DFP-0: 40-70; DFP-1: 40-70"
Option "VertRefresh" "DFP-0: 60; DFP-1: 60"
#SubSection "Display"
# Depth 24
# Virtual 4880 1080
#EndSubSection
EndSection
Section "Screen"
Identifier "ScreenProjector"
Device "Card2"
Monitor "Projector"
DefaultDepth 24
Option "MetaModes" "TV-0: 1280x720"
Option "HorizSync" "TV-0: 44.955-45"
Option "VertRefresh" "TV-0: 59.94-60"
EndSection
Section "ServerLayout"
Identifier "BothTwinView"
Screen "ScreenMain-0"
Screen "ScreenProjector" LeftOf "ScreenMain-0"
#Option "Xinerama" "on" # most important option let you window expand to three monitors
EndSection
答案1
可怕的是,你和我拥有几乎完全相同的设置。我有一台 9800GTX Ultra 和一台 7900GS KO。我的问题是 Xinerama 无法与如此不同的 GPU 配合使用。Xrandr 旨在取代 xinerama,但 xinerama 最大的功能之一(将屏幕拼接在一起)由于某种原因没有保留下来。
使用 nvidia 方法,我基本上得到了你想要的结果:双显示器 + 另一台显示器。我的问题是,使用这种方法,没有一个窗口管理器可以确定左侧实际上有两个显示器,因此最大化的窗口(以及面板之类的东西)会延伸到两个显示器上
我希望 nouveau 能成为我的救世主,但奇怪的是,无论我做什么,我都无法使用 nouveau 驱动程序(使用多个版本(默认版本、来自 PPA 的版本、从源代码构建的版本))使双显示器工作。
我知道至少有几个人的设置和我们有类似的设置,至少有一个朋友使用 fakexinerama 使他的设置能够正常工作,基本上就是对 X 服务器撒谎,让其了解监视器的情况,强迫它工作。
希望我的意见能帮助您找到更好的解决方案。如果您发现任何新信息,请及时告知我们!
答案2
这是我为三显示器设置而编写的 xorg.conf。它设置为两个屏幕,我最初并不喜欢,但现在我对此非常满意。它允许我像普通的双显示器设置一样运行两个液晶显示器,并且仍然在我的投影仪上显示电影和其他内容,所有这些都来自同一台计算机。我也可以在双显示器设置上工作,而不必打开投影仪,因为偶尔会在该屏幕上启动一个窗口,就像它们都是相同的 xscreen 一样。
从技术上讲,我可以运行第四台显示器!不过,我认为在尝试之前我更有可能投资购买新的 CPU 和主板。这取决于星际争霸 2 的发布时间。
# nvidia-settings: X configuration file generated by nvidia-settings
# nvidia-settings: version 1.0 (buildd@crested) Sun Feb 1 20:25:37 UTC 2009
# edited by me (brendan) 2010-04-18
# NVIDIA magic (something about glx-new?)
Section "Module"
Load "glx"
EndSection
Section "Extensions"
Option "Composite" "Enable"
EndSection
# Keyboards and Mice
Section "InputDevice"
# generated from default
Identifier "Keyboard0"
Driver "kbd"
EndSection
Section "InputDevice"
# generated from default
Identifier "Mouse0"
Driver "mouse"
Option "Protocol" "auto"
Option "Device" "/dev/psaux"
Option "Emulate3Buttons" "no"
Option "ZAxisMapping" "4 5"
EndSection
# Physical Monitors:
Section "Monitor"
Identifier "Monitor0"
VendorName "Acer"
ModelName "Acer H233H"
HorizSync 40.0 - 70.0
VertRefresh 60.0
EndSection
Section "Monitor"
Identifier "Monitor1"
VendorName "Acer"
ModelName "Acer AL2216W"
HorizSync 40.0 - 70.0
VertRefresh 60.0
EndSection
Section "Monitor"
Identifier "Monitor2"
VendorName "BenQ"
ModelName "BenQ W500"
HorizSync 44.955 - 45.0
VertRefresh 59.94 - 60.0
EndSection
# Physical Video Cards/Ports:
Section "Device"
Identifier "Device0"
Driver "nvidia"
VendorName "NVIDIA Corporation"
BoardName "GeForce 9800 GTX+"
# Screen 0
BusID "PCI:5:0:0"
EndSection
Section "Device"
Identifier "Device2"
Driver "nvidia"
VendorName "nVidia Corporation"
BoardName "GeForce 7900 GT/GTO"
BusID "PCI:4:0:0"
Option "TVStandard" "HD720p"
EndSection
#### Default 3-monitor Layout 'default'
Section "ServerLayout"
Identifier "Default Layout"
Screen 0 "Screen0" 0 0
Screen 1 "Screen2" LeftOf "Screen0"
InputDevice "Keyboard0" "CoreKeyboard"
InputDevice "Mouse0" "CorePointer"
EndSection
Section "ServerFlags"
Option "Xinerama" "0"
EndSection
# Virtual Screens
Section "Screen"
Identifier "Screen0"
Device "Device0"
Monitor "Monitor0"
DefaultDepth 24
Option "TwinView" "1"
# Option "NoTwinViewXineramaInfo"
Option "metamodes" "DFP-0: 1920x1080 +1680+0, DFP-1: 1680x1050 +0+30"
SubSection "Display"
Depth 24
EndSubSection
EndSection
Section "Screen"
Identifier "Screen2"
Device "Device2"
Monitor "Monitor2"
DefaultDepth 24
Option "TwinView" "0"
Option "metamodes" "1280x720"
SubSection "Display"
Depth 24
EndSubSection
EndSection
答案3
我也遇到了同样的问题,4 个显示器,2 个相同的视频卡,并且被迫使用 2 个 Xscreens。
我发现的解决方案是购买一些硬件,但现在运行良好(3 个 30 英寸显示器,垂直方向,Slackware64)。看来 X-windows 必须将给定 Xsceen 上的所有显示器放在同一张视频卡上。如果您尝试使用您的设置,您会发现您不能将每张视频卡上的 1 个显示器作为 1 个 Xscreen,将每张视频卡上的第二个显示器作为另一个 Xscreen。它们必须放在同一张视频卡上。
所以我买了一块显卡,MSI Radeon HD6990,它有 4 个 mini-display 端口和 1 个双链路 DVI 端口。我不得不使用 mini-dp 端口三个全部显示器——使用其中一个显示器的 DVI 端口意味着需要购买一个双链路有源适配器,价格为 99.00 美元。请注意,视频卡附带的有源适配器显示它处于活动状态,但它是单链有源适配器,直到我看到双链路有源 DVI 适配器的图片时,我才意识到这个区别——它有一个 USB 电缆用于供电,还有一个 DP 电缆。随卡提供的电缆将工作,但会限制您的屏幕分辨率更小。
这是题外话,但在使用 2 个 Xscreens 运行时,我只发现 2 个 Linux 程序可以在不同的 X screens 之间切换:Gimp 在其中一个菜单上有它,但它只将主图形屏幕切换到另一个 Xscreen--菜单保持不变,而 XEmacs 在菜单上有它并且工作得很好。
答案4
我花了很长时间来解决我的 Red Hat EL5 系统(配有 ATI Radeon 6350 双头显卡)的这个问题。我可以将图标从一个屏幕拖到另一个屏幕,但每个屏幕上仍然有两个启动栏,我无法将窗口从一个屏幕拖到另一个屏幕。我需要的是 xorg.conf 文件的“ServerLayout”部分中的以下条目。
选项“Xinerama”
现在我只有一个启动栏并且可以正常拖动窗口。