首頁 > 軟體

Linux入門學習教學:X Window究竟是什麼

2020-06-16 18:06:51

  大名鼎鼎的X Window大家肯定不陌生。都知道它是Unix/Linux下面的視窗系統,也都知道它基於Server/Clinet架構。在網上隨便搜一搜,也可以找到不少X Window的介紹。有不少文章為了給使用者留一個直觀的印象,往往先讓系統進入純文字介面,然後使用startx來啟動圖形介面,或者直接使用X來啟動X Server,再然後執行一個xterm來做示範。我覺得以上這些文章對X Window的理解有限,不夠深入,而且也不夠新。所以,我這裡寫一篇《X Window究竟是什麼》,以最新的Ubuntu-14.04 Desktop為例,展示如何學習X Window。

  先說一點題外話。在上一篇《打造屬於自己的Vim》發表後,評論中有人讓共用一下組態檔。當時我說:組態檔又不長,自己照著圖片敲一下程式碼嘛。結果這個“照著圖片敲程式碼”的事情我今天自己幹了一遍,好在沒花多少時間,幾分鐘而已。原因是因為我今天折騰X Window的時候,把系統給掛掉了,然後重灌系統,然後,就只好再設定一遍Vim了。

了解自己機器上的X Window

  X Window其實是一種規範,它有很多不同的實現,在Linux系統下最流行的是實現Xorg和XFree86,微軟Windows系統下也有X Window的實現,蘋果的Mac也是X Window的一種。要了解自己機器上執行的X Window究竟是哪一個,可以使用檢視進程的ps命令,如下圖:

  從上圖可以看出,Ubuntu 14.04使用的X Window是Xorg。如果使用ps -ef命令,還可以看到Xorg執行時的命令列引數。

  想了解X Window,下面這些文件需要看一遍先:

  下面來說一下也許是眾所周知的基礎知識:X Window是一個分層的架構,它分為Serve和Client。X Server負責圖形介面的顯示,(也負責使用者的輸入),而Client程式需要連線到X Server,然後請求X Server繪製圖形介面,同時從X Server接受使用者的輸入。在桌面系統上,X Server和Client程式往往安裝在同一台機器上,日常使用基本感覺不到它是分層的。但是很顯然,X Server和Client也可以分別執行在不同的機器上,在一台機器上執行程式,而在另外一台機器上顯示圖形介面。

  X Window中的Server和Client的概念和我們平時接觸到的“Server/Client”概念剛好相反。很多熟悉Internet原理的人,第一次接觸X Window的這兩個概念都會搞錯。比如,我在一台本地機器上執行Ubuntu 14.04桌面版,而在另外一台遠端機器上執行CentOS 5.10(純字元介面),當我用ssh從Ubuntu連線到CentOS的時候,Ubuntu是Client,而CentOS是Server。在X Window中,Server偏偏是我面前的這台Ubuntu,X Server執行在Ubuntu上。我可以在CentOS中執行GVim,但是視窗顯示在Ubuntu中,這時,GVim是一個Client程式,它在遠端機器上執行,而它的視窗顯示在本地。

理解display和虛擬控制台

  前面提到網上很多介紹X Window的文章都是先讓系統進入字元介面,然後手動啟動一個X Server。其實這完全沒有必要,因為在同一台機器上完全可以執行多個X Server,只需要讓每個X Server的display不同即可。那麼display究竟是什麼?

  在X Window中,可以通過hostname:display_number.screen_number來指定一個螢幕。可以這樣理解:一台計算機可以有多個display,一個display可以有多個螢幕。所以,display相當於是計算機配備的一套輸入輸出裝置,一般情況下,一台電腦只配一套鍵盤滑鼠和一個顯示器,特殊情況下,可以配多個顯示器。

  現在問題出來了,我的電腦只有一套鍵盤滑鼠和一個顯示器,也就是只有一個display,那又怎麼能執行多個X Server呢?那是因為在Linux中,還有虛擬控制台這樣的高階特性。只需要同時按下Ctrl+Alt+F1、Ctrl+Alt+F2、...、Ctrl+Alt+F7,就可以在不同的虛擬控制台中進行切換。在Ubuntu 14.04中,虛擬控制台1到6執行的getty,也就是字元介面,虛擬控制台7執行的是Xorg。(Fedora中不一樣,虛擬控制台1執行的是圖形介面,其它的是字元介面。)

  我們可以直接執行X Server程式來啟動X Server。/usr/bin/X和Xorg都是X Server程式。其實/usr/bin/X是Xorg的符號連結,用哪一個都是一樣的。

  啟動X Server的時候可以指定display引數,因為可以省略掉hostname和screen_number,所以可以用:0,:1這樣的格式來指定display。在我的機器上,本來就有一個X Server在執行,display :0已經被佔用了,所以我使用sudo X :1 -retro來在display :1上再執行一個X Server,如下圖:

  其中的-retro引數是為了讓X Server的背景顯示為斜紋,否則背景為純黑色,那就看不出來是否啟動了X Server。啟動X Server後的效果如下圖:

  按Ctrl+Alt+F7回到display :0,再用ps命令看一下,會發現系統中有兩個Xorg在執行,一個執行在虛擬控制台7,一個執行在虛擬控制台8。如下圖:

  在新啟動的X Server中執行一個GVim看看效果。執行GVim時,使用-display :1引數指定視窗顯示在新啟動的X Server上,使用-geometry引數指定視窗的大小和位置。然後按Ctrl+Alt+F8切換虛擬控制台,看效果。命令見上圖,程式執行效果見下圖:

更多詳情見請繼續閱讀下一頁的精彩內容http://www.linuxidc.com/Linux/2015-02/114175p2.htm


IT145.com E-mail:sddin#qq.com