linux自己没有图形界面,linux如今的图形界面的实现只是linux下的应用程序实现的:
图形界面并非linux的一部分,linux只是一个基于命令行的操做系统,linux和Xfree的关系就至关于当年的DOS和WINDOWS 3.0 同样,linux
windows 3.0不是独立的操做系统,它只是DOS的扩充,是DOS下的应用程序级别的系统,不是独立的操做系统,一样XFree只是 linux下的一个应用程序而已。程序员
不是系统的一部分,可是X的存在能够方便用户使用电脑。WINDOWS 95及之后的版本就不同了,他们的图形界面是操做系统的一部分,windows
图形界面在系统内核中就实现了,没有了图形界面windows就不成为windows 了,但linux却不同,没有图形界面linux仍是linux,bash
不少装linux的WEB服务器就根本不装X服务器。这也WINDOWS和linux 的重要区别之一。 服务器
X是协议,不是具体的某个软件:
X是协议,就像HTTP协议,IP协议同样。这个概念 不少初学者甚至学习 LINUX有必定时间的人都混淆,一个基于X的应用程序须要运行并显示内容时他就联接到X服务器,网络
开始用X协议和服务器交谈。好比一个X应用程序要在屏幕 上输出一个圆,X应用程序只负责告诉X服务器在屏幕的什么地方用什么颜色画一个多大的圆,而具体的"画"的动做,session
好比这个圆如何生成,用什么显卡的驱动程 序去指挥显卡完成等等工做是由X服务器来完成的。X服务器还负责捕捉键盘和鼠标的动做,假设X服务器捕捉到鼠标的左键被按下了,app
他就告诉X应用程序:亲爱 的应用程序先生,我发现鼠标被按下了,您有什么指示吗?协议是须要具体的软件来实现的,这就是下面我要讲的: 函数
rpm -q X-server 查询是否安装
yum list installed 查询已经安装的软件包工具
linux图形界面又称x系统,其主要包含以下几个部分:
a)xserver
b)显示管理器(Display Manager) 例如(gdm kdm xdm等)
c)窗口管理器(Window Manager) 例如(metacity ,fluxbox等)
d)DM 和 WM之上的一些图形应用程序
在使用中通常都是b,c,d三者集合起来构成一个完整的集成工做环境,例如KDE ,GNOME等,这就是咱们平时所说的广义上的xclient
a)xserver 主要提供基本的显示接口共xclient使用,并将用户的操做等也反映给xclient,是xclient与硬件的一个中间层。xserver相关的两个主要部分是
(1) xorg.conf
xorg.conf是X Server的主要配置文件,它包含一个当前系统的硬件资源列表。X Server就是根据这些硬件资源“组织”出基本的图形能力。xorg.conf文件在/etc/X11/xorg.conf,主要包含几个字段:
Files: X系统使用的字体存放目录(字体的具体使用由FontConfig工具主持)
InputDevice: 输入设备,如键盘鼠标的信息
Monitor: 显示器的设置,如分辨率,刷新率等
Device: 显示卡信息
Screen: 由Monitor和Device组装成一个Screen,表示由它们向这个Screen提供输出能力
ServerLayout: 将一个Screen和InputDevice组装成一个ServerLayout,在具备多个显示设备的系统中,可能有多个Screen和多个ServerLayout,用以实现不一样的硬件搭配。
在最近的xorg版本中,X Server已经开始自动侦测硬件,如今的xorg.conf已经都成了默认名称。具体细节还待查,但基本原理仍是不变的。
(2) X session(X会话)
X session是指X server启动后直到X server关闭之间的这段时间。这期间一切跟X相关的动做都属于X session的内容。管理X session的程序称为Display Manager,常据说的gdm或kdm就是gnome/kde所分别对应的Display Manager。
开启一个X session,也就是开始了图形界面的使用。在开启的过程当中,Display Manager会对用户进行认证(也就是用户名密码的输入),运行事先设置好的程序(好比scim输入法就是这个时候启动的)等等。
这个开启过程要执行的一系列操做均可以在/etc/X11/Xsession以及/etc/X11/Xsession.d/目录下看到,其余还有一些配置文件如Xsession.options, Xresource等,都是执行的X session的初始化过程。仔细阅读这些脚本或配置文件,能够帮助你更好地理解X
b)Display Manager
上面说过,Display Manager(后简称DM)是管理X session的程序,常见的有gdm, kdm, xdm等。对于默认进入X界面的Linux系统,必须将DM程序在开机时执行,即:/etc/rc2.d/S13gdm。下面咱们从手工启动X的过程,看一下DM为咱们作了哪些工做。
若是没有设置DM在开机时运行的话,手动启动X使用startx命令。man startx
能够知道,startx的做用能够看做是Display Manager的一种隐性实现。它使用xinit命令,分别根据/etc/X11/xinit/xinitrc和/etc/X11/xinit/xserverrc中所指定的设置唤起X。
其中,xserverrc执行X server的运行任务;xinitrc则运行Xsession命令。从/etc/X11/Xsession脚本的内容能够看出,它也就是进入/etc /X11/Xsession.d/目录轮询地执行全部脚本。很明显,这些也就是前面所说的Xsession初始化工做。
综合起来讲,Display Manager完成三个任务:1, X Server的启动; 2, X session的初始化; 3, X session的管理。
c)Window Manager
X Server提供了基本的图形显示能力。然而具体怎么绘制应用程序的界面,倒是要由应用程序本身解决的。而Window Manager(桌面管理器,后简称WM)就是用来提供统一的GUI组件的(窗口、外框、菜单、按钮等)。不然,应用程序们各自为政,既增长了程序开发的负担,不统一的桌面风格对视觉也是不小的挑战。
WM的启动由DM控制,在gdm的登陆窗口,咱们能够进行选择。常见的WM有:Metacity(Gnome默认的WM), fluxbox, fvwm, E17等。
d)X Clients
最后,就是X Client了。X客户端程序,顾名思义,就是使用X服务的程序。firefox,gedit等等都属于X Client程序。X Client部分值得考虑一下的就是DISPLAY环境变量。它主要用于远程X Client的使用。该变量表示输出目的地的位置,由三个要素组成:
[host]:display[.screen]
host指网络上远程主机的名称,能够是主机名、IP地址等。默认的host是本地系统,你能够在本身系统上echo $DISPLAY看一下。
display和screen分别表明输出画面的编号和屏幕的编号。具体细节因为硬件的缺少,还有待进一步研究。
独立安装x window所须要的每个包
yum install xorg-x11-server-Xorg
yum install xorg-x11-server-utils
yum install xorg-x11-utils
yum install xorg-x11-xinit
yum install xorg-x11-apps
yum install xorg-x11-twm
yum install xterm
xorg-x11-drv-fbdev-0.4.3-2.el6.x86_64
xorg-x11-drv-intel-2.21.12-2.el6.x86_64
组合安装x window
yum groupinstall "X Window System"
yum groupinstall GNOME Desktop Environment
yum groupinstall KDE Desktop Environment
安装完毕后,执行startx,便可进行X window(KDE)。
启动X主要有两种方法:
一是Display Manager,如XDM、GDM、KDM,此种方法经过图形界面登陆;
一种是经过xinit,此种方法适用于字符界面登陆。咱们经常使用于登陆X的startx命令也是经过传递参数给xinit来启动X的,
也就是说,最终启动X的是xinit。startx只是一个bash脚本。
xinit启动过程
先看手册页 man xinit
xterm是一个x window system上的终端模拟器;
xinit是启动Xserver和Xclient的。xinit会运行一个xinitrc的文件,这个文件你能够本身编写,能够把xterm写进xinitrc的。
xinit 的用法为: xinit [[client] options ] [-- [server] [display] options] 。其中 client 用于指定一个基于 X 的应用程序, client 后面的 options 是传给这个应用程序的参数, server 是用于指定启动哪一个 X 服务器,通常为 /usr/bin/X 或 /usr/bin/Xorg , display 用于指定 display number ,通常 为 0 ,表示第一个 display , option 为传给 server 的参数。
若是不指定 client , xinit 会查找 HOME ( 环境变量 ) 目录下的 .xinitrc 文件,若是存在这个 文件, xinit 直接调用 execvp 函数执行该文件。若是这个文件不存在,那么 client 及其 options 为: xterm -geometry +1+1 -n login -display :0 。
若是不指定 server , xinit 会查找 HOME( 环境变量 ) 目录下的 .xserverrc 文件,若是存在这个文件, xinit 直接调用 execvp 函数执行该文件。若是这个文件 不存在,那么 server 及其 display 为: X :0 。若是系统目录中不存在 X 命令,那么咱们须要在系统目录下创建一个名为 X 的连接,使其指向真正的 X server 命令( Ubuntu 下为 Xorg )。
下面是几个关于 xinit 应用的例子:
1)xinit /usr/bin/xclock -- /usr/bin/X :0
该例子将启动 X server , 同时将会启动 xclock 。请注意指定 client 或 server 时,须要用绝对路径,不然 xinit 将因没法区别是传给 xterm 或 server 的参数仍是指定的 client 或 server 而直接当成是参数处理。
2)在 HOME 下新建 .xinitrc 文件,并加入如下几行:
xsetroot -solid gray &
xclock -g 50x50-0+0 -bw 0 &
xterm -g 80x24+0+0 &
xterm -g 80x24+0-0 &
twm
当 xinit 启动时,它会先启动 X server ,而后启动一个 clock ,两个 xterm ,最后启动窗口管理器 twm 。
请注意:
最后一个命令不能后台运行,不然全部命令都后台运行的话 xinit 就会返回退出,一样的,除最后一个命令外都必须后台运行,不然后面的命令将只有在该命令退出后才能运行。
看到这里,眼尖的人或许早以看出 xinit 的功能彻底能够由脚原本实现,例如要启动 X Server 和一个 xterm ,就像 xinit 默认启动的那样,只须要在新建一个脚本或在 rc.local 中加入:
X&
export DISPLAY=:0.0
xterm
这个实现彻底正确,然而却并无彻底实现 xinit 所具备的功能, xinit 全部的一项功能就是当最后一个启 动的 client (如上面第二个例子中的 twm 窗口管理器)退出后, X 服务器也会退出。而咱们的脚本实现中当咱们退出 xterm 后并不会退出 X server 。
由于 startx 就是经过调用 xinit 启动 X 的。 xinit 是一个二进制文件,并不是是一个脚本。它的主要功能是启动一个 X 服务器,同时启动一个基于 X 的 应用程序。 所以startx的用法跟xinit同样:startx [ [ client ] options ... ] [ -- [ server ] options ... ]startx的几种启动方式由对 startx 脚本的分析,咱们能够知道 startx 主要有三种启动方式:a) 一种是本身指定要启动的 client 和 server , 例如: startx /usr/bin/xclock -- /usr/bin/X :0 ;b)一种是经过在 $HOME 下新建 .xinitrc 文件来指定要启动的多个 client 和 .xserverrc 来指定要启动的 server;c)还有一种是直接输入 startx 而不指定参数,这也就是咱们启动 gnome 桌面的方法。在 c 这种启动方法中, startx 脚本会先去看系统目录( /etc/X11/xinit/ )下的 rc 文件是否存在,若是不存在就会用默认的 xterm 和 /usr/bin/X 来启动 xinit 。显然, startx 启动的不是 xterm ,而是 gnome 桌面,所以 gnome 的启动是经过系统文件 /etc/X11/xinit/xinitrc 来指定的。综上所述, startx 的默认启动过程为: startx 调用并将系统文件 /etc/X11/xinit/xinitrc 和 /etc/X11/xinit/xserverrc 做为参数传给 xinit , xinit 就会先执行系统文件 /etc/X11/xinit/xserverrc 以启动 X Server ,而后执行 /etc/X11/xinit/xinitrc ,而 xinitrc 则会执行脚本 /etc/X11/Xsession ,而 Xsession 则会按顺序调用执行 /etc/X11/Xsession.d 目录下的文件,从而最终调用了 gnome-session 这个用于 启动 GNOME 桌面环境的程序启动Xserveruser@host:~$X :0 &在Xserver上启动xtermuser@host:~$xterm -display :0 &在Xserver上的xterm中执行user@host:~$metacity &以初始化一个简单的窗口管理器在Xserver上的xterm中便可执行firefox等须要X环境的程序图形2d,3d加速简介为了是linux下图形更加流畅,必须使用加速。经常使用的加速方法以下加速常见有三种方式a)ShadowFBShadowFB是xserver自带的与体系结构无关的2D加速方式,它将系统framebuffer复制一份,而且在拷贝回framebuffer中实现图形旋转等操做,这样能够起到必定加速做用,可是效果很差。b) XAAXAA全称XFree86 Acceleration Architecture,是由 Harm Hanemaayer 在1996年写的一个显卡硬件2D加速的驱动结构,目前大多数的显卡去动均支持这种驱动模式c) EXAEXA是X.Org发起的用于取代XAA加速的驱动结构,修改的宗旨是是XRender更加好用。历史上对2D 和3D加速已经作了区分,2D加速主要使用的是XAA结构,3D加速主要是经过DRM(Direct Rendering Manage) 提供.而EXA提供了比XAA更好集成XRender的结构,同时也提升了XAA的2D加速效果。EXA采用的方法是经过实现对OpenGL的加速以实现同时对2D,3D图像的加速,这样2D图像就能够看做是3D图像的一个子集。一个基于Xlib的简单例子了解Client流程Xlib是对X协议的的一个简单的封装,可让程序员不用了解细节而编写图形相关程序。实际上程序员直接调用Xlib的不多,更多使用的是GTK+ ,QT等图形库。这些又是基于Xlib的图形库。