23.2 X Server 配置文件解析与设置

从前面的说明来看,我们知道一个 X 窗口系统能不能成功启动,其实与 X Server 有很大的关系的。因为 X Server 负责的是整个画面的描绘,所以没有成功启动 X Server 的话,即使有启动 X Client 也无法将图样显示出来啊。所以,下面我们就针对 X Server 的配置文件来做个简单的说明,好让大家可以成功的启动 X Window System 啊。

基本上, X Server 管理的是显卡、屏幕分辨率、鼠标按键对应等等,尤其是显卡芯片的认识,真是重要啊。 此外,还有显示的字体也是 X Server 管理的一环。基本上,X server 的配置文件都是默认放置在 /etc/X11 目录下,而相关的显示模块或上面提到的总总模块,则主要放置在 /usr/lib64/xorg/modules 下面。比较重要的是字体文件与芯片组,她们主要放置在:

提供的屏幕字体: /usr/share/X11/fonts/
显卡的芯片组: /usr/lib64/xorg/modules/drivers/

在 CentOS 下面,这些都要通过一个统一的配置文件来规范,那就是 X server 的配置文件啦。这个配置文件的文件名就是 /etc/X11/xorg.conf 喔!

23.2.1 解析 xorg.conf 设置

如同前几个小节谈到的,在 Xorg 基金会里面的 X11 版本为 X11R7.N ,那如果你想要知道到底你用的 X Server 版本是第几版,可以使用 X 指令来检查喔!(你必须以 root 的身分执行下列指令)

[[email protected] ~]# X -version
X.Org X Server 1.15.0
Release Date: 2013-12-27
X Protocol Version 11, Revision 0
Build Operating System:  2.6.32-220.17.1.el6.x86_64
Current Operating System: Linux study.centos.vbird 3.10.0-229.el7.x86_64 #1 SMP Fri Mar 
  6 11:36:42 UTC 2015 x86_64
Kernel command line: BOOT_IMAGE=/vmlinuz-3.10.0-229.el7.x86_64 root=/dev/mapper/centos-
  root ro rd.lvm.lv=centos/root rd.lvm.lv=centos/swap crashkernel=auto rhgb quiet
Build Date: 10 April 2015  11:44:42AM
Build ID: xorg-x11-server 1.15.0-33.el7_1
Current version of pixman: 0.32.4
        Before reporting problems, check http://wiki.x.org
        to make sure that you have the latest version.

由上面的几个关键字我们可以知道,目前鸟哥的这部测试机使用的 X server 是 Xorg 计划所提供的 X11 版, 不过看起来 Xorg 已经将所谓的 X11R7 那个 R7 的版次移除,使用的是 Xorg 自己的版次了!所以是 Xorg 1.15.0 版本! 此外,若有问题则可以到 http://wiki.x.org 去查询~因为是 Xorg 这个 X server ,因此我们的配置文件文件名为 /etc/X11/xorg.conf 这一个哩。所以,理解这个文件的内容对于 X server 的功能来说,是很重要的。

比较需要留意的是,从 CentOS 6 以后 (当然包含 CentOS 7),X server 在每次启动的时候都会自行侦测系统上面的显示芯片、屏幕类型等等, 然后自行搭配最优化的驱动程序载入。因此,这个 /etc/X11/xorg.conf 已经不再被需要了。不过,如果你不喜欢 X 系统自行侦测的设置值, 那也可以自行创建 xorg.conf 就是了。

此外,如果你只想要加入或者是修改部份的设置,并不是每个元件都要自行设置的话,那么可以在 /etc/X11/xorg.conf.d/ 这个目录下创建文件名为 .conf 的文件, 将你需要的额外项目加进去即可喔!那就不会每个设置都以你的 xorg.conf 为主了!了解乎?

Tips 那我怎么知道系统用的是哪一个设置呢?可以参考 /var/log/Xorg.0.log 的内容,该文件前几行会告诉你使用的设置文件是来自于哪里的喔!

