對于習(xí)慣使用命令行的人來說,可以使用終端的方式進(jìn)行訪問,也就是通過telnet, ssh等方法遠(yuǎn)程登錄到linux主機(jī),對其進(jìn)行訪問。至于登錄軟件,既可以使用windows自帶的命令行界面,也可以使用專門的終端軟件,例如putty, secureCRT等。其中putty是免費(fèi)軟件,而secureCRT并不是。
對于習(xí)慣使用圖形界面的人來說,更希望以圖形界面的方式來訪問linux主機(jī)。主要有以下幾種方法:
今天我主要介紹第二種方法。
有很多軟件在windows上實(shí)現(xiàn)了X server的功能,例如Xmanager,Hummingbird Exceed,cygwin X server,以及Xming X Server for Windows。前兩個都是商業(yè)軟件,需要付費(fèi)使用;cygwin和Xming是免費(fèi)軟件。本文主要介紹如何使用cygwin X實(shí)現(xiàn)Linux的遠(yuǎn)程桌面。關(guān)于Xming X server的使用請參見其主頁。
先調(diào)動一下大家的積極性,看看最終的效果圖:
[ 背景知識 ]
網(wǎng)絡(luò)上有很多關(guān)于X的背景知識,如果你想對X了解的深入一些,去網(wǎng)上搜索一下吧。
這里是王垠寫的”理解 Xwindow“,介紹了X server, X client, 窗口管理器,桌面環(huán)境相關(guān)的知識,讀一下對理解本文也有幫助。
好了,現(xiàn)在我們開始配置。
[ 安裝cygwin ]
Cygwin項(xiàng)目的目的是在windows主機(jī)上提供一個類UNIX的環(huán)境,網(wǎng)絡(luò)也有很多相關(guān)的資料。大家可以看一下這一篇:Cygwin使用指南,這篇文章在網(wǎng)絡(luò)上流行比較廣,作者未知,上面提供的僅是其中一個鏈接。
如果你的計(jì)算機(jī)上還沒有cygwin,首先需要安裝它。
這個過程很簡單,先到cygwin的主頁去下載setup.exe,然后使用setup.exe進(jìn)行安裝。在安裝的過程中需要選擇要安裝的組件,此時需要把X server組件選上。
在這里有一個安裝指南,雖然是英文的,不過看抓圖就可以了。
選擇X server組件時,其實(shí)只需要選擇xorg-x11-base,選中它之后,其它相關(guān)組件會自動被選中。
在安裝cygwin時,記得把expect這個軟件裝上,它位于interpreters類別下面。我會在后面的章節(jié)中說明為什么要安裝這個組件。
[ 運(yùn)行cygwin X server]
在運(yùn)行X server前,先假定一下我們的組網(wǎng)。
我們假設(shè)X server運(yùn)行在一臺windows XP計(jì)算機(jī)上,此機(jī)器的IP地址是192.168.190.91。
我們的Linux主機(jī)上將運(yùn)行X client程序,它的IP地址是192.168.190.15。
在你的安裝目錄中找到c:\cygwin\usr\X11R6\bin\startxwin.bat (假設(shè)你把cygwin安裝在c:\cygwin目錄),雙擊它就會啟動X server,同時會啟動一個終端(這個終端運(yùn)行在Windows本地),效果如下圖:
現(xiàn)在,我們要允許遠(yuǎn)程的X client對X server進(jìn)行訪問,因此,在終端中輸入下面的命令,
xhost + 192.168.190.15
接下來,我們要到X client所在的計(jì)算機(jī)上進(jìn)行配置,使用telnet或ssh登錄Linux主機(jī)(192.168.190.15),然后運(yùn)行下面的命令,
export DISPLAY=192.168.190.91:0.0xterm &gvim &
上面第一條命令設(shè)置DISPLAY變量,它表示X客戶端將使用192.168.190.91上的0.0來顯示自己。192.168.190.91是運(yùn)行cygwin X server的Windows計(jì)算機(jī)(它的防火墻要打開X server所監(jiān)聽的端口,通常為6000)。
后面兩條命令則在Linux主機(jī)上(192.168.190.15)啟動了兩個程序,一個是xterm,另外一個是gvim,我們發(fā)現(xiàn)這兩個程序啟動后,并沒有顯示在Linux主機(jī)上,相反,它們顯示在了windows主機(jī)上。下圖是執(zhí)行完上述命令的效果圖,我使用putty遠(yuǎn)程登錄到Linux主機(jī)上,然后執(zhí)行上述命令:
用這種方法,你可以在Linux主機(jī)上運(yùn)行任何圖形程序,并把它顯示到windows上。
如果你想把諸如KDE、GNOME這樣的桌面環(huán)境也顯示到windows上,就需要做些調(diào)整。
[ 運(yùn)行桌面環(huán)境 ]
在此我以KDE桌面為例。要把KDE桌面環(huán)境顯示到windows上的X server中,需要更改一下X server的啟動批處理。
首先備份一下c:\cygwin\usr\X11R6\bin\startxwin.bat,然后使用文本編輯器打開此文件,找到下面這行:
%RUN% XWin -multiwindow -clipboard -silent-dup-error
去掉”-multiwindow“參數(shù):
%RUN% XWin -clipboard -silent-dup-error
我們通常不需要啟動一個xterm窗口,因此找到下面這行:
%RUN% xterm -e /usr/bin/bash –l
把它注釋掉:
REM %RUN% xterm -e /usr/bin/bash –l
好了,批處理文件改完了。
回想一下上面的操作,在啟動了X server后,我們執(zhí)行了xhost命令來設(shè)置允許哪些計(jì)算機(jī)連接到X server,現(xiàn)在我們可以在配置文件中設(shè)置它。打開一個cygwin窗口,輸入下面的命令:
echo "192.168.190.15" >> /etc/X0.hosts
上面的命令會在/etc/X0.hosts文件中加入你想允許的X client,你可以在此文件中加入你的X客戶端。因?yàn)槲覀兪褂玫腄ISPLAY是0,所以在文件/etc/X0.hosts中增加;如果使用DISPLAY 1,則需要修改文件/etc/X1.hosts文件?,F(xiàn)在啟動X server后,192.168.190.15就被自動允許接入了。
現(xiàn)在我們再次雙擊startxwin.bat批處理,執(zhí)行后就會出現(xiàn)一個丑陋的空白窗口,這就是所謂的根窗口。之所以是空白的,是因?yàn)楝F(xiàn)在還沒有運(yùn)行任何窗口管理器。別急,我們使用telnet或ssh遠(yuǎn)程登錄Linux主機(jī),執(zhí)行命令:
startkde &
哈哈~~~本文開頭所展示的KDE窗口出來了?。?!現(xiàn)在你在KDE中運(yùn)行任何程序,它們都運(yùn)行在Linux主機(jī)上,卻把結(jié)果顯示在Windows主機(jī)上。
[ 創(chuàng)建快捷方式 ]
在上面的操作中,啟動X server后,需要使用telnet或ssh登錄到Linux主機(jī),才能啟動自己想要的X client程序,有沒有更簡單的方法?
現(xiàn)在我們就需要用到expect軟件了。這是一個如此有用的軟件,以至于我忍不住要在這里插一段廣告。
Expect為用戶提供一種機(jī)制,使用戶能夠自動執(zhí)行一些交互式的任務(wù)。例如,通常我們在使用telnet的時候,都需要手動輸入用戶名、密碼才能登錄。而使用Expect,我們就可以實(shí)現(xiàn)全自動的telnet交互,不需用戶干預(yù)。Expect由Don Libes開發(fā),基于TCL內(nèi)核,它的主頁在http://expect.nist.gov/。
廣告時間結(jié)束,我們繼續(xù)。我使用expect編寫了如下的TCL/EXPECT腳本,它可以使用ssh自動登錄到指定Linux主機(jī),然后啟動我們需要的程序。程序如下:
#! /bin/expect -f# Change these variable to yoursset user {easwy}set host {192.168.190.15}set xserver {192.168.190.91}set password {123456}set program {startkde}set timeout 5set done 0spawn ssh "$user@$host"while {!$done} {expect {"*(yes/no)?*" {# If the 1st time run ssh, it will prompt continue or not# answer yesexp_send "yes\n"}"assword*" {# Answer passwordexp_send "$password\n"}"\$*" {# Exit the loopincr done}"#*" {# Exit the loopincr done}timeout {# Timeoutexp_send_user "Login timeout, please check!"}}}# Set DISPLAY environment variableexp_send "export DISPLAY=$xserver:0\n"# Start your programexp_send "nohup $program &\n"expect -regexp {\[[0-9]*\] [0-9]*}exp_send "\n"# Finished
把上面的內(nèi)容保存為一個文件,例如,保存為cygwin的~/login.exp。注意:把腳本起始處的5個變量替換成你自己的,只需要替換大括號中間的內(nèi)容。使用telnet的朋友請自行修改此腳本。
下面我們再改一下c:\cygwin\usr\X11R6\bin\startxwin.bat文件,在此文件的最后增加:
REM Start your X client program%CYGWIN_ROOT%\bin\run -p /bin expect -f ~/login.exp
我們使用expect來執(zhí)行剛才保存的~/login.exp。
現(xiàn)在,我們右擊startxwin.bat文件,選擇“發(fā)送到桌面快捷方式”。以后,只要你雙擊此快捷方式,就能立刻在Windows上使用Linux主機(jī)上的程序了。
我們再來看一個有趣的例子。
在上圖中共開了三個終端,它們分別運(yùn)行在不同的主機(jī)上,卻都在Windows主機(jī)上進(jìn)行輸入輸出。這就是X window的魅力了,如果你愿意,你還可以把其它Windows及Linux主機(jī)上的程序顯示到這個X server中,正所謂一”橋”飛架南北,天塹變通途。
在本文完成后,經(jīng)網(wǎng)友jiachunyu介紹,才知道有一個名為XWinLogon的軟件,它也是使用cygwin的X server實(shí)現(xiàn)Linux的遠(yuǎn)程桌面。相比之下,它的安裝和使用都簡單了很多。這個軟件的主頁在:http://sourceforge.net/projects/xwinlogon/
或者
http://www.calcmaster.net/visual-c++/xwinlogon/
有興趣可以試一下。
需要說明的是,XWinLogon中包含了部分cygwin的軟件包,如果你安裝了cygwin,則不能安裝此軟件(我沒有試過,在作者主頁這樣說明)。
[參考文檔]
原創(chuàng)文章,許可方式見頁尾,轉(zhuǎn)載請注明:轉(zhuǎn)載自Easwy的博客 [ http://easwy.com/blog/ ]
本文鏈接地址: http://easwy.com/blog/archives/linux-remote-desktop-via-cygwin-x-server/
Post Footer automatically generated by wp-posturl plugin for wordpress.