X.org 可以加载两个不同的驱动程序吗?(带有英特尔和 NVidia 卡的三头设置)

X.org 可以加载两个不同的驱动程序吗?(带有英特尔和 NVidia 卡的三头设置)

我们想要设置 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.confif 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

相关内容