注意一下,在修改这个文件之前,务必将这个文件给它备份下来,免的改错了什么东西导致连 X server 都无法启动的问题啊。这个文件的内容是分成数个段落的,每个段落以 Section 开始,以 EndSection 结束, 里面含有该 Section (段落) 的相关设置值,例如:

Section  "section name"
…… <== 与这个 section name 有关的设置项目
……
EndSection

至于常见的 section name 主要有:

  1. Module: 被载入到 X Server 当中的模块 (某些功能的驱动程序);
  2. InputDevice: 包括输入的 1. 键盘的格式 2. 鼠标的格式,以及其他相关输入设备;
  3. Files: 设置字体所在的目录位置等;
  4. Monitor: 监视器的格式, 主要是设置水平、垂直的更新频率,与硬件有关;
  5. Device: 这个重要,就是显卡芯片组的相关设置了;
  6. Screen: 这个是在屏幕上显示的相关分辨率与色彩深度的设置项目,与显示的行为有关;
  7. ServerLayout: 上述的每个项目都可以重复设置,这里则是此一 X server 要取用的哪个项目值的设置啰。

前面说了,xorg.conf 这个文件已经不存在,那我们怎么学习呢?没关系,Xorg 有提供一个简单的方式可以让我们来重建这个 xorg.conf 文件! 同时,这可能也是 X 自行侦测 GPU 所产生的最优化设置喔!怎么处理呢?假设你是在 multi-user.target 的环境下,那就可以这样作来产生 xorg.conf 喔!

[[email protected] ~]# Xorg -configure
.....(前面省略).....
Markers: (--) probed, (**) from config file, (==) default setting,
        (++) from command line, (!!) notice, (II) informational,
        (WW) warning, (EE) error, (NI) not implemented, (??) unknown.
(==) Log file: "/var/log/Xorg.0.log", Time: Wed Sep 16 10:13:57 2015
List of video drivers:   # 这里在说明目前这个系统上面有的显卡芯片组的驱动程序有哪些的意思
        qxl
        vmware
        v4l
        ati
        radeon
        intel
        nouveau
        dummy
        modesetting
        fbdev
        vesa
(++) Using config file: "/root/xorg.conf.new"        # 使用的配置文件
(==) Using config directory: "/etc/X11/xorg.conf.d"  # 额外设置项目的位置
(==) Using system config directory "/usr/share/X11/xorg.conf.d"
(II) [KMS] Kernel modesetting enabled.
.....(中间省略).....
Your xorg.conf file is /root/xorg.conf.new           # 最终新的文件出现了!
To test the server, run 'X -config /root/xorg.conf.new' # 测试手段!

这样就在你的 root 主文件夹产生一个新的 xorg.conf.new 啰!好了,直接来看看这个文件的内容吧!这个文件默认的情况是取消很多设置值的, 所以你的配置文件可能不会看到这么多的设置项目。不要紧的,后续的章节会交代如何设置这些项目的喔!

[[email protected] ~]# vim xorg.conf.new
Section "ServerLayout"                             # 目前 X 决定使用的设置项目
        Identifier     "X.org Configured"
        Screen      0  "Screen0" 0 0               # 使用的屏幕为 Screen0 这一个 (后面会解释)
        InputDevice    "Mouse0" "CorePointer"      # 使用的鼠标设置为 Mouse0
        InputDevice    "Keyboard0" "CoreKeyboard"  # 使用的键盘设置为 Keyboard0
EndSection
# 系统可能有多组的设置值,包括多种不同的键盘、鼠标、显示芯片等等,而最终 X 使用的设置,
# 就是在这个 ServerLayout 项目中来处理的!因此,你还得要去下面找出 Screen0 是啥
Section "Files"
        ModulePath   "/usr/lib64/xorg/modules"
        FontPath     "catalogue:/etc/X11/fontpath.d"
        FontPath     "built-ins"
