X.org可以加载两个不同的驱动程序? (使用Intel和NVidia卡进行三头安装)
我们想要设置一个带有板载intel图形适配器和nvidia卡的3个屏幕。
两张卡都在lspci中识别
01:00.0 VGA兼容控制器:NVIDIA Corporation GT218 [GeForce 210](rev a2) 00:02.0显示控制器:英特尔公司第二代核心处理器系列集成图形控制器(rev 09)
并且基本工作:如果我切换到控制台,我看到Intel卡上的输出,X只在Nvidia卡上运行。
但是当我输入xrandr | grep conn
xrandr | grep conn
我只得到一个连接端口:
DVI-I-0断开(正常左反转右x轴y轴) VGA-0断开(正常左反转右x轴y轴) DVI-I-1连接1920x1200 + 0 + 0(正常左反转右x轴y轴)518mm x 324mm HDMI-0断开(正常左反转右x轴y轴)
我在Ubuntu 12.10(和XFCE)上安装了专有的nvidia驱动程序。
我假设X可能有问题自动检测两张卡,所以我认为以下xorg.conf
可以帮助:
“ServerLayout”部分 标识符“Layout0” 屏幕0“Screen0” 屏幕1“屏幕1” InputDevice“Keyboard0”“CoreKeyboard” InputDevice“Mouse0”“CorePointer” EndSection “文件”部分 EndSection “InputDevice”部分 #默认生成 标识符“Mouse0” 司机“老鼠” 选项“协议”“自动” 选项“Device”“/ dev / psaux” 选项“Emulate3Buttons”“no” 选项“ZAxisMapping”“4 5” EndSection “InputDevice”部分 #默认生成 标识符“Keyboard0” 司机“kbd” EndSection “监视器”部分 标识符“Monitor0” VendorName“未知” ModelName“未知” HorizSync 28.0 - 33.0 VertRefresh 43.0 - 72.0 选项“DPMS” EndSection “设备”部分 标识符“Device0” 司机“nvidia” 供应商名称“NVIDIA Corporation” BoardName“GeForce 210” EndSection “屏幕”部分 标识符“Screen0” 设备“Device0” 监控“Monitor0” DefaultDepth 24 子部分“显示” 深度24 EndSubSection EndSection “监视器”部分 标识符“Monitor1” VendorName“未知” ModelName“未知” HorizSync 28.0 - 33.0 VertRefresh 43.0 - 72.0 选项“DPMS” EndSection “设备”部分 标识符“Device1” 司机“英特尔” VendorName“Intel” BoardName“内部英特尔图形” EndSection “屏幕”部分 标识符“Screen1” 设备“Device1” 监控“Monitor1” DefaultDepth 24 子部分“显示” 深度24 EndSubSection EndSection
但它仍然无法正常工作。
- 这通常可以在X中使用两个不同的驱动程序吗?
- 是否有必要手动创建
xorg.conf
? (因为Ubuntu 12.10通常在没有xorg.conf
情况下工作) - 我的
xorg.conf
有错误吗?
是的,X可以使用多个驱动程序。 你的设置和我的设置非常相似。 我有一台连接了两台显示器的NVIDIA 9800 GT和一台带有一台显示器的第二代智能卡。
我没有看到你的xorg.conf
任何问题。 我怀疑你需要创建一个xorg.conf
如果只是告诉X使用nvidia和intel驱动程序。 我的xorg.conf
看起来非常像你的; 我有三个显示器和屏幕部分,因为nvidia卡有两个显示器,但我很确定X忽略了这些部分。
首先,您需要确保在xorg.conf
禁用xinerama(可能没有必要)。
xorg.conf
:
Section "ServerFlags" Option "xinerama" "off" EndSection
当你做一个xrandr --listproviders
你应该看到两张牌。
cody@IRIS> xrandr --listproviders Providers: number : 2 Provider 0: id: 0x290 cap: 0x1, Source Output crtcs: 2 outputs: 5 associated providers: 1 name:NVIDIA-0 Provider 1: id: 0x48 cap: 0xb, Source Output, Sink Output, Sink Offload crtcs: 3 outputs: 6 associated providers: 1 name:Intel
如果你没有看到两张卡,你可能错过了一个驱动程序。 (但是OP说控制台正在使用一个而X正在使用另一个,所以它们可能都工作)
您应该能够使用xrandr --setprovideroutputsource
将英特尔端口添加到xrandr | grep conn
显示的列表中xrandr | grep conn
xrandr | grep conn
在我的例子中,我使用--listproviders
给出的名称:
xrandr --setprovideroutputsource Intel NVIDIA-0
如果没有添加英特尔端口,它可能已经以您无法看到的方式连接。 断开它:
xrandr --setprovideroutputsource Intel 0x0
然后尝试再次连接:
xrandr --setprovideroutputsource Intel NVIDIA-0
现在应该显示所有输出端口。 并且您应该能够添加带有gnome显示设置或xrandr
显示。
因此,当我最终让我的英特尔显示器工作时,nvidia显示器确定当我尝试将鼠标移动到第三个显示器时他们需要平移。 它现在将在第三和第二个监视器上显示第三个监视器的内容。 第二个原始内容滑到第一个显示器,第一个内容在屏幕外。 如果我试图再次将光标移动到第一个监视器,它将滑回正常状态。
我终于用另一个xrandr
调用修复了这个问题:
xrandr --output DVI-I-2 --panning 3840x1200+1680+0/1920x1200+1680+0/0/0/0/0
此调用需要了解物理屏幕几何和逻辑布局。 我有一台1680×1050显示器,一台1920×1200和一台1920×1080。 它们按从左到右的顺序排列。 最右侧连接到英特尔卡。
此调用是在中间监视器上设置平移区域。 --output DVI-I-2
恰好是连接到我的中间监视器的端口。
前四个数字将平移区域设置为中间和右侧屏幕的总和。 3840×1200作为宽度和高度,+ 1680 + 0来偏移中间监视器左上角的区域。 (显然[0,0]位于左侧监视器的左上角)
接下来的4个数字是光标跟踪区域。 我将其设置为仅跟踪中间屏幕上的光标。 这样当光标离开此屏幕时,它不会尝试移动图像以跟随光标。
最后4个数字定义了平移区域周围的边界。 我只是在这里使用默认值。
我使用的相关软件的版本:
xorg-server-1.17.4 gnome-3.18.0 xrandr-1.4.3