VNC CentOS Linux下VNC Server遠程桌面配置詳解


VNC概述

  VNC (Virtual Network Console)是虛擬網絡控制台的縮寫。VNC 是一款優秀的遠程控制工具軟件,由著名的 AT&T 的歐洲研究實驗室開發的。VNC 是在基於 UNIX 和 Linux操作系統的免費的開源軟件遠程控制能力強大,高效實用,其性能可以和 Windows 或 MAC中的任何遠程控制軟件媲美。在 Linux 中,VNC 包括以下四個命令:vncserver,vncviewer,vncpasswd,和 vncconnect。大多數情況下只需要其中的兩個命令:vncserver 和 vncviewer。目前,原來的AT&T版本已經不再使用,因為更多有重大改善的分支版本已經出現, 像是RealVNC, VNC tight 和UltraVNC。 Real VNC 是當前最活躍和強大的主流應用。

 RealVNC官方網址  :  http://www.realvnc.com/

 TightVNC官方網址:  http://www.tightvnc.com/

 TigerVNC官方網址http://tigervnc.org           TigerVNC最初基於TightVNC的(從未發布的)VNC 4分支

 UltraVNC官方網址 : http://www.uvnc.com/

 

VNC原理

VNC系統由客戶端,服務端和一個協議組成。VNC的服務端目的是分享其所運行機器的屏幕, 服務端被動的允許客戶端控制它。 VNC客戶端(或Viewer) 觀察控制服務端,與服務端交互。 VNC 協議 Protocol (RFB)是一個簡單的協議,傳送服務端的原始圖像到客戶端(一個X,Y 位置上的正方形的點陣數據), 客戶端傳送事件消息到服務端。

服務器發送小方塊的幀緩存給客戶端,在最簡單的情況,VNC協議使用大量的帶寬,因此各種各樣的方法被發明出來減少通訊的開支,舉例來說,有各種各樣的編碼方法來決定最有效率的方法來傳送這些點陣方塊)

協議允許客戶端和服務端去協議哪種編碼會被使用,最簡單的編碼,被大多數客戶端和服務端所支持的是, 從左到右的像素掃描數據的原始編碼, 當原始的滿屏被發送后,只發送變化的方塊區域。這種編碼在幁間只有小部分屏幕變化的情況下工作的非常好(像是鼠標鍵在桌面移動的情況,或在光標處敲擊文字),不過如果大量的像素同時變化帶寬將會增加的非常高,像是拖動一個窗口或觀看全屏錄像。

VNC默認使用TCP端口5900至5906,而JAVA的VNC客戶端使用5800至5806。一個服務端可以在5500口用“監聽模式”連接一個客戶端,使用監聽模式的一個好處是服務端不需要設置防火牆。

UNIX上的VNC稱為xvnc,同時扮演兩種角色,對X窗口系統的應用程序來說它是X server,對於VNC客戶端來說它是VNC服務器程序。

 

 

VNC安裝配置

安裝相應桌面環境與vnc服務端和客戶端:
# yum groupinstall "GNOME Desktop Environment"(CentOS 5.x安裝GNOME桌面環境)
# yum groupinstall "X Window System" "Desktop"(CentOS 6.x安裝GNOME桌面環境)
# yum groupinstall Xfce(CentOS安裝Xfce桌面環境,可選)
# yum install vnc-server vnc* (CentOS 5.x里)
# yum install tigervnc-server tigervnc (CentOS 6.x里)
說明:Xfce與KDE,Gnome都是圖形桌面環境,其特點是占用資源更小資源占用情況大致為:Gnome>KDE>Xfce。具體情況與版本有關。一般版本越新,資源占用越大。

1.確認VNC是否安裝
默認情況下,CentOS Linux安裝程序會將VNC服務安裝在系統上。
確認是否已經安裝VNC服務及查看安裝的VNC版本
[root@ localhost ~]# rpm -q vnc-server
vnc-server-4.1.2-9.el5
[root@ localhost ~]#
若系統沒有安裝,可以到操作系統安裝盤的Server目錄下找到VNC服務的RPM安裝包vnc-server-4.1.2-9.el5.x86_64.rpm,安裝命令如下
rpm -ivh /mnt/Server/vnc-server-4.1.2-9.el5.x86_64.rpm

