Linux X Window设定介绍

来源:互联网 发布:史蒂芬周 mac 编辑:程序博客网 时间:2024/05/18 01:35

X Window System

Unix Like 操作系统不是只能作服务器的架设而已,还可以利用X Window System软件提供图形化界面, X Window是个非常大的架构

他还用到了网络功能, 也就是说,X窗口是能够跨网络与跨操作系统平台的. 也发展出了许多X通讯协议,现在Centos是利用Xorg提供的X11的,

在Unix Like上面的图形用户接口(GUI)被称为X或X11

X11 是一个软件而不是一个操作系统

X11 利用网络架构来进行图形接口的执行与绘制

目前大部分的X都是X11R6演化出来的

现在大部分的distribution使用的X都是由Xorg基金会提供的X11软件

X11使用的MIT授权,为类似GPL的自由软件授权方式

主要组件: X Server / X Client / Window Manager /Display Manager

X Server 在管理硬件, X Client 则是应用程序, X Client应用程序会将所要呈现的画面告知X Server,最终由X server来将结果透过他管理

的硬件绘制出来,X Client就是X应用程序,他主要提供的就是告知X Server要绘制啥东西,这样的话,我们想要取得远程服务器的绘图数据

来我们的计算机上显示,所以远程服务器提供的是X client软件

X Server 硬件管理,屏幕绘制 与提供字型功能:

X Server管理的设备其实都是和输入/输出有关的包括:键盘,鼠标,写字板,显示器,屏幕分辨率与颜色深度,显示适配器(包含启动程序)与显示的字型等等

都是X Server管理的

X Server仅能算是一套软件,他有自己的配置文件,必须要针对他的配置文件设定妥当才行,和Linux系统在开机的时候以/etc/sysconfig目录下

的keyboard/mouse等配置是无关的,也就是说Linux的设定和X Server的设定不一定相同的,因此,你想要在Linux的run level 3 想要玩图形接口时

就要加载 X Window 需要的驱动程序才行,总之,X Server的主要功能就是管理【主机】上面的显示硬件与驱动程序

每部客户端主机都要安装X Server ,而服务器端则是提供X Client 以提供客户端绘图所需要的数据

X Server 与 X Client的互动是双向的,X Server还有一个工作就是将输入设备(键盘 鼠标)的动作告知X Client, X Server虽然是管理

周边硬件和硬件的动作,但是它并不知道接口设备的这些动作会造成什么显示上的效果,因此X Server会将接口设备的动作行为告知X Client

X Client:负责 X Server 要求的『事件』之处理:

X Client最重要的工作就是处理来自X Server的工作,将该动作处理成为绘图数据,再将这些数据回给X Server,X Client的目的就是

产生绘图的数据,因此我们也称呼X Client为X Application(X 应用程序),X Client不需要知道X Server的硬件配备与操作系统,X Client单纯就是

在处理绘图的数据而已,客户端用的是什么操作系统在Linux主机端是不在乎的

X Window Manager:特殊的X Client ,负责管理所有的 X client 软件

X Client的主要工作是将来自X Server的数据处理成为绘制数据,再回传给X Server而已,所以X client本身是不知道他在X Server当中的位置,大小以及其他相关信息的

X client彼此不知道对方在屏幕的哪个位置,为了客服这个问题,因此就有Window Manager(窗口管理员)的产生了,窗口管理员也是X client

只是他主要在负责全部X client的控管,还包括提供某些特殊的功能 例如:

1.提供许多的控制元素,包括任务栏,背景桌面的设定等等

2.管理虚拟桌面(virtual desktop)

3.提供窗口控制参数,这包括窗口的大小,窗口的重迭显示,窗口的移动,窗口的最小化等等

KDE,GNOME等就是一些窗口管理员,每种窗口管理员所用以开发的显示引擎不太相同,所着重的方向也不一样,在Linux底下,每套Window Manager都是独特

存在的,不是换了桌面与显示效果而已,而是连显示的引擎都不会一样

GNOME (GNU Network Object Model Environment):http://www.gnome.org/

