Nvidia显卡的xorg配置

生成xorg配置

如果发现系统/etc/X11/xorg.conf文件丢失,你可以使用下面的命令生成一个新的xorg.conf文件

$ X --configure

新生成的xorg.conf.new一般在用户目录下,具体路径请查看输出结果,得到xorg.conf.new文件后需要把它拷贝到/etc/X11/下,并且更改文件名为xorg.conf。如果这个自动生成的文件不符合需求就需要根据具体情况做相应的修改。当然,更方便的方法就使从别的机器上拷贝/etc/X11/xorg.conf到你的系统中,针对Nvidia显卡的xorg配置都使通用的,然后再做相应的修改。

单屏xorg的配置

xorg.conf内容

# nvidia-xconfig: X configuration file generated by nvidia-xconfig
# nvidia-xconfig:  version 260.19.44  ([email protected])  Sun Feb 27 21:50:39 PST 2011

Section "ServerLayout"
	InputDevice    "irtouch" "SendCoreEvents"
	Identifier     "Layout0"
	Screen      0  "Screen0"
	InputDevice    "Keyboard0" "CoreKeyboard"
	InputDevice    "Mouse0" "CorePointer"
	Option         "Xinerama" "0"
EndSection

Section "Files"
EndSection

Section "InputDevice"
	# generated from default
	Identifier     "Mouse0"
	Driver         "mouse"
	Option         "Protocol" "auto"
	Option         "Device" "/dev/psaux"
	Option         "Emulate3Buttons" "no"
	Option         "ZAxisMapping" "4 5"
EndSection

Section "InputDevice"
	# generated from default
	Identifier     "Keyboard0"
	Driver         "kbd"
EndSection

Section "Monitor"
	Identifier     "Monitor0"
	VendorName     "Unknown"
	ModelName      "Unknown"
	HorizSync       28.0 - 33.0
	VertRefresh     43.0 - 72.0
	Option         "DPMS"
EndSection

Section "Device"
	#Option        "Rotate" "CW"
	Identifier     "Device0"
	Driver         "nvidia"
	VendorName     "NVIDIA Corporation"
	BusID          "PCI:1:0:0"
EndSection

Section "Screen"
	Identifier     "Screen0"
	Device         "Device0"
	Monitor		   "Monitor0"
	Option         "TwinView" "0"
	Option         "ConnectedMonitor" "DFP-1"
	Option         "metamodes" "DFP-1: 1920x1080 +0+0"
	Option         "CustomEDID" "DFP-1:/etc/X11/edid.bin"
	SubSection     "Display"
		Depth      24
	EndSubSection
EndSection

### Touch Configuration Beginning ###
section "InputDevice"
	Identifier "irtouch"
	Driver "irtouch"
	Option "ScrenNumber" "0"
	Option "SendCoreEvents"
	Option "MinX" "0"
	Option "MinY" "0"
	Option "MaxX" "4095"
	Option "MaxY" "4095"
	Option "SwapXY" "0"
EndSection
### Touch Configuration End ###

xorg.conf解析

ServerLayout

用来配置Xserver的一些属性,比如Screen的摆放、输入输出设备等。

Monitor

这个section用来配置显示器的一些信息,比如显示器的刷新率、分辨率等等。如果系统使用了EDID,就不需要更改这个section。只有当需要输出一个显示器不支持的分辨率并且不使用CustomEDID的时候才需要在这里指定刷新率、分辨率等内容。

Device

提供显卡硬件的信息。

用下面的命令获得:

$ lspci | grep vga -i

可能的输出为:

01:00.0 VGA compatible controller: NVIDIA Corporation GT216 [GeForce GT 220] (rev a2)

把01:00.0转换成PCI:1:0:0 即是这块显卡在系统中的PCI号。

Screen

这个section具体配置当前X的输出属性,包括输出分辨率,输出位置等。

CRT-0: 一般是显卡的CRT输出口
DFP-1: 一般是显卡的DVI输出口
DFP-2: 一般是显卡的HDMI输出口

注:以上值可能会由于主板的不同出现不同的对应关系。

InputDevice

配置xserver需要响应的输入设备属性,上面的例子展示的是”irtouch”公司的触摸屏配置。一般这个section由系统自动检测生成或者在安装输入设备驱动的时候自动添加。

双屏xorg的配置

xorg.conf内容

# nvidia-xconfig: X configuration file generated by nvidia-xconfig
# nvidia-xconfig:  version 260.19.44  ([email protected])  Sun Feb 27 21:50:39 PST 2011

Section "ServerLayout"
	InputDevice    "irtouch" "SendCoreEvents"
	Identifier     "Layout0"
	Screen      0  "Screen0"
	InputDevice    "Keyboard0" "CoreKeyboard"
	InputDevice    "Mouse0" "CorePointer"
	Option         "Xinerama" "0"
EndSection

Section "Files"
EndSection

Section "InputDevice"
	# generated from default
	Identifier     "Mouse0"
	Driver         "mouse"
	Option         "Protocol" "auto"
	Option         "Device" "/dev/psaux"
	Option         "Emulate3Buttons" "no"
	Option         "ZAxisMapping" "4 5"
EndSection

Section "InputDevice"
	# generated from default
	Identifier     "Keyboard0"
	Driver         "kbd"
EndSection

