![X.org 可以加载两个不同的驱动程序吗?(带有英特尔和 NVidia 卡的三头设置)](https://linux22.com/image/834235/X.org%20%E5%8F%AF%E4%BB%A5%E5%8A%A0%E8%BD%BD%E4%B8%A4%E4%B8%AA%E4%B8%8D%E5%90%8C%E7%9A%84%E9%A9%B1%E5%8A%A8%E7%A8%8B%E5%BA%8F%E5%90%97%EF%BC%9F%EF%BC%88%E5%B8%A6%E6%9C%89%E8%8B%B1%E7%89%B9%E5%B0%94%E5%92%8C%20NVidia%20%E5%8D%A1%E7%9A%84%E4%B8%89%E5%A4%B4%E8%AE%BE%E7%BD%AE%EF%BC%89.png)
我们想要设置 3 个屏幕,配备板载英特尔图形适配器和 nvidia 卡。
两张卡均在 lspci 中被识别
01:00.0 VGA 兼容控制器:NVIDIA Corporation GT218 [GeForce 210] (rev a2) 00:02.0 显示控制器:英特尔公司第二代酷睿处理器系列集成图形控制器(rev 09)
并且基本可以工作:如果我切换到控制台,我会看到 Intel 卡上的输出,X 仅在 Nvidia 卡上运行。
但是当我输入时,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
可能会有所帮助:
“服务器布局”部分 标识符“Layout0” 屏幕 0 “屏幕 0” 屏幕 1 “屏幕 1” 输入设备“键盘0”“核心键盘” 输入设备“Mouse0”“CorePointer” 结束部分 “文件”部分 结束部分 “输入设备”部分 # 从默认生成 标识符“Mouse0” 驱动程序“鼠标” 选项“协议”“自动” 选项“设备”“/dev/psaux” 选项“Emulate3Buttons”“否” 选项“ZAxisMapping”“4 5” 结束部分 “输入设备”部分 # 从默认生成 标识符“Keyboard0” 驱动程序“kbd” 结束部分 “监控”部分 标识符“Monitor0” 供应商名称“未知” 模型名称“未知” 水平同步 28.0 - 33.0 垂直刷新 43.0 - 72.0 选项“DPMS” 结束部分 “设备”部分 标识符“Device0” 驱动程序“nvidia” 供应商名称“NVIDIA Corporation” 主板名称“GeForce 210” 结束部分 “屏幕”部分 标识符“Screen0” 设备“Device0” 监控“Monitor0” 默认深度 24 “显示”子部分 深度 24 结束子节 结束部分 “监控”部分 标识符“Monitor1” 供应商名称“未知” 模型名称“未知” 水平同步 28.0 - 33.0 垂直刷新 43.0 - 72.0 选项“DPMS” 结束部分 “设备”部分 标识符“Device1” 驱动程序“英特尔” 供应商名称“Intel” 主板名称“内置英特尔显卡” 结束部分 “屏幕”部分 标识符“Screen1” 设备“Device1” 监视器“Monitor1” 默认深度 24 “显示”子部分 深度 24 结束子节 结束部分
但它仍然不起作用。
- 在 X 中通常可以使用两个不同的驱动程序吗?
- 是否需要
xorg.conf
手动创建一个?(因为 Ubuntu 12.10 通常不需要xorg.conf
) - 我的有什么错误吗
xorg.conf
?
答案1
是的,X 可以使用多个驱动程序。您的设置与我的非常相似。我有一台连接了两个显示器的 NVIDIA 9800 GT 和一台连接了单个显示器的第二代英特尔卡。
我没有发现你的 有什么问题xorg.conf
。我怀疑你需要创建一个xorg.conf
if only 来告诉 X 同时使用 nvidia 和 intel 驱动程序。我的xorg.conf
看起来和你的非常相似;我有三个监视器和屏幕部分,因为 nvidia 卡有两个监视器,但我很确定 X 忽略了这些部分。
首先,您需要确保 xinerama 已被禁用xorg.conf
(也许没有必要)。
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
,就我而言,我使用以下给出的名称--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
此调用需要了解物理屏幕几何形状和逻辑布局。我有一个 1680x1050 显示器、一个 1920x1200 显示器和一个 1920x1080 显示器。它们按从左到右的顺序排列。最右边的显示器连接到英特尔卡。
此调用正在设置中间显示器上的平移区域。 --output DVI-I-2
恰好是连接到我的中间显示器的端口。
前四个数字将平移区域设置为中间和右侧屏幕的总和。宽度和高度为 3840x1200,+1680+0 表示偏移区域从中间显示器的左上角开始。(显然 [0,0] 位于左侧显示器的左上角)
接下来的 4 个数字是光标跟踪区域。我将其设置为仅跟踪中间屏幕上的光标。这样,当光标离开此屏幕时,它不会尝试移动图像以跟随光标。
最后 4 个数字定义平移区域的边框。我在这里只使用默认值。
我使用的相关软件版本:
xorg-server-1.17.4
gnome-3.18.0
xrandr-1.4.3