KDE (K Desktop Enviroment):http://kde.org/

twm (Tab Window Manager):http://xwinman.org/vtwm.php

XFCE (XForms Common Environment):http://www.xfce.org/

目前CentOS预设提供的有GNOME与KDE,这两个窗口管理员上面还有提供非常多的X client软件,包括办公室生产力软件(Open Office)以及常用的网络

功能(firefox浏览器,Thunderbird收发信件软件)等,现在使用者想要接触Linux其实真的越来越简单,如果不要架设服务器,那么

Linux桌面的使用与Windows系统可以说是一模一样的

由于本机端启动X Window system , 因此,在我们的CentOS主机上面必须要有Xorg的X Server核心,这样才能够提供屏幕的绘制

接着为了让窗口管理更方便,于是就加装了GNOME这个计划的window manager,最后就构建出我们的X Window System

所以 X server/X client/Window Manager 是同时存在于我们一部 Linux 主机上头的啦

Display Manager:提供登入需求

display manager最大的任务就是提供登入的环境,并且加载使用者选择的Window Manager与语系等数据,几乎所有的大型窗口管理员项目计划都会

提供display manager 在CentOS上面我们主要利用的是GNOME的GNOME DisPlay Manager(gdm)这个程序提供tty7的窗口接口登入,至于登入

后取得的窗口管理员,则可以在gdm上面进行选择,那个环境就是gdm提供的,并非gdm只能提供GNOME的登入而已

X Window的启动流程

启动 X Window System时,必须要先启动管理硬件与绘图的X Server ,然后才能加载X Client,基本上目前使用Window Manager来管理窗口接口风格的,那么如何

取得这样的窗口系统呢,可以透过登入本机的文字接口后,输入startx来启动X 窗口,能能够透过display manager提供的登录画面,输入帐号密码来登入

与取得X 窗口的,问题是X Server配置文件如何修改分辨率与显示器,能不能自己设定默认启动的窗口管理员,如何设定预设的使用者环境(与X Client有关)

这些数据都是透过X 的启动流程得知的

在文字接口启动 X :透过 startx 指令

Linux是个多人多任务的操作系统,所以X 窗口也是可以根据不同的使用者而有不同的设定,每个用户启动X 时,X Server的分辨率,启动X client的相关软件

及Window Manager的选择可能都是不一样,但是你是首次登入X时,也就是说,你自己还没有建立自己装属X画面时,系统又从

哪里给你这个X 预设画面,你已经设定好相关的信息,这些信息又是存放于何处呢?

事实上,你在纯文本接口且并没有启动X窗口的情况下输入startx时,这个startx就是帮你设定好上头提到的这些动作,startx就是一个shell script

他是一个比较亲和的程序,会主动的帮使用者建立他们的X所需要引用的配置文件而已,startx最重要的任务就是找出用户或者系统默认的X server与X client的配置文件

而使用者也能够使用startx外接参数来取代配置文件的内容,startx可以直接启动,也能够外接参数

startx [X client 参数] -- [X server 参数]

# 范例:以颜色深度为 16 bit 启动 X

[root@www ~]# startx -- -depth 16

startx 后面接的参数以两个减号『--』隔开,前面是X Client的设定,后面的是X Server的设定,而颜色深度是与X Server有关的,所以参数要写在

-- 后面,startx是如何找到X server/ X client的设定值,事实上启动X 的是xinit这支程序,startx仅是帮忙你找出设定值而已,那么startx找到的设定值可用顺序

是这样的

X server 的参数方面:

1 使用 startx后面接的参数

2 找寻用户家目录的档案 ~/.xserverrc

3. 若无上述两者,则以/etc/X11/xinit/xserverrc

4 若无上述三者,则单纯执行/usr/bin/X(亦即X server执行当)

X client 癿参数方面:

1 使用startx后面接的参数

2 找寻用户家目录的档案 亦即 ~/.xinitrc

3 若无上述两者 则以/etc/X11/xinit/xinitrc

4若无上述三者,则单纯执行xterm(此为X底下的终端机软件)