Section "Monitor"
	Identifier     "Monitor0"
	VendorName     "Unknown"
	ModelName      "Unknown"
	HorizSync       28.0 - 33.0
	VertRefresh     43.0 - 72.0
	Option         "DPMS"
EndSection

Section "Device"
	#Option        "Rotate" "CW"
	Identifier     "Device0"
	Driver         "nvidia"
	VendorName     "NVIDIA Corporation"
	BusID          "PCI:1:0:0"
EndSection

Section "Screen"
	Identifier     "Screen0"
	Device         "Device0"
	Monitor		   "Monitor0"
	Option         "TwinView" "1"
	Option         "ConnectedMonitor" "DFP-1, DFP-2"
	Option         "metamodes" "DFP-1: 1920x1080 +0+0, DFP-2: 1920x1080 +0+1080"
	Option         "CustomEDID" "DFP-1:/etc/X11/edid.bin; DFP-2: /etc/X11/edid.bin"
	SubSection     "Display"
		Depth      24
	EndSubSection
EndSection

### Touch Configuration Beginning ###
section "InputDevice"
	Identifier "irtouch"
	Driver "irtouch"
	Option "ScrenNumber" "0"
	Option "SendCoreEvents"
	Option "MinX" "0"
	Option "MinY" "0"
	Option "MaxX" "4095"
	Option "MaxY" "4095"
	Option "SwapXY" "0"
EndSection
### Touch Configuration End ###

xorg.conf解析

这里所谓的双屏是指由一块显卡进行两路输出(这里假设使用了DVI和HDMI输出,DVI对应到DFP-1,HDMI对应到DFP-2)。 跟单屏的配置比较会发现,大部分内容相同,主要区别出现在”Screen” section中:

输出非正常分辨率

这里所谓的非正常分辨率仅仅是指显示器不支持的分辨率,比如要在一台不支持1440×900的显示器上使用1440×900。有如下两种方法:

指定EDID法

指定”Screen”的输出分辨率:

Option         "metamodes" "DFP-1: 1440x900_60 +0+0"

指定Modeline法

$ cvt 1440 900 60

输出:

Modeline "1440x900_60.00"  106.50  1440 1528 1672 1904  900 903 909 934 -hsync +vsync
提供Modeline行: 在对应的”Monitor” section中写入下面这行:
Modeline "1440x900_60.00"  106.50  1440 1528 1672 1904  900 903 909 934 -hsync +vsync
添加完 Modeline后就可以设置”Screen”的输出分辨率:
Option         "metamodes" "DFP-1: 1440x900_60 +0+0"
这里1440x900_60必须跟Modeline中的名字相同,否则xserver将找不到这个分辨率。

最后需要设置”Device”的如下属性:

Option         "ExactModeTimingsDVI" "True"
Option         "ModeValidation" "NoDFPNativeResolutionCheck"
Option         "FlatPanelProperties" "Scaling=Native"

可能出现的问题: 刷新频率是一个需要做微调的选项。受限以物理显示器的带宽,如果显示器使用60HZ生成的Modeline无法显示,那么需要适当的降低这个数,比如50HZ。

名词解释

TwinView

双显示器架构。在配备 NVIDIA TwinView™ 架构的情况下,单个 GPU 最终支持多显示屏幕技术。如果不是在单个显示屏的有限范围内出现堆叠的窗口,而是将不同的工作分别显示在多个显示屏幕上,效果会怎样?金融分析员可以利用一台显示器跟踪每一个数据流。图形艺术家可以将一个完整的显示屏幕用来显示调色板,而将另一个显示屏幕用来进行编辑。想象一下一边观看晚间新闻一边查收电子邮件会有怎样的感觉。支持多种显示选件(例如数字平面屏幕、RGB 显示器、电视机和模拟平面屏幕)可提供量身定做的视觉解决方案,从而满足个人需求并提高生产力。

Xinerama

Xinerama是X窗口系统的一个扩展,它使得基于X的应用程序可以把一个或多个物理显示器作为一个虚拟显示器来使用。

EDID

EDID(Extended Display Identification Data)是一种 VESA 标准数据格式,其中包含有关监视器及其性能的参数,包括供应商信息、最大图像大小、颜色设置、厂商预设置、频率范围的限制以及显示器名和序列号的字符串。这些信息保存在 display 节中,用来通过一个 DDC(Display Data Channel)与系统进行通信,这是在显示器和 PC 图形适配器之间进行的。最新版本的 EDID 可以在 CRT、LCD 以及将来的显示器类型中使用,这是因为 EDID 提供了几乎所有显示参数的通用描述。

Modeline

它可以为服务器提供有关所连接的计算机显示器的信息,以及如何在指定的显示分辨率下对其进行驱动的信息。(最初在 XFree86 上是在 XF86Config 中。)现在,在很多 Linux/UNIX 版本中,modeline 都不再需要了,因为服务器会在启动时根据各种参数来计算配置。但是当我们需要输出一个物理显示器不支持的分辨率的时候就需要为xserver写入Modeline。 一个modeline有10个参数,首先是一个指定分辨率的标签。第 2 个参数指定的是像素时钟频率(单位为 MHz)。下面是两组 4 个数字。第 1 组指定了 x 分辨率(宽度)以及相关参数;第 2 组指定的是 y 分辨率(高度)。另外,还可以添加其他参数作为选项来控制水平和垂直的同步值,还有一些选项可以控制隔行模式和双屏模式。