1. 程式人生 > >鳥哥的Linux私房菜(伺服器)- 第十一章、遠端聯機伺服器SSH / XDMCP / VNC / RDP

鳥哥的Linux私房菜(伺服器)- 第十一章、遠端聯機伺服器SSH / XDMCP / VNC / RDP

由於我們 Linux 使用的圖形介面是所謂的 X-Window System 的東西,這玩意兒是能夠跨平臺的,目前在 Linux 上頭開發的圖形介面軟體,幾乎都是使用這個 X 的架構來處理,所以囉,你就不能夠不知道 X Window 啦! 我們在基礎篇第三版的二十四章已經講過 X Window 啦, 因此這裡只會作個簡單的介紹,以方便大家來了解為何我們的軟體是這麼安裝與設定喔!

X Window System 在運作的過程中,又因控制的資料不同而分為 X Server 與 X Client 兩種程式,雖然說是 X Server/Client , 但是他的作用卻與網路主機的 Server/Client 架構大異其趣喔~先來說說 X Server/Client 這兩種程式所負責的任務先:

  • X Server: 這組程式主要負責的是螢幕畫面的繪製與顯示。 X Server 可以接收來自 X client 的資料,將這些資料繪製呈現為圖面在螢幕上。 此外,我們移動滑鼠、點選資料、由鍵盤輸入資料等等,也會透過 X Server 來傳達到 X Client 端,而由 X Client 來加以運算出應繪製的資料;

  • X Client: 這組程式主要負責的是資料的運算。 X Client 在接受到 X Server 傳來的資料後 (例如移動滑鼠、點選 icon 等動作),會經由本身的運算而得到滑鼠應該要如何移動、 點選的結果應該要出現什麼樣的資料、鍵盤輸入的結果應該要如何呈現等等,然後將這些結果告知 X Server ,讓他自行去繪製到螢幕上。
Tips:
鳥哥常常開玩笑的說, X server 就是畫布,而 X client 就是手拿畫筆的畫家。你得要先有畫布 (管理好所有可顯示的硬體後) 之後畫家的想法 (計算出來的繪圖資料) 才能夠繪製到畫布上!
鳥哥的圖示

由於每一支 X client 都是獨立存在的程式,因此在圖形顯示會發生一些迭圖的問題 (想象一下每一個 X client 都是一個很自我的畫家, 每個畫家都不承認對方的存在,都自顧自的在畫布上面作畫,最後的結果會是如何?)。因此,後來就有一組特殊的 X client 在進行管理所有的其他 X client 程式,這個總管的咚咚就是 Window Manager!

  • Window Manager (WM):是一組控制所有 X client 的管理程式,並同時提供例如工作列、 背景桌面、虛擬桌面、視窗大小、視窗移動與重迭顯示等任務。Window manager 主要由一些大型的計劃案所開發而來,常見的有 GNOME, KDE, XFCE 等

既然 X Window System 是 Linux 上面的一組程式,那麼它如何啟動的呢?早期的使用者在登入系統後,必須要自己先啟動 X server 程式,然後再啟動個別的 Window manager ,若有其他需求,再啟動其他額外的 X client 就是了。這麼麻煩!所以為了簡化啟動個人圖形介面的步驟,後來還有所謂的 Display Manager (DM) 這玩意喔!

  • Display Manager (DM):提供使用者登入的畫面以讓使用者可以藉由圖形介面登入。 在使用者登入後,可透過 display manager 的功能去呼叫其他的 Window manager ,讓使用者在圖形介面的登入過程變得更簡單。 由於 DM 也是啟動一個等待輸入賬號密碼的圖形資料,因此 DM 會主動去喚醒一個 X Server 然後在上頭載入等待輸入的畫面就是了。

在目前新釋出的 Linux distributions 中,通常啟動圖形介面讓使用者登入的方式中,都是先執行 Display Manager 程式, 該程式會主動載入一個 X Server 程式,然後再提供一個等待輸入賬號密碼的介面程式,之後再根據使用者的選擇去啟動所需要的 Window Manager 程式,最後就由使用者直接操作 WM 來玩圖形介面囉。

例題: 在 CentOS 6.x 當中,若預設為 init 5 的情況下,那麼最終啟動圖形介面的是哪一隻程式? 答: 分析 /etc/init/* 當中的檔案,會發現有個檔案的內容是這樣:
[[email protected] ~]# cat /etc/init/prefdm.conf
start on stopped rc RUNLEVEL=5
stop on starting rc RUNLEVEL=[!5]
console output
respawn
respawn limit 10 120
exec /etc/X11/prefdm -nodaemon
你可以分析 /etc/X11/prefdm 的內容,就能夠發現其實該行啟動的就是一個 X display manager 程式了喔!

例題: 登入 init 5 的 CentOS 6.x 之前,先到 tty1 去查閱一下 X server 是由哪一支程式所喚醒的? 答: 我們可以透過 pstree 來觀察程式間的相關性喔!同時注意,預設的 CentOS 6.x 的 X server 程式名稱為 Xorg 的哩。
[[email protected] ~]# pstree -p
init(1)-+-NetworkManager(1086)
....(中間省略)....
        |-gdm-binary(2642)---gdm-simple-slav(2661)-+-Xorg(2663)
        |                                          |-gdm-session-wor(2746)
....(後面省略)....
由上述的資料來看,gdm-binary 可以喚醒 Xorg 喔!同理,我們也會知道提供認證的圖形畫面應該是由 gdm-session 所提供的喔!

  • X Window System 用在網路上的方式: XDMCP

當 X server, X client 都在同一部主機上面的時候,你可以很輕鬆的啟動一個完整的 X Window System。 但是如果你想要透過這個機制在網路上面啟動 X 呢?此時你得先在客戶端啟動一個 X server 將圖形介面繪圖所需要的硬體裝置配置好, 並且啟動一個 X server 常見的接收埠口 (通常是 port 6000),然後再由伺服器端的 X client 取得繪圖資料,再將資料繪製成圖囉。 透過這個機制,你可以在任何一部啟動 X server 登入伺服器喔!而且不管你的作業系統是啥呢!意義就像下圖, 如此一來,你就可以取得伺服器所提供的圖形介面環境啦!

X server/client 的架構
圖 11.3-1、X server/client 的架構

但是如果你是使用最笨的方法在客戶端自己啟動 X server ,然後在告訴伺服器將 X client 程式一個一個的載入回來, 那就太累人了吧!我們之前上面不是提到過可以用 display manager 來管理使用者的登入與啟動 X 嗎?那伺服器能不能提供一個類似的服務, 那我們直接透過伺服器的 display manager 就能夠提供我們登入的認證與載入自己選擇的 window manager 的話,這樣就太棒了! 能夠達到嗎?當然可以啊!那就是透過 Xdmcp (X display manager control protocol) (注3) 啦!

Xdmcp 啟動後會在伺服器的 udp 177 開始監聽,然後當客戶端的 X server 聯機到伺服器的 port 177 之後, 我們的 Xdmcp 就會在客戶端的 X server 放上使用者輸入賬密的圖形介面程式囉!那你就能透過這個 Xdmcp 去載入伺服器所提供的類似 Window Manager 的相關 X client 囉!那你就能夠取得圖形介面的遠端聯機伺服器哩!贊吧!

那麼什麼時候會出現多使用者連入伺服器取得 X 的情況呢?以鳥哥的例子來說,鳥哥實驗室有一組 Linux 在進行數值模擬, 他輸出的結果是 NetCDF 檔案,我們必須使用 PAVE 這一套軟體去處理這些資料。但是我們有兩三個人同時都會使用到那個功能, 偏偏 Linux 主機是放在機架櫃裡面的,要我們擠在那個小小的空間前面『站著』操作計算機,可真是討人厭啊~ 這個時候,我們就會架設圖形介面的遠端登入伺服器,讓我們可以『多人同時以圖形介面登入 Linux 主機』來操作我們自己的程式!很棒,不是嗎!