根据上述的流程找到启动 X 时所需要的 X server / X client 的参数,接下来startx回去呼叫xinit这支程序来启动我们所需要的X 窗口系统整体,

由 startx 呼叫执行癿 xinit

当 startx 找到需要的设定值后,就呼叫 xinit 启动 X 的,语法是xinit [client option] -- [server or display option]

那个client option与server option就是刚刚startx找出来的两个咚咚,在透过startx找到适合的xinitrc与xserverrc后,就交给xinit来执行,在预设的情况下

使用者尚未有~/.xinitrc等档案,你输入startx,就等于进行xinit /etc/X11/xinit/xinitrc -- /etc/X11/xinit/xsererrc这个指令一样,但是由于xserverrc也不存在

因此实际上的指令是: xinit /etc/X11/xinit/xinitrc -- /usr/bin/X

为何要是用startx来呼叫xinit,而不直接使用xinit,这是因为我们必须要取得一些参数,startx可以帮我们快速的找到这些参数而不必手动输入的

因为单纯的执行xinit的时候,系统的默认X client和X Server的内容是这样的

xinit xterm -geometry +1+1 -n login -display :0 -- X :0

在X client方面: 那个xterm是X窗口底下的虚拟终端机,后面接的参数则是这个终端机的位置与登录与否,最后面会接一个【-display :0】

表示这个虚拟终端机是启动在【第:0的X显示接口】,

在X Server方面:我们启动的X server程序就是X啦,其实X就是Xorg的链接档,亦即是X server的主程序,我们启动X直接执行X,同时指定

X启动在第:0个X显示接口,如果单纯以上面的内容来启动你的X系统时,你会发现tty7有画面了,只是很丑,因为没有启动window manager

xinit主要在启动X server与加载X client,但是这个xinit所需要的参数则是由startx去帮忙找寻的,因此,最重要的当然是startx找到的那些参数,重点当然

就是/etc/X11/xinit/目录下的xinitrc和xserverrc这两个档案的内容,虽然xserverrc预设是不存在的

启动 X server 的档案: xserverrc

X 窗口最先需要启动的就是 X server ,那个X server启动的脚本与参数是透过/etc/X11/xinit里面的xserverrc,不过预设xserverrc是不存在的

那用户家目录也没有~/.xserverrc,这个时候系统会去执行/usr/bin/X这个指令,这个指令也是系统最原始的X server执行档

在启动X server时 ,xorg会去读取/etc/X11/xorg.conf这个配置文件,针对这个配置文件的内容,那么X就会顺利在tty7的环境中启动X,单纯的X

启动时,你会看到画面一片漆黑,中心有个鼠标的光标而已

其实X启动的时候可以指定启动的接口,那就是:0这个参数,事实上LInux可以同时启动多个X,第一个:0亦即是tty7,第二个X则是

:1亦即是tty8,xterm在加载时,也必须要使用-display来说明,这个X应用程序是需要在哪个X加载的才行,X server未注明加载的接口

默认是使用:0,但是X client未注明时,则无法执行

启动了 X server 后,接下来就是加载 X client 到这个 X server 上面啦!

假设家目录下没有~/.xinitrc,此时X Client会以/etc/X11/xinit/xinitrc来作为启动X Client的预设脚本,xinitrc这个档案会将很多其他的档案参数引进来

包括/etc/X11/xinit/xinitrc-common 不 /etc/X11/xinit/Xclients 还有 /etc/sysconfig/desktop

不过分析到最后,其实最终就是载入KDE或者是GNOME而已,你也可以发现最终在XClient档案当中会有两个指令的搜寻,包括

startkde 与 gnome-session 这两个,这也是Centos预设会提供的两个主要的Window Manager,你也可以透过修改 /etc/sysconfig/desktop 内的

DESKTOP=GNOME 或 DESKTOP=KDE来决定默认使用那个窗口管理员,如果没有安装这两个家伙,那么X就会使用阳春的twm这个窗口管理员来管理你的环境

另外,如果有特殊要求,你当然可以自定义X client的参数,这就得要修改你家目录下的~/.xinitrc这个档案,不过要注意的是,如果你的

