|
楼主 |
发表于 2003-2-11 19:55:05
|
显示全部楼层
FreeBSD连载(54):配置文件XF86Config
配置文件XF86Config
位于/etc目录下的XF86Config文件是XFree86的X服务器的配置文件,XF86Setup 或者xf86config在配置完后就将配置信息保存在这个文件中。XFree86也提供了一个配置文件的样例文件,/usr/X11R6/lib/X11/XF86Config.eg,可以用作参考。很多情况下需要对X的行为进行微调,而并不想重新启动设置程序重复进行整个设置过程,这样手工修改配置文件就更为方便。
有一些X服务器的参数使用配置程序并不能进行配置,必须在原有XF86Config上手工更改配置文件。
下面将以一个简单的配置文件为例进行简单介绍XFree86的设置选项。
* 文件搜寻路径
Section "Files"
RgbPath "/usr/X11R6/lib/X11/rgb"
FontPath "/usr/X11R6/lib/X11/fonts/75dpi/:unscaled"
FontPath "/usr/X11R6/lib/X11/fonts/100dpi/:unscaled"
FontPath "/usr/X11R6/lib/X11/fonts/misc/"
FontPath "/usr/X11R6/lib/X11/fonts/75dpi/"
FontPath "/usr/X11R6/lib/X11/fonts/100dpi/"
# FontPath tcp/fontserver:7000
# ModulePath "/usr/X11R6/lib/modules"
EndSection
上面是配置文件的第一部分 “Files” ,这个文件部分定义了 X Window使用的搜索文件路径,如调色板文件的路径RGBPath,字体路径FontPath,以及ModulePath用来设置X服务器的动态可加载模块的路径。
其中字体路径可以使用多行来设置多个路径,也可以在一行之内设置多个路径,路径之间使用逗号分隔。字体路径也能定义为网络上的字体服务器,这需要指定协议、主机名和端口地址,例如tcp/fontserver:7000表示一台名为fontserver的字体服务器使用tcp端口7000提供字体服务。Unscaled用于修饰表示对这个路径下的字体不进行缩放处理,处理固定字体可减少系统资源的消耗。使用字体服务器可以让多个服务器同享字体,从而达到节约磁盘空间的目的。
在行首使用符号 “#” ,表示这一行为注释,并不被X服务器处理。
* 可加载模块
# Section "Module"
# Load "xf86Jstk.so"
# EndSection
如果前面Files部分定义了ModulePath,这个"Module"部分就用来装载相应路径下具体的模块。一般情况下,并不需要使用这个功能,除非是使用了一些非标准的功能,需要可加载模块的支持,如xf86Jstk.so就是一个游戏杆的驱动程序。
* X服务器选项
Section "ServerFlags"
# NoTrapSignals
# DontZap
# DontZoom
# DisableVidModeExtension
# AllowNonLocalXvidtune
# DisableModInDev
# AllowNonLocalModInDxev
EndSection
"ServerFlags"部分设置一些X服务器的运行参数,对应于XF86Setup 中的Other选项中所设置的内容,一般不需改变。
NoTrapSignals选项使得X服务器程序不去处理发送到X服务器的各个信号, 正常情况下不设置这个选项,X服务器应该接收并处理这些信号,当接收到某些信号时就释放X服务器占用的资源,切换显示模式并退出X服务器的执行。因此打开这个选项就使得发送到X服务器的信号没有得到处理,在错误不严重的情况下,X程序仍将继续执行而不退出。因此可以用于调试X服务器,观察X的出错原因及其影响。
DontZap选项用于屏蔽Crtl-Alt-BackSpace热键,通常不设置这个选项时,使用者能够使用这个组合热键退出X服务器。当要将XFree86系统用作公用X终端时,最好使用这个选项屏蔽退出热键,让用户使用正常的退出方式退出登录会话。
DontZoom这个选项用于屏蔽<Crtl><Alt><小键盘 “+” >或< 小键盘 “-” >两个用于动态切换分辨率模式的组合键,当然X服务器必须同时设置了多个分辨率模式,这两个组合键才有意义。
xvidtune能实时改变X服务器的显示模式,例如调整显示区域位于显示器中的位置等。然而一旦针对某个显示器的显示模式调整正确之后,就没有必要动态改变了,因此可以使用DisableVidModeExtension 选项屏蔽xvidtune实时改变显示模式的能力,以保证显示器的安全。一般只有本服务器上的 xvidtune可以完成这个操作,在当前X服务器上运行远程计算机上的xvidtune不允许改变本服务器的状态。但是,也可以通过设置AllowNonLocalXvidtune选项, 使得非本服务器上的xvidtune也有能力和本地的X服务器进行通信。第二个选项必须在第一个没有设置的条件下才能设置。为了安全的原因,不应该允许远程系统上的xvidtune获得本服务器的硬件设置信息,不要设置这个选项。
使用DisableModInDev选项,可以屏蔽客户程序对输入设备(鼠标或键盘)的动态改变。 而AllowNonLocalModInDxev选项可以许可非本地的程序(xset)能动态改变键盘或鼠标的设置。同样,这两个选项是冲突的。
* 键盘设置
Section "Keyboard"
Protocol "Standard"
# Protocol "Xqueue"
AutoRepeat 500 5
# ServerNumLock
# Xleds 1 2 3
LeftAlt Meta
RightAlt ModeShift
RightCtl Compose
ScrollLock ModeLock
# XkbDisable
XkbKeycodes "xfree86"
XkbTypes "default"
XkbCompat "default"
XkbSymbols "us(pc101)"
XkbGeometry "pc"
XkbRules "xfree86"
XkbModel "pc104"
XkbLayout "us"
EndSection
"Keyboard"用于定义键盘的参数,指定了键盘使用的协议、重复率以及对一些功能键的重映射。通常在XF86Setup下就可以设置这些选项,而不必手工修改这些设置。
"Standard"和"Xqueue"是两种不同的键盘协议,一般应该使用Standard协议,Xqueue是一种同时支持键盘和鼠标的硬件使用的协议,在个人计算机平台上很少使用。
"AutoRepeat"用于定义键盘的重复速度,"ServerNumLock"让X服务器处理 NumLock的状态,否则是由系统的键盘驱动程序处理这个状态。有些X客户程序不能从系统键盘驱动程序中获得小键盘的情况,此时就需要设置这个选项。”Xleds”允许X程序,如xset,能够改变键盘上三个LED状态灯NumLock、CapsLock和ScrollLocal的状态。
下面的"LeftAlt"等设置,用于将个人计算机键盘上的键重新映射为一些传统Unix 工作站的键盘上使用的键,如Meta、Compose等,由于传统X程序大多数是在工作站上开发的,因此这些程序需要这些特殊的功能键来完成操作,就需要映射这些键的定义以保证兼容性。
"XkbDisable"选项可以用于屏蔽X服务器对键盘的扩展能力, 通常不应该屏蔽这个能力,而不设置这个参数。这样就可以在设置文件中使用下面的设置选项重新定义键盘的类型、排列方式、符号类型、型号、编码等等。当然一般情况下可以不重新定义这些参数,缺省设置为101 键PC键盘,适用于绝大多数的情况。
* 鼠标设置
Section "ointer"
Protocol "Sysmouse"
Device “/dev/sysmouse”
# Protocol "Microsoft"
# Device "/dev/ttyd0"
# BaudRate 1200
# SampleRate 150
# Emulate3Buttons
# Emulate3Timeout 50
# ChordMiddle
EndSection
"ointer"部分用于定义鼠标的参数,最重要的内容是定义鼠标的类型和使用的设备文件。对于使用moused来管理鼠标的情况,鼠标配置相当容易,首先在控制台下设置好鼠标,然后使用/dev/sysmouse作设备文件,Sysmouse作为鼠标类型即可。如果不打算使用moused来管理鼠标,而想直接使用鼠标设备,就需要正确指定鼠标类型及其设备文件。例如最常见的MS两键串口鼠标使用/dev/ttyd0(或ttyd1串口),使用 Microsoft鼠标类型,等等。
注意必须保证系统内核识别出所使用的鼠标设备(或者串口设备)。
此外,BaudRate与SampleRate参数定义鼠标驱动程序与设备通信的波特率和采样率,Emulate3Buttons和Emulate3Timeout让两键鼠标能模拟三键鼠标, 然而伪设备Sysmouse的模拟三键能力的设置需要在moused的启动参数中设置,这里的设置是无效的。ChordMiddle与上面参数意义相反,定义按下三键鼠标的中间键,等价于同时按下左右两键。
* 显示器设置
Section "Monitor"
Identifier "Hyundai DeluxScan 15G+"
VendorName "Unknown"
ModelName "Unknown"
HorizSync 30-70
VertRefresh 50-150
# ModeLine "1024x768i" 45 1024 1048 1208 1264 768 776 784 817 Interlace
# Mode "1024x768i"
# DotClock 45
# HTimings 1024 1048 1208 1264
# VTimings 768 776 784 817
# Flags "Interlace"
# EndMode
# 800x600 @ 72 Hz, 48.0 kHz hsync
Modeline "800x600" 50 800 856 976 1040 600 637 643 666 +hsync +vsync
# 1024x768 @ 70 Hz, 56.5 kHz hsync
Modeline "1024x768" 75 1024 1048 1184 1328 768 771 777 806 -hsync -vsync
# 1280x1024 @ 87 Hz interlaced, 51 kHz hsync
Modeline "1280x1024" 80 1280 1296 1512 1568 1024 1025 1037 1165 Interlace
EndSection
"Monitor"部分定义了显示器的各种属性,其中前三项设置Identifier 、VendorName、ModelName起到的只是标识显示器的作用, 如果具备多个显示器定义选项的时候可以用来区分不同的定义选项,因此这三个设置主要用在配置文件内部,并不重要。 后面的水平同步HorizSync与垂直刷新VertRefresh的数据才是真正定义显示器属性的参数,应该与具体的硬件相一致,这将决定显示器能否工作在具体的显示模式下。
ModeLine或Mode定义了具体显示模式使用的时序等参数,只有在这里定义了相应模式,X服务器才能使用对应的模式,并在各种模式之间动态切换。然而XF86Setup并没有设置在显示器的同步频率范围内支持的全部模式,因此会需要手工增加所需要的模式。而xf86config能将很多显示模式都加进设置文件中,其中很多是不必要的,例如320x200等低分辨率,需要手工删除。此外一个分辨率可能会有多个显示模式相对应,但不同模式的刷新频率不同,显然应该保留一个显示器支持的非隔行扫描、并具备最高刷新频率的模式。这些显示模式受到水平同步和垂直刷新数据的限制,X服务器会在启动时屏蔽超过前面定义的水平同步和垂直刷新数据范围的模式,一避免损坏显示器。
显然,Modeline和Mode选项中的设置数据是一般使用者无法正确设置的,因此就需要从XFree86 的文档中查询各种常见的显示器和及其常用的显示模式数据,来决定最接近自己显示器的显示模式,在复制到自己的设置文件中。XFree86的文档位于在/usr/X11R6/lib/X11/doc目录下,Readme.Config和 VideoModes.doc文件描述了各种显示模式的对应数据,Monitors文件中收集了各种常见显示器的水平同步和垂直刷新数据。
如果没有定义多个模式,就不能使用X Server提供的动态切换分辨率模式的功能。
* 显示卡设置
Section "Device"
Identifier "Generic VGA"
VendorName "Unknown"
BoardName "Unknown"
Chipset "generic"
# VideoRam 256
# Clocks 25.2 28.3
EndSection
Section "Device"
Identifier "ViRGE/DX or /GX"
VendorName "Unknown"
BoardName "Unknown"
#VideoRam 2048
EndSection
"Device"部分定义显示卡设备的参数,同样Identifier、 VendorName、ModelName起到标识作用,具体设置如使用的芯片、显示内存等设置应与所使用的硬件相一致,但也可以不配置,留给X服务器自动探测。同样,也可以定义多个Device设置,某个具体的X服务器程序只使用某个选项中的设置。
如果要针对某个显示卡更改具体参数,除了查阅显示卡手册之外,还要阅读 /usr/X11R6/lib/X11/doc/目录下的Devices、modeDB.txt和AccelCards等文档,在其中查找与具体显示卡相关的数据信息。
* 屏幕设置
Section "Screen"
Driver "vga16"
Device "Generic VGA"
Monitor "Hyundai DeluxScan 15G+"
Subsection "Display"
Modes "640x480"
ViewPort 0 0
Virtual 800 600
EndSubsection
EndSection
Section "Screen"
Driver "accel"
Device "ViRGE/DX or /GX"
Monitor "Hyundai DeluxScan 15G+"
DefaultColorDepth 16
Subsection "Display"
Depth 24
Modes "800x600" "640x480"
ViewPort 0 0
Virtual 800 600
EndSubsection
Subsection "Display"
Depth 8
Modes "800x600" "640x480"
ViewPort 0 0
Virtual 800 600
EndSubsection
Subsection "Display"
Depth 16
Modes "1024x768" "800x600" "640x480"
ViewPort 0 0
Virtual 1024 768
EndSubsection
EndSection
“Screen”部分将具体定义X服务器的显示属性,以及具体使用的设备和显示模式。同时可以存在多个Screen部分,而每个screen部分对应一种X服务器。虽然一般情况下都只使用一个X服务器,然而也可能会使用标准VGA模式的X服务器(如使用XF86Setup时),因此一般配置文件中都至少有两个Screen部分的定义,一个由标准VGA 的X服务器XF86_VGA16使用,在其中的Driver项中指定了vga16类型,另一个Screen 定义由支持更高模式的具备硬件加速能力的显示卡X服务器使用,如XF86_S3V,Driver 项为accel类型。X服务器根据Driver项的设置来寻找正确的Screen部分设置参数。
除了在Driver选项中指定了Screen选项与具体X服务器的联系之外, 接下来的Device设置选项将指出这个Screen部分(也就是对应的X服务器)使用哪个显示设备,这个选项的值与设置文件前面定义的某一个Device部分中Identifier值相同,这就将X服务器和指定的显示设备相联系起来(会存在多个定义显示卡设备的Device部分)。同样,Monitor项将Screen部分与某个Monitor部分描述的显示器相联系。
在一个Screen部分中也可以定义多个Display子部分,每个Display子部分为对应一种色彩深度的显示模式设置,颜色深度Depth可以使用的值有8位(256色)、16位伪真彩色、24位真彩色和32位真彩色(实际只用了24位),DefaultColorDepth用于设置缺省使用的色彩深度。X服务器不能动态切换显示颜色深度,只能在同一个颜色深度下切换不同的显示模式。这个颜色深度下可供使用的分辨率模式需要使用Modes定义,缺省的分辨率为第一个模式,然后可以使用热键向前或向后切换。
动态切换分辨率不影响应用程序的显示,应用程序的显示内容也不变,XFree86提供了虚屏能力。虚屏提供了比实际屏幕更大的显示范围,例如使用800x600的显示模式,虚屏的大小可以是1024x768,这样可以显示更多的数据,实际屏幕之外的数据可随鼠标的移动而显示出来。这样在切换模式的时候,虚屏的大小却不变,可以移动鼠标来查看应用程序切换到虚屏之外的部分。缺省情况下,虚屏的大小为最大的分辨率模式,也可以使用Virtual参数定义更大的虚屏。可设置的虚屏大小受显示卡内存和所显示的色彩深度限制,色彩深度和虚屏大小的乘积不能超过显示内存的大小。为了达到最佳效果,还有一些其他考虑。例如加速卡内有自己的处理器进行图形加速处理,就要使用一些显存作为缓冲区,因此将所有的显存都用做虚屏会影响显示卡的加速处理。
未完,待续。。。 |
|