也可以連網直接用yum源安裝。

2.啟動VNC服務
使用vncserver命令啟動VNC服務,命令格式為“vncserver :桌面號”,其中“桌面號”用“數字”的方式表示,每個用戶連接需要占用1個桌面
啟動編號為1的桌面示例如下

=======================================================================

[root@ localhost ~]# vncserver :1
You will require a password to access your desktops.
Password:                                            #要求輸入密碼
Verify:                                                #驗證剛才輸入的密碼
xauth:  creating new authority file /root/.Xauthority
New 'testdb:1 (root)' desktop is testdb:1
Creating default startup script. /root/.vnc/xstartup
Starting applications specified in /root/.vnc/xstartup
Log file is /root/.vnc/testdb:1.log

=======================================================================

命令執行的過程中,是在root用戶提示符下執行同時也是第一次執行,會在此用戶的主目錄(/root/)下生成.vnc子目錄和相應的配置文件,同時需要輸入密碼(vncviewer端用此用戶訪問的密碼),這個密碼被加密保存在此用戶主目錄下的.vnc子目錄(/root/.vnc/passwd)中;同時在用戶主目錄下的.vnc子目錄中為用戶自動建立xstartup配置文件(/root/.vnc/xstartup),在每次啟動VND服務時,都會讀取該文件中的配置信息。上面的是添加root用戶通過VNC訪問權限,如果想添加其他用戶訪問權限,需要在相應的用戶命令提示符下進行上面的操作(如test用戶也需要執行[test@ localhost ~]$ vncserver :1   在相應的主目錄下生成對應的.vnc子目錄)。對不同用戶的訪問密碼更改也需要在相應的命令提示符下操作。
在/root/.vnc/目錄下還有一個“root:1.pid”文件,這個文件記錄着啟動VNC后對應后天操作系統的進程號,用於停止VNC服務時准確定位進程號.

3.VNC服務使用的端口號與桌面號的關系
VNC服務使用的端口號與桌面號相關,VNC使用TCP端口從5900開始,對應關系如下
桌面號為“1”  ---- 端口號為5901
桌面號為“2”  ---- 端口號為5902
桌面號為“3”  ---- 端口號為5903
……
基於Java的VNC客戶程序Web服務TCP端口從5800開始,也是與桌面號相關,對應關系如下
桌面號為“1”  ---- 端口號為5801
桌面號為“2”  ---- 端口號為5802
桌面號為“3”  ---- 端口號為5803
……
基於上面的介紹,如果Linux開啟了防火牆功能,就需要手工開啟相應的端口,以開啟桌面號為“1”相應的端口為例,命令如下

=========================================================================
[root@ localhost ~]# iptables -I INPUT -p tcp --dport 5901 -j ACCEPT
[root@ localhost ~]# iptables -I INPUT -p tcp --dport 5801 -j ACCEPT

==========================================================================