EndSection
# 我们的 X Server 很重要的一点就是必须要提供字体,这个 Files 的项目就是在设置字体,
# 当然啦,你的主机必须要有字体文件才行。一般字体文件在:/usr/share/X11/fonts/ 目录中。
# 但是 Xorg 会去读取的则是在 /etc/X11/fontpath.d 目录下的设置喔!
Section "Module"
        Load  "glx"
EndSection
# 上面这些模块是 X Server 启动时,希望能够额外获得的相关支持的模块。
# 关于更多模块可以搜寻一下 /usr/lib64/xorg/modules/extensions/ 这个目录
Section "InputDevice"
        Identifier  "Keyboard0"
        Driver      "kbd"
EndSection
# 就是键盘,在 ServerLayout 项目中有出现这个 Keyboard0 吧!主要是设置驱动程序!
Section "InputDevice"
        Identifier  "Mouse0"
        Driver      "mouse"
        Option      "Protocol" "auto"
        Option      "Device" "/dev/input/mice"
        Option      "ZAxisMapping" "4 5 6 7"   # 支持磙轮功能!
EndSection
# 这个则主要在设置鼠标功能,重点在那个 Protocol 项目,
# 那个是可以指定鼠标接口的设置值,我这里使用的是自动侦测!不论是 USB/PS2。
Section "Monitor"
        Identifier   "Monitor0"
        VendorName   "Monitor Vendor"
        ModelName    "Monitor Model"
EndSection
# 屏幕监视器的设置仅有一个地方要注意,那就是垂直与水平的更新频率,常见设置如下:
#       HorizSync    30.0 - 80.0
#       VertRefresh  50.0 - 100.0
# 在上面的 HorizSync 与 VerRefresh 的设置上,要注意,不要设置太高,
# 这个玩意儿与实际的监视器功能有关,请查询你的监视器手册说明来设置吧!
# 传统 CRT 屏幕设置太高的话,据说会让 monitor 烧毁呢,要很注意啊。
Section "Device"     # 显卡芯片 (GPU) 的驱动程序!很重要的设置!
        Identifier  "Card0"
        Driver      "qxl"        # 实际使用的显卡驱动程序!
        BusID       "PCI:0:2:0"
EndSection
# 这地方重要了,这就是显卡的芯片模块载入的设置区域。由于鸟哥使用 Linux KVM
# 仿真器仿真这个测试机,因此这个地方显示的驱动程序为 qxl 模块。
# 更多的显示芯片模块可以参考 /usr/lib64/xorg/modules/drivers/
Section "Screen"                # 与显示的画面有关,分辨率与色彩深度
        Identifier "Screen0"    # 就是 ServerLayout 里面用到的那个屏幕设置
        Device     "Card0"      # 使用哪一个显卡的意思!
        Monitor    "Monitor0"   # 使用哪一个屏幕的意思!
        SubSection "Display"    # 此阶段的附属设置项目
                Viewport   0 0
                Depth     1     # 就是色彩深度的意思!
        EndSubSection
        SubSection "Display"
                Viewport   0 0
                Depth     16
        EndSubSection
        SubSection "Display"
                Viewport   0 0
                Depth     24
        EndSubSection
EndSection
# Monitor 与实际的显示器有关,而 Screen 则是与显示的画面分辨率、色彩深度有关。
# 我们可以设置多个分辨率,实际应用时可以让使用者自行选择想要的分辨率来呈现,设置如下:
#        Modes    "1024x768" "800x600" "640x480" <==分辨率
# 上述的 Modes 是在 "Display" 下面的子设置。
# 不过,为了避免困扰,鸟哥通常只指定一到两个分辨率而已。

上面设置完毕之后,就等于将整个 X Server 设置妥当了,很简单吧。如果你想要更新其他的例如显示芯片的模块的话,就得要去硬件开发商的网站下载原始文件来编译才行。 设置完毕之后,你就可以启动 X Server 试看看啰。然后,请将 xorg.conf.new 更名成类似 00-vbird.conf 之类的文件名, 再将该文件移动到 /etc/X11/xorg.conf.d/ 里面去,这样就 OK 了!

