VNC是由AT&T試驗室開發,是一款優秀的遠程控制工具軟件,后來以GPL授權的形式開源。經過幾年的發展,現在的VNC已經不單指某個軟件,而是一類軟件的通稱。下面介紹Linux下常用的兩個VNC軟件。
VNC的原理就是不停的對窗口界面截屏,再將圖像傳輸給客戶端,同時VNC服務器端接管服務器端的鍵盤、鼠標控制權,客戶端可以通過服務器端操縱鍵盤鼠標。比較類似Windows下的pcAnywhere。
一、Windows 端設置
先講Windows端是因為,下述的兩個VNC可以用同一個客戶端連接。
在Windows平台上,客戶端我選擇了RealVNC。RealVNC包括了一整套的服務器端與客戶端,如果只安裝客戶端是不需要注冊碼的,其客戶端程序名為vncviewer.exe,這是個綠色軟件,你可以從安裝目錄下拷貝到其他電腦中運行。
二、VINO
VINO是Gnome中集成的一個VNC軟件,安裝Gnome環境時默認安裝,點擊“系統”-“首選項”-“遠程桌面”就打開了其配置窗口。
選中“允許其他人查看您的桌面”后VINO就會啟動服務器端進程vino-server,同時它監聽TCP 5900端口。如果不選中“允許其他用戶控制您的桌面”,客戶端則只能觀看不能操縱。
VINO的模式與下面介紹的XVNC有很大不同,我覺得VINO其實是“Windows下的遠程協助”,因為客戶端顯示的桌面與Linux端本地顯示器中顯示的桌面一樣,如果你操縱客戶端中的鼠標,Linux的顯示器也能看到鼠標在跑。如果你在Windows下安裝過VNC服務器端,效果就是這個樣。
另外,VINO的帶寬占用真是變態,就算是一進桌面什么都不打開無操作的情況下,帶寬也要占到4-5Mbps(桌面1280×1024,色彩24),如果有操作會占到8-12Mbps。
所以,VINO不適合做為服務器的日常遠程管理,比較適合做為Linux下的遠程協助和遠程教學,也就是說你遇到一個問題,求助高手,而高手可以手把手的教你,你可以直接觀看屏幕學習,或者做故障重現,你在本地做故障或Bug重現,而工程師可以遠程觀看。
三、XVNC
XVNC就是大家所熟悉的vnc或vncserver,是由RealVNC公司開發的開源版的VNC軟件。
1、安裝XVNC。
安裝Linux時,可以從安裝包中選中。若沒有安裝,可以從安裝盤中找到。
服務器的組件名叫 vnc-server。請執行 rpm -q vnc-server 這個指令。
它的輸出應該是 package vnc-server is not installed 或類似 vnc-server-4.0-11.el4。
假如服務器未被安裝,請用這個指令來安裝它:yum install vnc-server。
2、啟動vncserver。
在終端中輸入:
vncserver :1 -geometry 1280x1024 –depth 24 注::1指1號窗口,-geometry指窗口分辨率,-depth指色彩數
也可以簡單的指定:
vncserver :1 注:使用RealVNC的客戶端,窗口分辨率與色彩數可以在客戶端指定
當你第一次啟動vncserver時,會要求指定密碼,該密碼是VNC客戶端連接時要輸入。
窗口可以從0開始指定,如果Linux本地端已經啟用圖形環境,則必須從1開始指定,因為窗口0被X11占用。
3、配置xstartup
XVNC默認采用twm做為圖形環境,如果你安裝了KDE或Gnome也可以啟動。
vi ~/.vnc/xstartup
顯示如下內容:
#!/bin/sh
# Uncomment the following two lines for normal desktop:
# unset SESSION_MANAGER
# exec /etc/X11/xinit/xinitrc
[ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup
[ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
xsetroot -solid grey
vncconfig -iconic &
xterm -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" &
twm &
最后一行twm &表示啟動twm,修改成gnome-session &啟動Gnome,修改成startkde &啟動KDE。
如果Linux本地端已經啟用Gnome或KDE圖形環境,當VNC客戶端連接服務器后,可能會只顯示灰屏,沒有正常啟用圖形環境。查看~/.vnc下的日志時會提示錯誤:You are already running a session manager。
這時需要去掉xstartup文件中的
# unset SESSION_MANAGER
# exec /etc/X11/xinit/xinitrc
這兩行前的#,再重啟vncserver。如果Linux本地端是init 3模式,則不需要修改這兩行。
當vnc客戶端連接服務器時顯示的界面是英文的,主要是中文環境還沒有裝入,而且沒有中文輸入法。在# exec /etc/X11/xinit/xinitrc行后添加下面內容:
export LANG=zh_CN.UTF-8 注:啟用中文環境
scim –d 注:加載scim輸入法
4、關閉vncserver
vncserver –kill :1 注:關閉窗口1,以此類推關閉窗口2就為:2
當所有窗口都關閉vncserver服務就關閉了。
5、客戶端使用
XVNC不僅支持vncview等客戶端程序,還支持瀏覽器控制。
瀏覽器直接輸入地址http://IP:5800,就會啟動Java客戶端連接。
窗口0占用TCP 5900端口(VNC客戶端),TCP 5800端口(瀏覽器)。
窗口1占用TCP 5901端口(VNC客戶端),TCP 5801端口(瀏覽器)。
窗口2、3以此類推。
6、開機自啟動vncserver
上面的操作都是要先登錄Linux端,然后手動啟動vncserver服務后,才能使用VNC連接。如果你想開機自啟動vncserver服務,必須這樣做。
先按上面的步驟啟動一次vncserver,確保密碼和xstartup文件都建立了。
然后,vi /etc/sysconfig/vncservers,添加如下內容:
VNCSERVERS="1:root 2:zhang 3:li" 注:1、2、3代表窗口,比如root用戶用窗口1,zhang用戶用窗口2,這里的用戶是指Linux中的正規的用戶帳戶
VNCSERVERARGS[1]="-geometry 640x480 –depth 24" 注:為root用戶指定分辨率和色彩數,這里的[1]指上面的“1:root”
VNCSERVERARGS[2]="-geometry 640x480 –depth 16" 注:為zhang用戶指定分辨率和色彩數
VNCSERVERARGS[3]="-geometry 800x600"
注:上面的這三行可以不添加,由vnc客戶端自行控制分辨率和色彩。上面的root、zhang、li用戶必須確保密碼和xstartup文件都建立了,你可以分別登錄先執行一次vncserver :1。
最后,執行/sbin/chkconfig vncserver on指令。
7、安全
XVNC的數據傳輸都是明文的,因涉及服務器的管理,使用明文是不可接受的。
我們可以使用SSH加密VNC數據。
首先,開啟Linux端的SSH服務。
第二,在Windows端下載一個SSH telnet工具。推薦的有PuTTy,SecureCRT。
第三,啟用SSH隧道。下面以SecureCRT為例,PuTTy操作類似。
先建立一個連接到Linux端的普通SSH會話。
在該會話選項中“端口轉發”中,添加“本地端口轉發屬性”。
見右圖中,在“本地”中輸入一個端口,這里選擇了5901,也可以選擇5801或其他端口,只要不與本地的服務相沖突,這個本地端口與Linux中vncserver監聽的窗口端口無關,在“遠程”中輸入5901,這個端口是Linux端的vncserver監聽的端口,這里是啟動窗口1,如果啟動窗口2則這里要輸入5902。確定。
設置完后,在SecureCRT中啟動與Linux的SSH會話,正確登錄Linux后。打開vncviewer。
在VNC服務器中輸入:localhost:5901(這里的端口就是上面指定的本地端口,而非Linux端的端口),因為這里要連接的是本地的SecureCRT啟動的SSH隧道。在VNC運行過程中SecureCRT不能關閉。
這樣,在Linux端的防火牆就可以只開放SSH端口,關閉掉有關VNC的所有端口。
8、結論
XVNC是一個非常好的日常用服務器管理工具,你可以根據你的網絡帶寬調整畫質,如果你的帶寬偏小,可以調小分辨率與色彩數,XVNC無操作時基本沒有數據,如果是800×600分辨率,最差畫質,它只會占幾百Kb甚至十幾Kb的帶寬,這一點上非常適合做服務器管理。