.xinitrc配置文件里面尤其动的xclient很多的时候,千万注意将除了最后一个window manager或X Client之外,都放到背景里去执行

例如:

xclock -geometry 100x100-5+5 &

xterm -geometry 80x50-50+150 &

exec /usr/bin/twm

意思就是说,我启动了X,并且同时启动xclock / xterm /twm这三个X clients,如此以来你的X就有这三个咚咚可以使用了

如果忘记加上&符号,那就会让系统等待,而无法一次就登录X

X启动的端口

直接使用startx来找到X server与X client的参数和配置文件,然后再呼叫xinit来启动X窗口系统,xinit先载入

X server到预设的:0这个显示接口(默认是tty7),然后再加载X client到这个X显示接口上,而X client通常就是

GNOME或KDE,这两个设定也能够在/etc/sysconfig/desktop里面做好设定,最后我们想要了解的是,既然X

是可以跨网络的,那X启动的端口是几号?

其实,Centos由于考虑X窗口是在本机上面运作,因此将端口改为插槽档了(socket),因此你无法观察到X启动

端口的,事实上,X server应该是要启动一个port 6000 来与X client进行沟通的

由于系统上面也可能有多个 X 存在,因此我们就会有 port 6001, port 6002... 等等

X 窗口系统    显示接口号码      默认终端机   网络监听端口

第一个 X          hostname:0              tty7             port 6000

第二个 X           hostname:1             tty8             port 6001

在 X Window System 的环境下,我们称 port 6000 为第 0 个显示接口,亦即为 hostname:0,那个主机名可以不写

所以也就是:0即可,在预设的情况下,第一个启动的X 是在tty7 按下[ctrl]+[Alt]+[F7] 那个画面,而启动的第二个

X 则预设在 tty8 亦即 [ctrl]+[Alt]+[F8] 那个画面呢

因此主机上可能有多个同时存在,因此,当我们在启动X Server/ Client,应该都要注明该X server / client主要是提供或接受来自哪个

display的port number 才行

1.X 启动流程测试

由于不知道你到底有没有启动过X ,因此底下将这个练习指定于第二个 X,亦即:1这个显示位置来显示,也就是tty8的地方

先来启动第一个 X 在 :1 画面中: 执行X :1 & 此时系统会主动的跳到第二个图形接口终端机,亦即是tty8,该画面就是X Server启动的画面

那么没有什么client可用,按下 [ctrl]+[alt]+[F1] 回到刚刚下达指令的终端机:

2..输入数个可以在 X 当中执行的虚拟终端机

xterm -display :1 &

xterm -display :1 &

执行第一次按下 [ctrl]+[alt]+[F8] 去到X画面中,发现多了一个终端机,可惜没有终端机标题,也无法移动终端机,无法改变终端机

的大小,回到tty1再次执行那个命令,再去tty8查看,还是一个终端机,因为两个终端机重迭了,无法移动,故而只能看到一个终端机

在输入不同的 X client 观察观察,分别去到 tty8 观察喔

xclock -display :1 &

xeyes -display :1 &

其中 xclock 会显示时钟,而 xeyes 则是会出现一双大眼睛来盯着光标,目前的四个 X client 通通不能够移动与放大缩小

如此一来 无法在xterm底下下达指令,所以我们加载最阳春的窗口管理员

执行 twm -display :1 & 接着回到tty8看到的画面就是最阳春的窗口管理员 twm

我是否需要启用 X Window System,当用来作为initernet开放的服务器建议不要启动X window

X Server 配置文件解析与设定

X server负责的是整个画面的描绘,没有启动X server,即使启动X client也无法将图样显示出来的

基本上X server管理的是显示适配器,屏幕分辨率,鼠标按键,此外还有显示的字体也是X server管理的一环

X server的配置文件在/etc/X11目录下,而相关的显示模块或上面提到的总模块,则主要放置在/usr/lib/xorg/modules 底下

提供的屏幕字体 : /usr/share/X11/fonts/

