Linux的XServer

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應用程序:親愛 的應用程序先生,我發現鼠標被按下了,您有什麼指示嗎?協議是須要具體的軟件來實現的,這就是下面我要講的: 函數

 

如何判斷linux是否安裝了x-server

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的圖形庫。

相關文章
相關標籤/搜索