4.測試VNC服務
第一種方法是使用VNC Viewer軟件登陸測試,操作流程如下
啟動VNC Viewer軟件 --> Server輸入“192.168.1.100:1” --> 點擊“OK” --> Password輸入登陸密碼 --> 點擊“OK”登陸到X-Window圖形桌面環境 --> 測試成功
第二種方法是使用Web瀏覽器(如Firefox,IE,Safari)登陸測試,操作流程如下
地址欄輸入192.168.1.100:1:5801/ --> 出現VNC viewer for Java(此工具是使用Java編寫的VNC客戶端程序)界面,同時跳出VNC viewer對話框,在Server處輸入“144.194.192.183:1”點擊“OK” --> Password輸入登陸密碼 --> 點擊“OK”登陸到X-Window圖形桌面環境 --> 測試成功
(注:VNC viewer for Java需要JRE支持,如果頁面無法顯示,表示沒有安裝JRE,可以到http://java.sun.com/javase/downloads/index_jdk5.jsp這里下載最新的JRE進行安裝)

5.配置VNC圖形桌面環境為KDE或GNOME桌面環境
如果您是按照我的上面方法進行的配置的,登陸到桌面后效果是非常簡單的,只有一個Shell可供使用,這是為什么呢?怎么才能看到可愛並且美麗的KDE或GNOME桌面環境呢?回答如下
之所以那么的難看,是因為VNC服務默認使用的是twm圖形桌面環境的,可以在VNC的配置文件xstartup中對其進行修改(需要登錄的每個用戶主目錄下的.vnc/xstartup文件都要修改),先看一下這個配置文件。

==========================================================================
[root@ localhost ~]# vi /root/.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 &

==========================================================================

取消這個xstartup文件中下面兩行的注釋,就是刪除行前面的“#”的符號。

# unset SESSION_MANAGER
# exec /etc/X11/xinit/xinitrc

這個xstartup文件的最后一行twm & 前面加“#” 注釋”, 在新建一行添加gnome-session &  ,重新啟動vncserver服務后就可以登陸到GNOME桌面環境。

這個xstartup文件的最后一行twm & 前面加“#” 注釋”, 在新建一行添加startkde &  ,重新啟動vncserver服務后就可以登陸到KDE桌面環境 。                            
重新啟動vncserver服務的方法:

==========================================================================[[root@ localhost ~]# vncserver -kill :1
[root@ localhost ~]# vncserver :1

==========================================================================

6.配置多個桌面
可以使用如下的方法啟動多個桌面的VNC
vncserver :1
vncserver :2
vncserver :3
……
但是這種手工啟動的方法在服務器重新啟動之后將失效,因此,下面介紹如何讓系統自動管理多個桌面的VNC,方法是將需要自動管理的信息添加到/etc/sysconfig/vncservers配置文件中,先以桌面1為root用戶、桌面2為test用戶為例進行配置如下:
格式為:VNCSERVERS="桌面號:使用的用戶名  桌面號:使用的用戶名"   

修改/etc/sysconfig/vncservers文件,未經修改的vncservers文件如下所示:

===========================================================

[root@localhost ~]# more /etc/sysconfig/vncservers

# The VNCSERVERS variable is a list of display:user pairs.

#

# Uncomment the lines below to start a VNC server on display :2

# as my 'myusername' (adjust this to your own).  You will also

# need to set a VNC password; run 'man vncpasswd' to see how

# to do that. 

#

# DO NOT RUN THIS SERVICE if your local area network is

# untrusted!  For a secure way of using VNC, see

# <URL:http://www.uk.research.att.com/archive/vnc/sshvnc.html>.

# Use "-nolisten tcp" to prevent X connections to your VNC server via TCP.

# Use "-nohttpd" to prevent web-based VNC clients connecting.

# Use "-localhost" to prevent remote VNC clients connecting except when

# doing so through a secure tunnel.  See the "-via" option in the

# `man vncviewer' manual page.

# VNCSERVERS="2:myusername"

# VNCSERVERARGS[2]="-geometry 800x600 -nolisten tcp -nohttpd -localhost"

===========================================================

 

將最后兩行配置信息取消注釋。

VNCSERVERS="2:myusername"

上面這行添加兩個用戶,可以添加多個用戶中間用空格隔開,如下:

VNCSERVERS="1:root  2:test"

 VNCSERVERARGS[2]="-geometry 800x600 -nolisten tcp -nohttpd -localhost"

上面這行是每個用戶的配置參數,用戶和用戶參數要一一對應,修個成如下參數:

VNCSERVERARGS[1]="-geometry 1024x768 "

VNCSERVERARGS[2]="-geometry 1024x768 "

關於參數配置說明:
1)、VNCSERVERS 是用來設定可以使用VNC的服務器賬號,可以設定多個,這里的“用戶名”是指linux系統用戶的名稱(root用戶和普通用戶),例如上面root、test,但是中間要用空格隔開。使用VNCVIEWER登錄時,192.168.1.100:1表示是以root賬號登錄,以此類推。
2)、注意前面的數字“1”或是“2”為桌面號,每個用戶可以有多個桌面號,但是每個桌面號只能屬於一個用戶,當你要從其它電腦用VNC訪問服務器時,就需要用IP:1這種方法,而不能直接用IP。如假定你的VNC服務器IP是192.168.1.100,那想進入VNC服務器,並以test用戶登錄時,需要在vncviewer里輸入IP的地方輸入:192.168.1.100:2 (2對應的就是test用戶),如果是root,那就是192.168.1.100:1 (1對應的就是root用戶);
3)、下面兩行[1][2]最好與上面那個相對應,后面的800X600可以換成你電腦支持的分辨率。注意中間的”x”不是“*”,而是小寫字母”x”。