显示适配器的芯片组: /usr/lib/xorg/modules/drivers/

在Centos底下,我们可以透过chkfontpath这个指令来取得目前系统有的字型档案目录,这些都要透过一个统一的配置文件来规范,

那就是X server的配置文件,也就是/etc/X11/xorg.conf

解析xorg.conf 设定

X -version 查看X server版本,修改这个档案之前,要将这个档案备份出来,免得改错了,导致连X server都无法

启动的问题,这个档案的内容分成数个段落的,每个段落以Section开始,以EndSection结束

至亍常见的 section name 主要有:

1. Module: 被加载到 X Server 当中的模块 (某些功能的驱动程序);

2. InputDevice: 包括输入的 1. 键盘癿格式 2. 鼠标癿格式,以及其他相关输入设备;

3. Files: 设定字型所在的目彔位置等;

4. Monitor: 监视器的格式, 主要是设定水平、垂直的更新频率,与硬件有关;

5. Device: 这个重要,就是显示适配器芯片组的相关设定了;

6. Screen: 这个是在屏幕上显示的相关分辨率与颜色深度的设定项目,与显示的行为有关;

7. ServerLayout: 上述癿每个项目都可以重复设定,这里则是此一 X server 要取用的哪个项目值的设定

cp -a xorg.conf xorg.conf.20090713 <== 有备份有保佑

vim xorg.conf

Section "Module"  这些模块是 X Server 启动时,希望能够额外获得的相关支持的模块,关亍更多模块可以搜寻一下 /usr/lib/xorg/modules/extensions/ 这个目彔

Section "InputDevice"  这个玩意儿是键盘的对应设定数据

Section "InputDevice"  这个则主要在设定鼠标功能

Section "Files" 我们的 X Server 很重要的一点就是必须要提供字型,这个 Files

Section "Monitor"  屏幕监规器的设定仅有一个地方要注意,那就是垂直不水平的更新频率

Section "Device" <==显示适配器的驱劢程序项目

Section "Screen" Monitor 与实际的显示器有关,而 Screen 则是与显示的画面分辨率、颜色深度有关

Section "ServerLayout"  实际选用的设定值

X Font Server (XFS) 不加入额外中文字形

设定完毕之后,你就可以启动X server试试看了,基本上你的Files那个项目用的是直接写入字型的路径,那就不需要启动

XFS(X Font Server),如果使用font serer,就要先启动XFS   /etc/init.d/xfs start

 startx <==直接在 runlevel 3 启动 X 看看

 X :1 <==在 tty8 单独启动 X server 看看

X Font Server (XFS) 与加入额外中文字形

与 X 有关的配置文件主要是 /etc/X11/xorg.conf 这个主配置文件,解析这个档案时,在Files的部分我们提到了X Font Server

(XFS)这个服务,这个服务的目的在提供X server字型库,X server所使用的字型其实是XFS这个服务提供的,因此没有启动

XFS这个服务时,你的X server是无法顺利启动的

这个XFS的主配置文件在/etc/X11/fs/config,而字型文件则在/usr/share/X11/fonts/, 这里再次强调一下,至于启动

的脚本则在etc/init.d/xfs ,主配置文件的内容的设定:

vi /etc/X11/fs/config

client-limit = 10 <==最多允许几个 X server 向我要求字型(因为跨网络)

clone-self = on <==与效能有关,若 xfs 达到限制值,启动新的 xfs

catalogue = /usr/share/X11/fonts/misc:unscaled......就是字型档案的所在,有新字型,可以放置到这个目录下

除了自行下载字型文件之外,也可以使用CentOs提供的软件来处理

# 1. 先安装中文字形软件,亦即 fonts-chinese 这个软件名  yum install fonts-chinese

# 2. 查阅 taipei 字型的所在目彔位置:   rpm -ql fonts-chinese | grep taipei

# 3. 建立字型文件的目彔架构  cd /usr/share/fonts/chinese/misc        mkfontdir

这个指令在建置 fonts.dir 这个档案,提供字型档案目彔的说明

