![]() | 注意 |
---|---|
在这里你将学习如何配置你的系统,以便并行使用 Nvidia 的 GLX 和 XFree 的 DRI。如果你没有 Nvidia 显卡,或者你只有 Nvidia 显卡,你不需要阅读本节。在第一种情况下,你完全不需要 Nvidia GLX,在第二种情况下,你可以使用安装 GLX 的标准程序。 |
为什么选择 Nvidia?为什么选择闭源驱动程序?
一个有点混合的答案
使用开源驱动程序几乎不可能启动辅助显卡,所以我们应该使用闭源驱动程序。
为什么选择 Nvidia 显卡?目前这些是唯一可用的、经济实惠的且带有一些加速功能的 PCI 显卡。
我尝试在 2 个并行的 X 服务器上使用 DRI,但它没有工作。我向 XFree、DRI 和 lkml 列表发送了邮件,但我只收到一个回复,其中没有关于我的问题的有价值的信息。我尝试在 Matrox G550 DH AGP 和 SiS63xx PCI 上运行 DRI,但当为两张显卡启用时,我收到了 AGP 错误。当仅为其中一张显卡启用时,我成功运行了 DRI。请有人确认或证明我是错的!
我将解释几种方法,使 Nvidia GLX 和 XFree86 DRI 都能正常工作。可能有很多其他的可能性,也许这些不是最简单的,但它们是我知道可以工作的。
为什么需要这样做
Nvidia 应该为 xf86 使用不同的模块路径:来自 Nvidia 的 glx 扩展模块与来自 XFree86 的模块不兼容。
Nvidia 应该使用不同的 XF86Config 文件:因为 DRI 应该为 Nvidia 禁用,为其他显卡启用。
如果你找到更简单的方法,请发邮件给我,我会将其包含进来。
![]() | 注意 |
---|---|
这不能直接在 SuSE Linux 上使用。为了方便用户在 Mesa、XFree 和 Nvidia GL 库之间切换,SuSE 对 GL 库使用了非常复杂的设置。要使用此设置,你必须将你的配置切换到 XFree86 的 GL 库。 |
这是我在我的系统上使用的配置 (ATI AIW Radeon 7500 AGP 和 Nvidia TNT2 M64 PCI) XFree 配置文件
创建一个目录/usr/X11R6/libNV:
mkdir /usr/X11R6/libNV
创建到原始目录的链接/usr/X11R6/lib:
cd /usr/X11R6/libNV
lndir -silent -ignorelinks ../lib
在以下位置安装 Nvidia 驱动程序和库/usr/X11R6/libNV.
安装 Nvidia 的libGLcore.so.1.0[驱动程序版本],或者更好的是,libGLcore.so.1,在/usr/lib。创建一个从以下位置到/usr/X11R6/libNV/libGLcore.so.1到/usr/lib/libGLcore.so.1(这将允许你轻松更新你的 Nvidia 驱动程序)
cd /usr/lib
ln -s ../X11R6/libNV/libGLcore.so.1 ./
注意:Nvidia 的libGL.so已安装/usr/X11R6/libNV,所以它对系统是不可见的,除非你告诉系统关于以下文件的存在/usr/X11R6/libNV。对于此设置,你不能这样做,因为它会破坏标准的 X 服务器启动。但是你可以将 XFree GL 库与 Nvidia 显卡和 Nvidia 闭源驱动程序一起使用,对于非 Nvidia 显卡,可以使用 XFree 的 DRI,而 Nvidia 的 GL 库无法做到这一点。
在 XFree 配置文件中为 Nvidia 显卡添加一行,以将 X 服务器指向库和模块路径的正确位置
Section "Files" .......... ModulePath "/usr/X11R6/libNV/modules" .......... EndSection |
安装 Nvidia 内核驱动程序。
现在一切应该都很好,你应该能够同时使用 DRI 和 Nvidia GLX。与使用 Nvidia 的 libGL 和 libGLcore 的设置相比,你的性能会稍微降低,但在我电脑上差异不大。
此示例将使你获得 Nvidia 显卡和非 Nvidia 显卡的完整性能,因为 XFree 的 libGL 用于非 Nvidia 显卡,而 Nvidia 的 libGL 用于 Nvidia 显卡。但这需要一个额外的 X 服务器才能精确;一个简单的包装器,用于添加 Nvidia 库的路径,以及指向它的符号链接,用于额外的 Nvidia 显卡。
它几乎与之前的场景相同,不同之处在于 Nvidia 显卡的 X 服务器应该在 Nvidia 的 libGL 已知的环境中启动,而非 Nvidia 显卡的 X 服务器不应该知道任何关于 Nvidia libGL 的信息。这需要一个包装器来用于启动驱动 Nvidia 显卡的 X 服务器。
像前面的例子一样安装 Nvidia 库和内核驱动程序。你可以跳过步骤 4,因为libGLcore.so.1已安装在/usr/X11R6/libNV,我们将告知驱动 Nvidia 显卡的 X 服务器关于 Nvidia 库的正确路径。
缺失的部分 - 包装器
#!/bin/bash export LD_LIBRARY_PATH=/usr/X11R6/libNV exec /usr/X11R6/bin/X0 $* |
将这些行复制到你最喜欢的编辑器中,并将文件另存为XNV。使其可执行
chmod +x XNV
将文件复制到/usr/X11R6/bin并为额外的 Nvidia 显卡创建指向它的符号链接(对于额外的显卡,只需添加更多链接)
cp XNV /usr/X11R6/bin cd /usr/X11R6/bin ln -s XNV Xnv0 ln -s XNV Xnv1 ln -s XNV Xnv2 |
记住使用/usr/X11R6/bin/Xnv0, /usr/X11R6/bin/Xnv1...,而不是/usr/X11R6/bin/X0, /usr/X11R6/bin/X1... 用于你的 Nvidia 显卡,在下一章配置显示管理器时,或者从控制台在 Nvidia 显卡上启动 X 时。
使用新的 Nvidia 安装程序(注意,这是一个正在进行中的工作,如果你不明白这里发生了什么,请不要使用。待办事项:编写一个脚本来执行步骤 1-4。请在附录->脚本中提供关于脚本的一些反馈)
手动
备份你的 XFree GL 库
cd [XFree prefix] |
在我的 Mandrake 系统上,我可以使用
cd $OPENWINHOME find lib -name "libGL.*" -o -name "libGLcore*" -o -name "libglx.*" | xargs tar rpfv libGL-backup.tar |
然后运行 Nvidia 安装程序
./NVIDIA-Linux-x86-1.0-4349.run --no-opengl-headers --xfree86-prefix=/usr/X11R6NV --opengl-prefix=/usr/X11R6NV |
将安装的文件复制到/usr/X11R6/libNV:
cd /usr/X11R6NV/lib && tar cv * | tar xvC /usr/X11R6/libNV/ |
恢复备份的 GL 库
cd [XFree prefix] tar xvfp libGL-backup.tar && ldconfig |