4):-geometry 表示遠程桌面分辨率,默認為800x600,根據vncviewer所在電腦的分辨率設置。

5):-nohttpd  表示不監聽HTTP端口(58xx),這個在參數里面去掉不加影響效果。

6):-nolisten tcp 表示不監聽TCP端口(60xx),這個在參數里去掉不加影響效果。

7):-localhost 只運行從本機訪問,這個在參數里去掉不加,加了遠程登錄不了。

8):AlwaysShared 默認只允許一個VNCVIEWER連接,此參數表示同一個顯示端口允許多用戶同時登錄.

9):-depth  表示色深,參數有8,16,24,32. 可以不加。

7): SecurityTypes None 登錄不需要密碼認證VncAuth默認值,要密碼認證。

7.修改VNC訪問的密碼
使用命令vncpasswd對不同用戶的VNC的密碼進行修改,一定要注意,如果配置了不同用戶的VNC需要分別到各自用戶中進行修改,例如在我的這個實驗中,root用戶和test用戶需要分別修改,修改過程如下:

==========================================================================
[root@ localhost ~]# vncpasswd
Password:                                                       #輸入密碼
Verify:                                                           #確認密碼
[root@ localhost ~]#

8.啟動和停止VNC服務
1)啟動VNC服務命令
[root@ localhost ~]# service vncserver start

2)停止VNC服務命令
[root@ localhost ~]# service vncserver stop

3)重新啟動VNC服務命令
[root@ localhost ~]# service vncserver restart


9設置VNC服務隨系統啟動自動加載
第一種方法:使用“ntsysv”命令啟動圖形化服務配置程序,在vncserver服務前加上星號,點擊確定,配置完成。
第二種方法:使用“chkconfig”在命令行模式下進行操作,命令使用如下(預知chkconfig詳細使用方法請自助式man一下)
[root@testdb ~]# chkconfig vncserver on
[root@testdb ~]# chkconfig --list vncserver
vncserver       0:off   1:off   2:on    3:on    4:on    5:on    6:off

10、可能遇到的問題:

1)、黑屏
在Linux里安裝配置完VNC服務端,發現多用戶登陸會出現黑屏的情況,具體的現象為:
客戶端可以通過IP與會話號登陸進入系統,但登陸進去是漆黑一片,除了一個叉形的鼠標以外,伸手不見五指。

原因:用戶的VNC的啟動文件權限未設置正確。
解決方法:將黑屏用戶的xstartup(一般為:/用戶目錄/.vnc/xstartup)文件的屬性修改為755(rwxr-xr-x)。
完后殺掉所有已經啟動的VNC客戶端:
vncserver -kill :1
vncserver -kill :2 (注意:-kill與:1或:2中間有一空格)
最后重啟vncserver服務即可! # service vncserver restart

注意:vncserver只能由啟動它的用戶來關閉,即時是root也不能關閉其它用戶開啟的vncserver,
除非用kill命令暴力殺死進程。

2)、Windown下如何登陸VNC Server
a從瀏覽器登錄(瀏覽器需要安裝JAVA支持庫,作為java applet來實現,才能登錄控制VNC服務器,可以yum install java*安裝)
直接從瀏覽器中輸入如下地址:
http://xxx.xxx.xxx.xxx:5801

b從VNC客戶端登錄
在windows上安裝vnc客戶端,然后輸入xxx.xxx.xxx.xxx:x,連接登錄。

備注:
輸入的格式為IP:桌面號,桌面號要看你自己的配置而定。如192.168.80.128:1
登陸提示connection refused(10061),則是因為linux防火牆的問題,請檢查防火牆設置。
后面的尾綴”:x”也是不能少的,要不然老提示failed to connect : connection refused (10061)
11.小結
  VNC的詳細配置方法到此已經寫完,都是在網上搜索的加自己的實踐。VNC對於遠程調用圖形化界面來說非常的輕巧和便捷!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM