Centos最小安裝,客戶端如果實現支持GUI!

背景

通常我們不希望在服務器上安裝圖形界面,但有時候有些程序需要圖形界面,比如安裝oracle的時候。此時,可以配置讓Linux使用遠程的X Server進行圖形界面顯示。

首先要明確的是Linux X Window System的基本原理,X是一個開放的協議規範,當前版本爲11,俗稱X11。X Window System由客戶端和服務端組成,服務端X Server負責圖形顯示,而客戶端庫X Client根據系統設置的DISPLAY環境變量,將圖形顯示請求發送給相應的X Server。

 

因此,我們只需要在遠端開啓一個X Server,並在目標機器上相應的設置DISPLAY變量,即可完成圖形的遠程顯示。

 

“真理體驗”版

環境:遠程無圖形機器A(IP 192.168.9.135,OS CentOS 6.2),本地有圖形機器B(IP 192.168.1.135,OS CentOS 6.2),子網192.168.0.0

X Server是Gnome等桌面環境的基礎,一個桌面環境通常包含了XDM(X Display Manager,通常的圖形化用戶登錄界面就屬於XDM)、窗口管理器(X Server顯示的圖形是沒有“窗口”邊框的,通過替換窗口管理器可以實現不同的視覺效果,比如實現3D效果的Compiz)等組件。

 

進行圖形顯示並不需要桌面環境,只要有X Server即可。

 

現在要在B機器上開啓一個X Server,然後配置A機器的DISPLAY環境變量指向B上面的X Server,在A上啓動一個圖形程序,圖形應該在B上面進行顯示。

 

Linux提供了一個startx腳本來啓動X Server,startx腳本通過調用xinit來完成此工作。xinit完成兩個工作,首先在後臺啓動一個X Server,然後根據配置啓動一系列客戶端程序連接到X Server,這些客戶端程序只有最後一個可以並且必須在前臺運行,當這個前臺的客戶端程序退出時X Server將被關閉。

 

B機器上有桌面環境,查看進程可以看到如下進程在運行:

/usr/bin/Xorg :0 -nr -verbose -audit 4 -auth /var/run/gdm/auth-for-gdm-Ikd3i7/database -nolisten tcp vt1

這表示在display 0上運行着一個X Server,這裏的X Server是Xorg。出於安全考慮,這個X Server不監聽TCP連接(-nolisten tcp),所以無法通過網絡連接上這個X Server。X Server可以通過TCP和域套接字進行連接,後面講述DISPLAY變量時會詳細描述。

 

我們可以通過startx或直接使用xinit來手動啓動一個X Server,startx的選項與xinit相同,選項直接傳遞給xinit。xinit選項分爲兩個部分,以符號 “--”爲界,前面是客戶端選項,後面是X Server選項。

startx [ [ client ] options ... ] [ -- [ server ] [ display ] options ... ]

要注意的是“client”(即要運行的客戶端程序)必須以絕對路徑的形式出現。如果不指定“client”,startx或xinit會根據用戶和系統全局的配置文件啓動一個客戶端程序(一般xinit默認啓動xterm程序)。

 

現在我們啓動一個X Server:

xinit /usr/bin/xterm -- :1 &

這個命令可以在桌面環境下的終端裏面運行,也可以在字符終端下運行。機器B上的桌面環境顯示在終端Ctrl-Alt-F1上,F2-F6都是字符終端,F7-F12留給圖形終端。在B機器的F2字符終端上執行以上命令,將在F7終端出現xterm。

 

接下來要配置A機器的DISPLAY變量,以便將圖形顯示到B機器上。以另一終端登錄A機器,設置DISPLAY變量:

export DISPLAY=192.168.1.135:1.0

DISPLAY變量的格式爲[Address]:{NumA}.{NumB}。其中Address爲X Server地址,如果Address爲空,則通過域套接字連接到本地的X Server。NumA爲display number,這與傳遞給xinit的display選項對應,這個display number爲X Server的監聽端口號送去6000。因此,實際上此時B機器上的X Server在監聽6001端口,可以使用netstat命令驗證。NumB爲screen number(可能是多顯示器的情況下指定顯示在哪個顯示器,未驗證),通常情況下都爲0.

 

現在關閉B機器的防火牆(或者打開相應端口),以便A機器的X客戶端程序可以連接上B機器上的X Server。然後在A機器上剛纔設置DISPLAY變量的那個會話中,啓動一個帶有圖形界面的程序,圖形將會顯示在B機器的F7終端上。

 

如果提示無法連接到DISPLAY指定的X Server,可能是由於X Server打開了訪問控制。在A機器上已設置DISPLAY變量的會話中使用xhost命令查看授權信息:

xhost

如果顯示無法打開display,則可以確定是因爲X Server開啓了訪問控制。

 

在B機器F7終端由xinit打開的xterm中使用xhost授權A機器訪問:

xhost + 192.168.9.135

 

然後在B機器F7終端xterm上使用xhost命令查看ACL,可以看到192.168.9.135已獲得授權。此時,在A機器已設置DISPLAY的會話中運行xhost,同樣可以看到ACL,再運行圖形程序,圖形應顯示在B機器F7終端上。

 

SSH隧道轉發版

SSH提供了X11轉發的功能,可以使用SSH簡單地實現上一節描述的功能。

首先確認A機器上的SSH Server打開的X11轉發功能。檢查SSH Server配置文件/etc/ssh/sshd_config,確認有如下配置:

X11Forwarding yes

然後在從B機器上SSH到A機器:

ssh -X 192.168.9.135

-X選項打開SSH的X11轉發功能。

 

在此會話中查看A機器上的DISPLAY變量,應與下面類似:

localhost:10.0

在此會話中查看A機器上的TCP監聽端口,應有6010端口。

 

在此會話中啓動A機器上的圖形程序,圖形應顯示在B機器上。

 

實際上,SSH在A機器上打開了一個監聽端口6010,並且在登錄會話開始時爲會話設置了DISPLAY變量爲localhost:10.0。隨後此會話中的圖形程序運行時,X11 client庫會將X請求發送到SSH監聽6010端口中,然後A機器上的SSH將X請求轉發到B機器,B機器的SSH客戶端收到X請求後交給B機器上的X Server顯示。

 

SSH隧道轉發Windows版

 

原理與上一節類似,X請求由SSH轉發,只不過圖形在Windows上顯示。

 

首先在Windows上安裝並運行一個X Server,這裏選用Xming。然後使用ssh客戶端連接上機器A,這裏選用SecureCRT作爲ssh客戶端(使用putty同樣可以)。

 

SecureCRT的會話選項作如下 設置:

spacer.gif

 實際上這裏對SecureCRT的設置與上一節中ssh -X選項相同。

 

如果已經登錄機器A,註銷再重新登錄。查看DISPLAY變量:

spacer.gif

 

啓動一個圖形程序,界面將在Windows上顯示:

spacer.gif

 

 

小結

通過上述的幾個小實驗,應該對X11的基本原理有了比較清晰的理解,以後遇到某些軟件必須使用圖形界面的時候,可以在Windows上使用Xming來進行遠程圖形顯示,不必爲此在服務器上安裝臃腫的圖形環境了。


轉載至:http://www.cnblogs.com/qcly/p/3219902.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章