# 测试 X server 的配置文件是否正常:
[[email protected] ~]# startx    <==直接在 multi-user.target 启动 X 看看
[[email protected] ~]# Xorg :1   <==在 tty3 单独启动 X server 看看

当然,你也可以利用 systemctl isolate graphical.target 这个指令直接切换到图形接口的登陆来试看看啰。

Tips 经由讨论区网友的说明,如果你发现明明有捉到显卡驱动程序却老是无法顺利启动 X 的话,可以尝试去官网取得驱动程序来安装, 也能够将“Device”阶段的“Driver”修改成默认的“Driver "vesa"”,使用该驱动程序来暂时启动 X 内的显卡喔!

23.2.2 字体管理

我们 Xorg 所使用的字体大部分都是放置于下面的目录中:

  • /usr/share/X11/fonts/
  • /usr/share/fonts/

不过 Xorg 默认会载入的字体则是记录于 /etc/X11/fontpath.d/ 目录中,使用链接文件的模式来进行链接的动作而已。 你应该还记得 xorg.conf 里面有个“ Flies ”的设置项目吧?该项目里面就有指定到“ FontPath "catalogue:/etc/X11/fontpath.d" ” 对吧!也就是说,我们默认的 Xorg 使用的字体就是取自于 /etc/X11/fontpath.d 啰!

鸟哥查了一下 CentOS 7 针对中文字体 (chinese) 来说,有楷书与明体,明体默认安装了,不过楷书却没有安装耶~ 那我们能不能安装了楷书之后,将楷书也列为默认的字体之一呢?来瞧一瞧我们怎么作的好了:

# 1\. 检查中文字体,并且安装中文字体与检验有没有放置到 fontpath.d 目录中!
[[email protected] ~]# ll -d /usr/share/fonts/cjk*
drwxr-xr-x. 2 root root 22 May  4 17:54 /usr/share/fonts/cjkuni-uming
[[email protected] ~]# yum install cjkuni-ukai-fonts
[[email protected] ~]# ll -d /usr/share/fonts/cjk*
drwxr-xr-x. 2 root root 21 Sep 16 11:48 /usr/share/fonts/cjkuni-ukai  # 这就是楷书!
drwxr-xr-x. 2 root root 22 May  4 17:54 /usr/share/fonts/cjkuni-uming
[[email protected] ~]# ll /etc/X11/fontpath.d/ lrwxrwxrwx. 1 root root 29 Sep 16 11:48 cjkuni-ukai-fonts -> /usr/share/fonts/cjkuni-ukai/
lrwxrwxrwx. 1 root root 30 May  4 17:54 cjkuni-uming-fonts -> /usr/share/fonts/cjkuni-uming/
lrwxrwxrwx. 1 root root 36 May  4 17:52 default-ghostscript -> /usr/share/fonts/default/ghostscript
lrwxrwxrwx. 1 root root 30 May  4 17:52 fonts-default -> /usr/share/fonts/default/Type1
lrwxrwxrwx. 1 root root 27 May  4 17:51 liberation-fonts -> /usr/share/fonts/liberation
lrwxrwxrwx. 1 root root 27 Sep 15 17:10 xorg-x11-fonts-100dpi:unscaled:pri=30 -> /usr/share/X11/fonts/100dpi
lrwxrwxrwx. 1 root root 26 Sep 15 17:10 xorg-x11-fonts-75dpi:unscaled:pri=20 -> /usr/share/X11/fonts/75dpi
lrwxrwxrwx. 1 root root 26 May  4 17:52 xorg-x11-fonts-Type1 -> /usr/share/X11/fonts/Type1
# 竟然会自动的将该字体加入到 fontpath.d 当中!太好了! ^_^
# 2\. 创建该字体的字体高速缓存数据,并检查是否真的取用了?
[[email protected] ~]# fc-cache -v | grep ukai
/usr/share/fonts/cjkuni-ukai: skipping, existing cache is valid: 4 fonts, 0 dirs
[[email protected] ~]# fc-list | grep ukai
/usr/share/fonts/cjkuni-ukai/ukai.ttc: AR PL UKai TW:style=Book
/usr/share/fonts/cjkuni-ukai/ukai.ttc: AR PL UKai HK:style=Book
/usr/share/fonts/cjkuni-ukai/ukai.ttc: AR PL UKai CN:style=Book
/usr/share/fonts/cjkuni-ukai/ukai.ttc: AR PL UKai TW MBE:style=Book
# 3\. 重新启动 Xorg,或者是强制重新进入 graphical.target
[[email protected] ~]# systemctl isolate multi-user.target; systemctl isolate graphical.target

