NVIDIA (简体中文)
本文包含安装和配置 NVIDIA 专有 显卡驱动的信息。想要了解开源驱动的信息,参见 Nouveau.如果您使用基于 hybrid Intel/NVIDIA的双显卡笔记本, 参见 NVIDIA Optimus 内容.
安装
1. 如果你不知道显卡情况,可运行以下命令获知:
$ lspci -k | grep -A 2 -E "(VGA|3D)"
2. 也从以下渠道可确定你的显卡型号以及下载相应的版本:
- 查找代号(如 NV50, NVC0等): 英伟达代号查询页
- 如果在上面的页面找不到你的型号的显卡,可到英伟达历史型号列表页查找。
- 驱动下载: 英伟达驱动下载站
3. 为你的显卡安装和合适的驱动:
- GeForce 400 及以上版本安装 nvidia 或者 nvidia-lts 。
- GeForce 8000/9000、ION 以及 100-300(NV5x, NV8x, NV9x and NVAx)等2006-2010的显卡型号,安装nvidia-340xxAUR 或者 nvidia-340xx-ltsAUR 。
- FGeForce 6000/7000 (NV4x and NV6x)等2004-2006的显卡型号,安装nvidia-304xx[断开的链接:package not found] 或nvidia-304xx-lts[断开的链接:package not found] 。
- 更老的显卡型号参看 #Unsupported drivers[断开的链接:无效的部分].
# pacman -Rdd libgl
移除 libgl。4. 在64位的操作系统上,假如您想32位的程序发挥好nvidia-utils的优势,还必须启用multilib源来安装lib32的包(例如lib32-nvidia-utils, lib32-nvidia-340xx-utilsAUR 或者 lib32-nvidia-304xx-utils[断开的链接:package not found])。
5. 重新启动您的计算机, 以使得nouveau加入模块的黑名单生效。
一旦驱动安装完毕,就可以进入下一步了:配置英伟达驱动。
备用安装:定制内核
在此之前,您最好了解一下Arch的打包系统(the Arch Build System)的工作原理:
下面的这篇短小精悍的教程将教您怎样使用ABS来定制您的驱动。
安装ABS和生成目录树:
# pacman -S abs # abs
作为一个标准的ArchLinux用户,请为新的软件包创建一个临时目录:
$ mkdir -p ~/devel/abs
为英伟达的驱动包创建一个拷贝:
$ cp -r /var/abs/extra/nvidia/ ~/devel/abs/
下面,可以进入英伟达驱动的工程目录了:
$ cd ~/devel/abs/nvidia
您可以编辑一下一些文件nvidia.install
和PKGBUILD
以便它们包含的正确的内核版本变量。
在运行定制内核的时候,可以用下面的方式得到相应的内核和本地版本的名称:
$ uname -r
- In nvidia.install, replace the
EXTRAMODULES='extramodules-3.4-ARCH'
variable with the custom kernel version, such asEXTRAMODULES='extramodules-3.4.4'
orEXTRAMODULES='extramodules-3.4.4-custom'
depending on what the kernel's version is and the local version's text/numbers. Do this for all instances of the version number within this file. - In PKGBUILD, change the
_extramodules=extramodules-3.4-ARCH
variable to match the appropriate version, as above. - If there are more than one kernels in the system installed in parallel (such as a custom kernel alongside the default -ARCH kernel), change the
pkgname=nvidia
variable in the PKGBUILD to a unique identifier, such as nvidia-344 or nvidia-custom. This will allow both kernels to use the nvidia module, since the custom nvidia module has a different package name and will not overwrite the original. You will also need to comment the line inpackage()
that blacklists the nvidia module in/usr/lib/modprobe.d/nvidia.conf
(no need to do it again).
跟着:
$ makepkg -ci
参数-c
告诉makepkg构建完英伟达驱动后清理一些文件, 而参数-i
告诉makepkg自动运行pacman来安装构建后的软件包。
配置
安装完驱动之后,您需要创建Xorg的配置文件。您可以运行一次测试来检验没有配置文件Xorg能否正确运行。但是,您可能需要创建配置文件/etc/X11/xorg.conf
来调整Xorg运行时的一些变量。您可以用nvidia-xconfig配置工具来生成这些文件,也可以手动创建。假如您是手动创建的话,它可以是一个最小的配置文件(也就是意味着它仅仅把一些基础的选项传给Xorg服务器),或者包含一些自定义的配置来绕开Xorg的自动发现或者是预配置的选项。
自动配置
英伟达的软件包已经包含一个自动配置的工具来帮助您创建Xorg的配置文件(xorg.conf
)您可以通过运行下面的命令来实现自动配置:
# nvidia-xconfig
当Xorg的配置文件xorg.conf
不存在时,这条命令会自动检测您的硬件,并创建文件/etc/X11/xorg.conf
。假如配置文件已经存在的话,它会进行一些编辑,以方便在Xorg运行时能成功载入英伟达的专有驱动。
假如您想载入DRI(Direct Rendering Infrastructure),确定已经把您的配置文件修改为:
# Load "dri"
再一次检查您的配置文件/etc/X11/xorg.conf
中的默认色深,水平同步,垂直刷新和分辨率是否正确,不正确的配置可能会损害您的硬件,请仔细进行检查。
最小配置模式
用root用户创建一个配置文件20-nvidia.conf
(或 /etc/X11/xorg.conf
):
/etc/X11/xorg.conf.d/20-nvidia.conf
Section "Device" Identifier "Device0" Driver "nvidia" VendorName "NVIDIA Corporation" EndSection
/etc/mkinitcpio.conf
里面去除"nouveau"。您也可以通过使用这些脚本来在开源和闭源驱动之间进行切换。多台显示器
修改 /etc/X11/xorg.conf.d/10-monitor.conf
即可启用多显示器支持.
给每一个物理显示器添加 Monitor, Device 和 Screen ,然后添加一个 ServerLayout 来管理他们.
若启用了 Xinerama ,Nvidia专用驱动则会自动禁用多显示器的画面拼接. 若想启用拼接,请注释"ServerLayout
"中的Xinerama
,并且启用TwinView.
/etc/X11/xorg.conf.d/10-monitor.conf
Section "ServerLayout" Identifier "DualSreen" Screen 0 "Screen0" Screen 1 "Screen1" RightOf "Screen0" #Screen1 在 Screen0 的右边 Option "Xinerama" "1" #在屏幕之间移动窗口 EndSection Section "Monitor" Identifier "Monitor0" Option "Enable" "true" EndSection Section "Monitor" Identifier "Monitor1" Option "Enable" "true" EndSection Section "Device" Identifier "Device0" Driver "nvidia" Screen 0 EndSection Section "Device" Identifier "Device1" Driver "nvidia" Screen 1 EndSection Section "Screen" Identifier "Screen0" Device "Device0" Monitor "Monitor0" DefaultDepth 24 Option "TwinView" "0" SubSection "Display" Depth 24 Modes "1280x800_75.00" EndSubSection EndSection Section "Screen" Identifier "Screen1" Device "Device1" Monitor "Monitor1" DefaultDepth 24 Option "TwinView" "0" SubSection "Display" Depth 24 EndSubSection EndSection
TwinView
若你想用一个大屏幕,而不是两个屏幕.将TwinView
设为1
.
如果想要拼接应该使用此方法而不是上面的Xinerama
Option "TwinView" "1"
使用 NVIDIA Settings
你也可以使用由软件包nvidia-utils提供的nvidia-settings
工具. 通过这个方法你可以使用NVIDIA公司随驱动程序提供的受限软件. 只需要以root权限运行命令nvidia-settings
就可以自由设置驱动,你的设置将会被保存到文件/etc/X11/xorg.conf.d/10-monitor.conf
中.
调整
图形用户界面:nvidia-settings
英伟达的驱动包提供了一个nvidia-settings
的程序来给您调整一些额外的选项。
假如您想在登录时载入设置,请在终端输入:
$ nvidia-settings --load-config-only
或者添加到您的桌面环境的启动应用程序里面。
For a dramatic 2D graphics performance increase in pixmap-intensive applications, e.g. Firefox, set the InitialPixmapPlacement
parameter to 2:
$ nvidia-settings -a InitialPixmapPlacement=2
This is documented in nvidia-settings source code. For this setting to persist, this command needs to be run on every startup or added to your ~/.nvidia-settings-rc
.
~/.nvidia-settings-rc
可能会出现问题。若真如此,Xorg服务器可能会崩溃,并且需要删除这个文件来解决问题。 启用桌面组合
从180.44版本开始,英伟达的驱动默认使用 Damage 和 Composite X 扩展支持 GLX。请参阅 Composite 了解一些详细的说明。
关闭启动时的Logo
添加"NoLogo"
选项到Device
节里:
Option "NoLogo" "1"
启用硬件加速
添加"RenderAccel"
选项在Device
节下面:
Option "RenderAccel" "1"
覆盖显示器检测
Device
节下面的"ConnectedMonitor"
选项允许您重载X服务器在启动时的显示器检测选项,它可以在启动的时候节约您大量的宝贵时间。有用的选项是:"CRT"
是用于CRT显示器,"DFP"
是用于数字显示器,"TV"
是用于电视的。
下面的例子是强制英伟达的驱动绕开启动检测并且强制把显示器识别为DFP:
Option "ConnectedMonitor" "DFP"
启用三重缓存
您可以在Device
节下面添加"TripleBuffer"
选项来启用三重缓存:
Option "TripleBuffer" "1"
假如您的显卡有充足的显存(128MB或者更多)的话,建议您启用该选项。这个只有在垂直同步(nvidia-settings中的一个特性)启用的时候才会生效。
使用系统级事件
这是来自英伟达驱动的README文件: "[...] 使用系统级事件,可以在当某个客户端进行直接渲染到组合窗口的时候,可以有效地通知X。" 它可以帮助您提高性能,但是它如今还不能完全支持SLI和多GPU模式。
在Device
节下添加:
Option "DamageEvents" "1"
启用省电功能
在Monitor
节下添加:
Option "DPMS" "1"
启用亮度控制
在Device
节下添加:
Option "RegistryDwords" "EnableBrightnessControl=1"
启用SLI
根据英伟达驱动的README 附录: 这个选项可以在支持的配置中控制 SLI 渲染的配置。一个支持的配置适用于有一块SLI认证的主板以及2或者3个SLI认证的GPU的计算机。在SLI Zone[失效链接 2020-08-04 ⓘ]上面有更加详细的信息。
您可以用lspci
查找第一个GPU的PCI总线ID:
$ lspci | grep VGA
跟着会返回类似的信息:
03:00.0 VGA compatible controller: nVidia Corporation G92 [GeForce 8800 GTS 512] (rev a2) 05:00.0 VGA compatible controller: nVidia Corporation G92 [GeForce 8800 GTS 512] (rev a2)
在Device
节下添加BusID(3个先前例子):
BusID "PCI:3:0:0"
"PCI:<BusID>:0:0"
的格式根据需要的SLI渲染模式来添加值到Screen
节下面:
Option "SLI" "SLIAA"
下表列出了可用的渲染模式。
Value | Behavior |
---|---|
0, no, off, false, Single | 渲染时仅使用单GPU。 |
1, yes, on, true, Auto | 启用SLI并让驱动自动选择合适的渲染模式。 |
AFR | 启用SLI并使用交替帧渲染模式。 |
SFR | 启用SLI并使用的分割帧渲染模式。 |
SLIAA | 启用SLI和使用SLI抗锯齿。使用全场景反锯齿结合,以改善视觉效果。 |
另外,您可以使用nvidia-xconfig
实用工具的命令行参数来插入这些改变到xorg.conf
:
# nvidia-xconfig --busid=PCI:3:0:0 --sli=SLIAA
从shell来验证一下SLI是否被启动:
$ nvidia-settings -q all | grep SLIMode Attribute 'SLIMode' (arch:0.0): AA 'SLIMode' is a string attribute. 'SLIMode' is a read-only attribute. 'SLIMode' can use the following target types: X Screen.
强制Powermizer性能水平(适用于笔记本)
在Device
节下添加:
# 强制Powermizer任何时间都在在特定级别 # level 0x1=highest # level 0x2=med # level 0x3=lowest
# 交流电源设置: Option "RegistryDwords" "PowerMizerLevelAC=0x3" # 电池设置: Option "RegistryDwords" "PowerMizerLevel=0x3"
或许NVIDIA Driver for X.org:Performance and Power Saving Hints[失效链接 2020-08-04 ⓘ]这篇文章可以更好地解释这些设置。
让GPU根据温度来设置自己的性能水平
在Device
节下添加:
Option "RegistryDwords" "PerfLevelSrc=0x3333"
禁用vblank中断(适用于笔记本)
当运行中断检测的实用工具powertop
,
When running the interrupt detection utility powertop
,它可以观察到英伟达驱动将会为每个vblank产生一个中断。在Device
节下放置以下选项来禁用:
Option "OnDemandVBlankInterrupts" "1"
这将减少约一或两个每秒的中断。
启用超频
您可以在Device
节里添加下面的选项来启用超频:
Option "Coolbits" "1"
这将会在X会话上启动超频:
$ nvidia-settings
{{注意|GTX 4xx/5xx系列的Fermi核心没办法使用Coolbits的方式来超频。另一种方法是在DOS下编辑和刷新BIOS来实现(当然,这是最好的方法),或者在Win32环境下使用nvflash[失效链接 2020-08-04 ⓘ]和NiBiTor 6.0[失效链接 2020-08-04 ⓘ]来实现。通过更新BIOS,不仅可以提高电压限制,同时稳定地提高软件超频。
设置静态的2D/3D时钟
在Device
节里面添加以下字串来启用PowerMizer的最大性能级别:
Option "RegistryDwords" "PerfLevelSrc=0x2222"
在Device
节里面设置一下字串的其中一个来通过nvidia-settings
来手动控制GPU风扇:
Option "Coolbits" "4"
Option "Coolbits" "5"
通过XRandR启用屏幕旋转
把下面的行添加到Device
节里面:
Option "RandRRotation" "True"
重新启动Xorg后可以用旋转屏幕:
$ xrandr -o left
可以用下面的方法恢复默认:
$ xrandr -o normal
xorg.conf
来启用屏幕旋转,因为它已经被默认被启用来。最好是使用各自桌面环境的工具,例如KDE的系统设置工具。提示和技巧
启用 Pure Video HD 高清视频解码(VDPAU/VAAPI)
硬件需求:
至少是一块第二代的PureVideo HDwikipedia:PureVideo_HD#Table_of_PureVideo_.28HD.29_GPUs
软件需求:
安装英伟达显卡的专有驱动将会根据不同PureVideo的显卡来提供到VDPAU的接口来提供视频解码能力。
您也可以通过下面的方式来添加VA-API的支持:
# pacman -S vdpau-video
您可以通过下面的方式来验证VA-API是否被当前系统所支持:
$ vainfo
假如您想充分发挥您的显卡的硬件解码能力的话,您可能需要一个支持VDPAU或者VA-API的媒体播放器。
假如您想启用 MPlayer 的硬件加速能力的话,您可以编辑~/.mplayer/config
vo=vdpau vc=ffmpeg12vdpau,ffwmv3vdpau,ffvc1vdpau,ffh264vdpau,ffodivxvdpau,
启用VLC的硬件加速能力可以使用下面的方法:
工具 -> 首选项 -> 输入和解码器 -> 检查“使用GPU加速(实验性的)”
启用smplayer的硬件加速能力可以使用下面的方法:
选项 -> 首选项 -> 常规 -> 视频 标签页 -> 选择vdpau作为输出设备
启用gnome-mplayer的硬件加速能力可以使用下面的方法:
编辑 -> 首选项 -> 设置vdpau为视频输出
在低显存下播放高清电影:
假如您的显卡没有太多的显存(>521MB?),当您播放1080p甚至是720p可看到锯齿。 您可以使用TWM或者MWM之类的窗口管理器来避免这些问题。
此外可以配置~/.mplayer/config
增加 MPlayer 的缓存大小。
使用电视输出
下面的文章将指导您去实现电视输出
使用一台电视(DFP)作为X的唯一输出
假如CRT-0上面的备用显示器没有被自动检测,这可能是使用DVI作为主要输出的一个问题,或许是X启动时电视被关闭或者是还没有被连接到计算机上。
强制英伟达使用DFP,把一个EDID的拷贝储存在文件系统上,好让X可以解释文件,而不是从TV/DFP上面读EDID。
运行nvidia-settings来获得EDID,它会用树格式来显示一些信息,并会忽略余下的设置和选择的GPU(相应条目应该为"GPU-0"或者类似的选项),点击"DFP"节(再提醒一下,是"DFP-0"或者类似的选项),点击"获取 Edid"按钮来储存,例如/etc/X11/dfp0.edid
。
在xorg.conf的"Device"节添加:
Option "ConnectedMonitor" "DFP" Option "CustomEDID" "DFP-0:/etc/X11/dfp0.edid"
选项ConnectedMonitor
会强制驱动调整连接的DFP。选项CustomEDID
会提供EDID数据给设备,这将意味着连接到TV/DFP的设备会被在X的进程中启动。
通过这种方法,可以在启动时自动启动一个登录管理器并且通过开机进程来启动电视,并且正确配置屏幕。
检查电源状态
英伟达的Xorg驱动可以检测电源。可以检查'GPUPowerSource'这个只读参数来实现(0 - 交流电源,1 - 电池):
$ nvidia-settings -q GPUPowerSource -t 1
为了能够实现检测,您需要预先安装acpid,并且把它添加到rc.conf的DAEMONS里面,否则系统日志会出现警告:
ACPI: failed to connect to the ACPI event daemon; the daemon may not be running or the "AcpidSocketPath" X configuration option may not be set correctly. When the ACPI event daemon is available, the NVIDIA X driver will try to use it to receive ACPI event notifications. For details, please see the "ConnectToAcpid" and "AcpidSocketPath" X configuration options in Appendix B: X Config Options in the README.
在shell显示GPU温度
途径一 - nvidia-settings
您可以用下面的方法让nvidia-settings在shell下面显示GPU温度:
$ nvidia-settings -q gpucoretemp
这将输出类似下面的信息:
Attribute 'GPUCoreTemp' (hostname:0.0): 41. 'GPUCoreTemp' is an integer attribute. 'GPUCoreTemp' is a read-only attribute. 'GPUCoreTemp' can use the following target types: X Screen, GPU.
The GPU temps of this board is 41 C.
您可以使用rrdtool或者conky其它的实用工具来输出GPU的温度。
$ nvidia-settings -q gpucoretemp -t 41
途径二 - nvidia-smi
使用nvidia-smi可以直接获取GPU的温度,而不需要使用X。这对于一部分没有运行X的用户很有用,也许是因为这些机器无显示器而运行着服务器软件。
您可以使用下面的方法来使用nvidia-smi让shell输出GPU温度:
$ nvidia-smi
将会输出类似下面的信息:
$ nvidia-smi Fri Jan 6 18:53:54 2012 +------------------------------------------------------+ | NVIDIA-SMI 2.290.10 Driver Version: 290.10 | |-------------------------------+----------------------+----------------------+ | Nb. Name | Bus Id Disp. | Volatile ECC SB / DB | | Fan Temp Power Usage /Cap | Memory Usage | GPU Util. Compute M. | |===============================+======================+======================| | 0. GeForce 8500 GT | 0000:01:00.0 N/A | N/A N/A | | 30% 62 C N/A N/A / N/A | 17% 42MB / 255MB | N/A Default | |-------------------------------+----------------------+----------------------| | Compute processes: GPU Memory | | GPU PID Process name Usage | |=============================================================================| | 0. ERROR: Not Supported | +-----------------------------------------------------------------------------+
仅输出温度:
$ nvidia-smi -q -d TEMPERATURE ==============NVSMI LOG============== Timestamp : Fri Jan 6 18:50:57 2012 Driver Version : 290.10 Attached GPUs : 1 GPU 0000:01:00.0 Temperature Gpu : 62 C
您可以使用rrdtool或者conky其它的实用工具来输出GPU的温度。
$ nvidia-smi -q -d TEMPERATURE | grep Gpu | cut -c35-36
62
途径三 - nvclock
nvclock可以从[extra]的软件源中得到。注意nvclock无法访问G210/220或者更新的热传感器。
nvclock获取的温度跟nvidia-settings/nv-control获取的温度会有明显的差异。根据这里,一篇来自nvclock的名叫thunderbird的作者提到,nvclock的数值或许更加准确。
登录时设置风扇速度
您可以使用nvidia-settings
的命令行接口来调整。首先确定您的Xorg的配置文件的Device
节是否已经把Coolbits设置为4或者5.
Option "Coolbits" "4"
在您的~/.xinitrc
文件放置下面的行来调整运行Xorg下的风扇。把<n>替换为您要设置的风扇转速百分比。
nvidia-settings -a "[gpu:0]/GPUFanControlState=1" -a "[fan:0]/GPUCurrentFanSpeed=<n>"
您还可以用递增的方法来配置第二个GPU:
nvidia-settings -a "[gpu:0]/GPUFanControlState=1" \ -a "[gpu:1]/GPUFanControlState=1" \ -a "[fan:0]/GPUCurrentFanSpeed=<n>" \ -a [fan:1]/GPUCurrentFanSpeed=<n>" &
假如您使用GDM或者KDM之类的登录管理器,您可以创建一个桌面的入口文件来处理这个设定。创建~/.config/autostart/nvidia-fan-speed.desktop
并且把这些文本放置到里面。把<n>替换为您要设置的风扇转速百分比。
[Desktop Entry] Type=Application Exec=nvidia-settings -a "[gpu:0]/GPUFanControlState=1" -a "[fan:0]/GPUCurrentFanSpeed=<n>" X-GNOME-Autostart-enabled=true Name=nvidia-fan-speed
改变驱动程序的安装/反安装顺序
在这里,旧的英伟达驱动被定义为nvidiaO,而新的英伟达驱动则被定义为nvidiaN。
移除 nvidiaO 安装 nvidia-libglN 安装 nvidiaN 安装 lib32-nvidia-libgl-N (假如有必要的话)
在nvidia和nouveau之间切换
假如您经常在nvidia和nouveau两个驱动之间切换,您可以使用这两个脚本来让您的工作更加简单有效:
#!/bin/bash # nvidia -> nouveau /usr/bin/sudo /bin/sed -i 's/#options nouveau modeset=1/options nouveau modeset=1/' /etc/modprobe.d/modprobe.conf /usr/bin/sudo /bin/sed -i 's/#MODULES="nouveau"/MODULES="nouveau"/' /etc/mkinitcpio.conf /usr/bin/sudo /usr/bin/pacman -Rdds --noconfirm nvidia-173xx{,-utils} /usr/bin/sudo /usr/bin/pacman -S --noconfirm nouveau-dri xf86-video-nouveau #/usr/bin/sudo /bin/cp {10-monitor,30-nouveau}.conf /etc/X11/xorg.conf.d/ /usr/bin/sudo /sbin/mkinitcpio -p linux
#!/bin/bash # nouveau -> nvidia /usr/bin/sudo /bin/sed -i 's/options nouveau modeset=1/#options nouveau modeset=1/' /etc/modprobe.d/modprobe.conf /usr/bin/sudo /bin/sed -i 's/MODULES="nouveau"/#MODULES="nouveau"/' /etc/mkinitcpio.conf /usr/bin/sudo /usr/bin/pacman -Rdds --noconfirm nouveau-dri xf86-video-nouveau libgl /usr/bin/sudo /usr/bin/pacman -S --noconfirm nvidia-173xx{,-utils} #/usr/bin/sudo /bin/rm /etc/X11/xorg.conf.d/{10-monitor,30-nouveau}.conf /usr/bin/sudo /sbin/mkinitcpio -p linux
想要成功地完成切换,一次重启是很有必要的。 请根据您正在使用的驱动版本来修改一些地方(在这里我使用的是nvidia-173xx)
假如您正在使用的xorg-server的版本低于1.10.2-1,取消注释行,复制和删除{10-monitor,30-nouveau}.conf。自从1.10.2-1之后的版本,xorg-server修补为自动加载nouveau。我保留了10-monitor.conf和30-nouveau.conf[断开的链接:无效的部分]在同一个目录作为这个脚本,必要时还要调整一下路径。
故障排除
游戏中使用双头显示输出
当您使用全屏进行游戏的时候,您会发现游戏会把两个屏幕识别为一个大屏幕。虽然这在技术上是正确的(虚拟出来的大屏幕是您的几个屏幕的组合),您可能不需要在两个屏幕上同时玩游戏。 您可以在SDL上改变这些行为,试一下:
export SDL_VIDEO_FULLSCREEN_HEAD=1
在OpenGL里面,添加适当的Metamodes到您的xorg.conf的Device
节下面,然后重启X:
Option "Metamodes" "1680x1050,1680x1050; 1280x1024,1280x1024; 1680x1050,NULL; 1280x1024,NULL;"
另一种方法,可单独工作或连同上面提到的那些是在单独的X服务器里面开始游戏.
旧的Xorg的设置
如果您是从旧的版本升级过来的,请移除旧的/usr/X11R6
,防止在安装过程中引发问题。
屏幕损坏:"六屏"问题
一些使用Geforce GT 100M系列显卡的用户,屏幕会在X启动的时候转为损坏;分为六个限制为640x480的区域。
为了解决这个问题,可以在Device
节里启动验证模式NoTotalSizeCheck
:
Section "Device" ... Option "ModeValidation" "NoTotalSizeCheck" ... EndSection
'/dev/nvidia0' Input/Output error
这个错误可以是由几个不同的原因引发,此错误最常见的解决方案是检查组/文件权限,这也许不能说是一个问题。在英伟达的文档里面并没有详细地告诉您如何解决这个问题但还有一些东西对一些人有用。这个问题可以是IRQ与其它驱动冲突或者是错误的路由,甚至是内核或者BIOS的问题。
首先您得尝试移除视频采集卡或者其它视频设备来解决问题。如果在同一系统中有太多的视频处理器,可能由于视频控制器的内存分配问题导致内核无法启动。特别是显存比较低的系统可能发生这种情况,即使只有一个视频处理器。你应该找出你的系统的显存(例如运行lspci -v)并分配参数传递到内核:
vmalloc=64M 或者 vmalloc=256M
另一种方法是尝试的是从“操作控制系统”改变你的BIOS IRQ路由“BIOS控制”或其他方式。第一个可以通过内核参数:
PCI=biosirq
noacpi的内核参数也可以作为一个建议,但是因为它完全禁用ACPI的,应谨慎使用,毕竟一些硬件很容易因过热损坏。
'/dev/nvidiactl' errors
启动一个OpenGL的应用程序可能会引致以下的错误:
Error: Could not open /dev/nvidiactl because the permissions are too restrictive. Please see theFREQUENTLY ASKED QUESTIONS
section of/usr/share/doc/NVIDIA_GLX-1.0/README
for steps to correct.
您可以把适当的用户添加到"video"组并重新登录来解决这个问题:
# gpasswd -a username video
32位应用程序无法启动
在64位系统下,安装lib32-nvidia-libgl
对应相同版本的64位驱动可以修复这个问题。
更新内核之后的错误
使用自定义构建的NVIDIA模块来替代[extra]里面的软件包,每次内核更新后驱动都需要重新编译。一般建议更新内核和图形驱动程序后重新启动。
通常崩溃的问题
- 尝试在xorg.conf里面关闭
RenderAccel
。 - 假如Xorg输出一些错误如"conflicting memory type"或者"failed to allocate primary buffer: out of memory",在
/boot/grub/menu.lst
添加nopat
到kernel
行的末尾。
- 如果NVIDIA编译器提示当前版本的gcc和用于编译的内核的版本号不同,请在
/etc/profile
里面添加:
export IGNORE_CC_MISMATCH=1
- 假如Xorg使用nvidia-96xx驱动时由于"Signal 11"崩溃,尝试禁用PAT。把参数
nopat
传输到menu.lst
的kernel
行。
您可以在NVIDIA forums.找到更多的关于故障排除的信息。
安装新版本的驱动后性能很糟糕
假如和旧版本的驱动相比,FPS有下降,首先检查是否打开直接渲染:
$ glxinfo | grep direct
假如输出:
direct rendering: No
跟着FPS可能会突然下降。
一种可能的解决方案是降级您的驱动为先前的版本并重新启动。
400系列显卡与CPU峰值
如果您遇到间歇性的CPU峰值与400系列显卡的问题,这可能是PowerMizer不断变化的GPU的时钟频率引起。选择PowerMizer自适应性能的设置,请把一下内容添加到您的Xorg的配置文件的Device节里面:
Option "RegistryDwords" "PowerMizerEnable=0x1; PerfLevelSrc=0x3322; PowerMizerDefaultAC=0x1"
X在登入/注销时挂起,用Ctrl+Alt+Backspace来实现
假如在使用传统的英伟达驱动启用Xorg的登入/注销时挂起,但登录仍然可以通过Ctrl-Alt-Backspace,尝试添加下面的行到/etc/modprobe.d/modprobe.conf
:
options nvidia NVreg_Mobile=1
一些用户可能很幸运地实现,但其他用户反而实现性能下降:
options nvidia NVreg_DeviceFileUID=0 NVreg_DeviceFileGID=33 NVreg_DeviceFileMode=0660 NVreg_SoftEDIDs=0 NVreg_Mobile=1
注意NVreg_Mobile
需要根据您的笔记本来修改:
- 1 适用于Dell笔记本.
- 2 适用于non-Compal Toshiba 笔记本.
- 3 适用于其它笔记本.
- 4 适用于Compal Toshiba笔记本.
- 5 适用于Gateway笔记本.
在NVIDIA Driver's Readme:Appendix K可以看到更多的信息。
XRandR检测的刷新率不正确依赖实用工具
XRandR的X扩展目前还不能识别到一个X屏幕上的多个显示设备;它仅仅可以看到MetaMode
的边界框,XRandR将无法区分它们。
为了支持动态双头输出,NVIDIA的驱动程序必须使每个MetaMode是唯一的,目前,NVIDIA的驱动程序来通过使用一个唯一的标识符刷新率完成。
XRandR扩展目前正在由Xorg社区进行了重新设计,所以刷新率的解决方法可能在未来的某个节点上删除。
此可用的办法也被禁用的“DynamicTwinView”X配置选项设置为“false”,这将禁用NV-CONTROL支持操纵MetaModes,但会造成XRandR和XF86VidMode可见刷新率要准确。
No screens found on a laptop / Nvidia Optimus
假如在一些笔记本上英伟达的驱动找不到任何屏幕,您可以用下面的方法实现:
lspci | grep VGA
将会输出类似的信息:
00:02.0 VGA compatible controller: Intel Corporation Core Processor Integrated Graphics Controller (rev 02) 01:00.0 VGA compatible controller: nVidia Corporation Device 0df4 (rev a1)
不幸的是,英伟达已经没有计划在他们的Linux驱动程序支持。
您需要安装Intel的驱动来处理屏幕,让3D软件使用,您需要通过Bumblebee告诉他们使用英伟达的显卡。
没有笔记本电脑上的亮度控制
尝试在20-nvidia.conf添加下面的行:
Option "RegistryDwords" "EnableBrightnessControl=1"
如果X无法启动,尝试改为下边的样子:
Section "Device"
Identifier "Device0" Driver "nvidia" VendorName "NVIDIA Corporation" BoardName "Quadro NVS 3100M" Option "RegistryDwords" "EnableBrightnessControl=1"
EndSection
假如它仍旧不能工作的话,您可以尝试安装nvidia-blAUR。