# 4. 将上述的目彔加入 xfs 的支持之中:

chkfontpath -a /usr/share/fonts/chinese/misc/

再执行chkfontpath,就会看到新增的数据了

# 5. 在 X window 底下启动终端机,测试一下有没有捉到该字型?

xlsofnts | grep taipei  如果顺利的话,你会看到有几个 taipeiXX 的字样在屏幕上出现

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

三个档案分别是 kaiu.ttf mingliu.ttc times.ttf, 代表的是中楷体、明体、times and Romans 三种字体,接下来就来增加字型

设上述的三个字体文件是放置在 /root 中

# 1. 将上述癿三个档案放置到系统设定目彔,亦即底下的目彔中:

cd /usr/share/fonts/

mkdir windows

cp /root/*.tt[fc] /usr/share/fonts/windows

# 2. 使用 fc-cache 将上述的档案加入字型的支持中:

fc-cache -f -v

# 3. 透过 fc-list 列出已经被使用的档案看看:

fc-list : file <==找出被忚取住癿檔名

透过 fc-cache 以及 fc-list 去确认过字型确实存在后,就能够使用窗口管理员的功能去检查字型文件了

以 GNOME 为例,在『系统』-->『偏好设定』-->『字型』点选后,就会出现可以调整癿字型

接下来你就会发现多出了『标楷体、绅明体、新绅明体』等字体可以选择

配置文件重建与显示器参数微调

如果改错了xorg.conf这个档案,由于Xorg有提供不错的工具可以处理,同时CentOS也有提供相关的设定指令,使用Xorg重新制作出配置文件

Xorg -configure :1 此时X 会主动的以内建的模块进行系统硬件的探索,并将硬件与字型的侦测结果写入

/root/xorg.conf.new这个档案里面,这就是xorg.conf的重制结果,不过这个新建的档案不见的真的能够启动X server

所以我们必须要执行  X -config /root/xorg.conf.new :1 来看看这个新的配置文件是否能够顺利的运作

关亍屏幕分辨率与更新率

gtf 水平像素 垂直像素 更新频率 [-xv]

水平像素:就是分辨率的X 轴

垂直像素:就是分辨率的Y轴

更新频率:与显示器有关,一般可以选择 60, 75, 80, 85 等频率

-x :使用 Xorg 配置文件的模式输出,这是默认值

-v :显示侦测的过程

# 1. 使用 1024x768 的分辨率,75 Hz 的更新频率来取得显示器内容

执行 gtf 1024 768 75 -x   重点是 Modeline 那一行!那行给他抄下来

# 2. 将上述的数据输入 xorg.conf 内的 Monitor 项目中:

vim /etc/X11/xorg.conf

# 就是新增上述的那行特殊字体部分到 Monitor 的项目中即可

然后重新启动你的 X,重新启动 X的方法,一个是init; init5, 另一个在runlevel 5的话,按下『 [alt] + [crtl] + [backspace] 』三个组合按键,就能够重新启动 X 窗口!

显示适配器驱动程序安装范例

有时候虽然你已经调整了你想要的分辨率,你想要使用显示适配器提供的3D加速功能,但是X提供的预设的驱动程序不支持,此时就要安装官网提供的最新的

驱动程序,目前有三家的显示驱动程序比较好Nvidia / AMD (ATI) / Intel 这三家

安装硬件驱动程序与核心有关,所以使用yum去安装『 Development Tools 』这个软件群组以及 kernel-devel 这个软件

操作步骤 (安装Nvidia)

先下载驱动程序,接着开始安装驱动程序sh NVIDIA-Linux-x86_64-185.18.14-pkg2.run,安装完成之后

去查阅/etc/X11/xorg.conf 的内容,会发现Device的Driver设定会成为nvidia而不是原本的nv,这个时候你的/usr/lib64/xorg/modules/drivers 目录内

会多出一个 nvidia_drv.so 的驱动程序档案,同时还提供了一支程序来帮助我们进行驱动程序升级nvidia-installer --update,查阅/var/log/nvidia开头的登录当查看内容

AMD (ATI) / Intel.