如果上述的动作没有问题的话,现在你可以在图形界面下面,通过“应用程序” --> “公用程序” --> “字体检视程序”当中找到一个名为 “AR PL UKai CN, Book”字样的字体,点下去就会看到如下的图示,那就代表该字体已经可以被使用了。不过某些程序可能还得要额外的加工就是了~[4]

安装楷书字体的结果图23.2.1、安装楷书字体的结果

鸟哥比较好奇的是,这个字体的开发者怎么这么有趣!列出来的示意字体竟然是吃了玻璃会身体头好壮壮~这…会不会教坏小孩啊?呵呵呵呵~

  • 让窗口管理员可以使用额外的字体

如果想要使用额外的字体的话,你可以自行取得某些字体来处理的。鸟哥这边从 Windows 微软正黑体、Times new Romans 两种字体加上粗、斜体等共六个文件来处理字体的安装~ 这边得注明一下是纯粹的测试,测试完毕后文件就给它拿掉了,并没有持续使用喔!并没有想要违法的意思啦~大家参考看看就好了。 那就来看看如何增加字体吧!(假设上述的字体文件是放置在 /root/font 中)

# 1\. 将字体文件放置到系统设置目录,亦即下面的目录中:
[[email protected] ~]# cd /usr/share/fonts/
[[email protected] ~]# mkdir windows
[[email protected] ~]# cp /root/font/*.ttf /usr/share/fonts/windows/
# 2\. 使用 fc-cache 将上述的文件加入字体的支持中:
[[email protected] ~]# fc-cache -f -v
....(前面省略)....
/usr/share/fonts/windows: caching, new cache contents: 6 fonts, 0 dirs
....(后面省略)....
# -v 仅是列出目前的字体数据, -f 则是强制重新创建字体高速缓存!
# 3\. 通过 fc-list 列出已经被使用的文件看看:
[[email protected] ~]# fc-list : file | grep window  <==找出被高速缓存住的文件名
/usr/share/fonts/windows/timesbi.ttf:
/usr/share/fonts/windows/timesi.ttf:
/usr/share/fonts/windows/msjh.ttf:
/usr/share/fonts/windows/times.ttf:
/usr/share/fonts/windows/msjhbd.ttf:
/usr/share/fonts/windows/timesbd.ttf:

之后在字体检视器里面就会发现有多了“Microsoft JhengHei, Times New Roman”等等的字体可以用啰!

23.2.3 显示器参数微调

有些朋友偶而会这样问:“我的显示器明明还不错,但是屏幕分辨率却永远只能达到 800x600 而已, 这该如何处理?”,屏幕的分辨率应该与显卡相关性不高,而是与显示器的更新频率有关!

所谓的更新频率,指的是在一段时间内屏幕重新绘制画面的速度。举例来说, 60Hz 的更新频率, 指的是每秒钟画面更新 60 次的意思。那么关于显示器的更新频率该如何调整呢? 你得先去找到你的显示器的使用说明书 (或者是网站会有规格介绍),取得最高的更新率后,接下来选择你想要的分辨率, 然后通过这个 gtf 的指令功能来调整:

Tips 基本上,现在新的 Linux distribution 的 X server 大多使用自行侦测方式来处理所有的设置了,因此, 除非你的屏幕特别新或者是特别怪,否则应该不太需要使用到 gtf 的功能啰!

# 1\. 先来测试一下你目前的屏幕搭配显卡所能够处理的分辨率与更新频率 (须在 X 环境下)
[[email protected] ~]# xrandr
Screen 0: minimum 320 x 200, current 1440 x 900, maximum 8192 x 8192
Virtual-0 connected primary 1440x900+0+0 0mm x 0mm
   1024x768       59.9 +
   1920x1200      59.9
   1920x1080      60.0
   1600x1200      59.9
   1680x1050      60.0
   1400x1050      60.0
   1280x1024      59.9
   1440x900       59.9*
   1280x960       59.9
   1280x854       59.9
   1280x800       59.8
   1280x720       59.9
   1152x768       59.8
   800x600        59.9
   848x480        59.7
   720x480        59.7
   640x480        59.4
# 上面显示现在的环境中,测试过最高分辨率大概是 1920x1200 ,但目前是 1440x900 (*)
# 若需要调整成 1280*800 的话,可以使用下面的方式来调整喔!
[[email protected] ~]# xrandr -s 1280x800
# 2\. 若想强迫 X server 更改屏幕的分辨率与更新频率,则需要修订 xorg.conf 的设置。先来侦测:
[[email protected] ~]# gtf 水平像素 垂直像素 更新频率 [-xv]
选项与参数:
水平像素:就是分辨率的 X 轴
垂直像素:就是分辨率的 Y 轴
更新频率:与显示器有关,一般可以选择 60, 75, 80, 85 等频率
-x      :使用 Xorg 配置文件的模式输出,这是默认值
-v      :显示侦测的过程
# 1\. 使用 1024x768 的分辨率,75 Hz 的更新频率来取得显示器内容
[[email protected] ~]# gtf 1024 768 75 -x
# 1024x768 @ 75.00 Hz (GTF) hsync: 60.15 kHz; pclk: 81.80 MHz
Modeline "1024x768_75.00"  81.80  1024 1080 1192 1360  768 769 772 802  -HSync +Vsync
# 重点是 Modeline 那一行!那行给他抄下来
# 2\. 将上述的数据输入 xorg.conf.d/*.conf 内的 Monitor 项目中:
[[email protected] ~]# vim /etc/X11/xorg.conf.d/00-vbird.conf
Section "Monitor"
    Identifier   "Monitor0"
    VendorName   "Monitor Vendor"
    ModelName    "Monitor Model"
    Modeline "1024x768_75.00"  81.80  1024 1080 1192 1360  768 769 772 802  -HSync +Vsync
EndSection
# 就是新增上述的那行特殊字体部分到 Monitor 的项目中即可。

然后重新启动你的 X ,这样就能够选择新的分辨率啰!那如何重新启动 X 呢?两个方法, 一个是“ systemctl isolate multi-user.target; systemctl isolate graphical.target ”从文字模式与图形模式的执行等级去切换,另一个比较简单, 如果原本就是 graphical.target 的话,那么在 X 的画面中按下“ [alt] + [crtl] + [backspace] ”三个组合按键, 就能够重新启动 X 窗口啰!

下一节:虽然你的 X 窗口系统已经顺利的启动了,也调整到你想要的分辨率了,不过在某些场合下面,你想要使用显卡提供的 3D 加速功能时,却发现 X 提供的默认的驱动程序并不支持!此时真是欲哭无泪啊~那该如何是好?没关系,安装官方网站提供的驱动程序即可! 目前 (2015) 世界上针对 x86 提供显卡的厂商最大的应该是 Nvidia / AMD (ATI) / Intel 这三家 (没有照市占率排列), 所以下面鸟哥就针对这三家的显卡驱动程序安装,作个简单的介绍吧!

由于硬件驱动程序与核心有关,因此你想要安装这个驱动程序之前,请务必先参考第二十一章与第二十二章的介绍,才能够顺利的编译出显卡驱动程序喔! 建议可以直接使用 yum 去安装“ Development Tools ”这个软件群组以及 kernel-devel 这个软件即可。

Tips 因为你得要有实际的硬件才办法安装这些驱动程序,因此下面鸟哥使用的则是实体机器上面装有个别的显卡的设备,就不是使用虚拟机了喔!