用VNC实现远程桌面(支持Windows, Linux, …)

      潇湘隐者     http://www.cnblogs.com/kerrycode/p/3315793.html

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

 Tight VNC官方网址:  http://www.tightvnc.com/

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


一  . 概述
  
     VNC,全称为Virtual Network Computing,它是一个桌面共享系统。它的功能,类似于windows中的远程桌面功能。VNC使用了RFB(Remote FrameBuffer,远程帧缓冲)协议来实现远程控制另外一台计算机。它把键盘、鼠标动作发送到远程计算机,并把远程计算机的屏幕发回到本地。
     VNC技术与平台无关,VNC Viewer可以和VNC Server在不同的操作系统上。VNC几乎支持所有的操作系统,也支持Java,甚至可以通过支持Java的浏览器来访问VNC Server。多个VNC客户端可以同时连接到一个VNC Server上。
     VNC最初由AT&T开发的,它的源代码是开源的。

二  配置

1.  在rhel上配置VNC服务(这里的测试机为RHEL5.4)
     在使用vnc之前需要安装两个rpm包:
     vnc-4.1.2-14.el5_3.1
     vnc-server-4.1.2-14.el5_3.1

2.  开启服务
     首先需要配置VNC密码,密码在使用客户端连接服务器时使用。
    注意:VNC密码保存在用户的主目录中,每个用户都可以设置自己的密码。因此,尽量不要使用root,运行下列命令:
     #vncpasswd
    然后输入密码。
    接下来就可以启动VNC server了。在启动VNC server时,需要为server指定一个display参数。可以把display理解为一个桌面,每个用户都可以有自己的桌面。VNC客户端在连接时,可以指定连接到哪个桌面上。在系统中,display号不能     重复,也就是说,如果有用户已经建立了名为“:1”的display,另外一个用户就不能再使用“:1”了,他可以使用“:2”。
    启动VNC server的命令是:
    # vncserver              例如: #vncserver :1

3. 配置防火墙

此时用VNC Viewer连接的话,一般会报:"connect:Connection timed out(10060)"错误,如下所示:

clip_image008

clip_image010


  允许VNC客户端连接VNC server。VNC server监听的端口从5900开始,display :1的监听5901,display :2监听5902,以此类推。
  CentOs的防火墙缺省是不允许连接这些端口的,所以需要使用下面的步骤打开防火墙(需要root权限):
   vi /etc/sysconfig/iptables
   找到下面的语句:
   -A  INPUT -j REJECT –reject-with icmp-host-prohibited
   在此行之前,加上下面的内容:
   -A  INPUT -m state –state NEW -m tcp -p tcp –dport 22  -j ACCEPT
   -A  INPUT -m state –state NEW -m tcp -p tcp –dport 5900:5903 -j ACCEPT
   这句话的含义是,允许其它机器访问本机的5900到5903端口,这样,display:1, display:2, display:3的用户就可以连接到本机。

    然后使用root身份重新启动防火墙:                                         #/sbin/service iptables restart
    或者比较省力的方式就是直接使用root用户把iptables服务关闭.      #/sbin/service iptables stop

    这样就可以运行客户端软件,连接到VNC server上了。
    VNC客户端软件很多,在linux下有vncviewer,KDE还提供了一个krdc(它的菜单项就是”Remote Desktop Connection”,远程桌面连接)。
    在window也有不少vnc客户端,你可以到http://www.realvnc.com/去下载一个,安装就可以用了。

    假设VNC server的IP地址是192.168.1.1,display是:1。在VNC viewer的server栏中输入:“192.168.1.1:1”,然后连接。
   以后不管什么时候关闭自己的本地PC机都不怕了,只要server不关机,你只要连接到VNC server,就可以看到前一天关闭本地PC机时的桌面还保持着原样。

4.  远程画面更好设置
    vncserver默认使用的窗口管理器是twm,这是一个很简陋的窗口管理器,可以把你的桌面改成GNOME或KDE。
    方法是,进入你自己的home目录,然后编辑这个文件:.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 80×24+10+10 -ls -title “$VNCDESKTOP Desktop“ &
   #twm &
   gnome-session &

   可以把像上面这样把”twm &”这一行注释掉,然后在下面加入一行”gnome-session &”,或者是”startkde &”,分别启动GNOME桌面和KDE桌面。

5. VNC server启动成后台服务 

 如果server重启了,那就需要重新运行一次vncserver命令来启动VNC server,这很麻烦。有没有更好的方法呢?  有!我们可以把VNC server启动成后台服务。

执行如下步骤:

首先要允许VNC server在系统启动过程中被启动。这可以通过“系统设置–>服务器设置–>服务”菜单来配置,把vncserver一项选上就可以了。
如果使用命令行的话,以root身份运行以下命令:
chkconfig --level 345 vncserver on

然后编辑/etc/sysconfig/vncservers,以下是文件内容:
# The VNCSERVERS variable is a list of display:user pairs.
#
# Uncomment the line below to start a VNC server on display :1
# 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
# .

VNCSERVERS=“1:user1 2:user2 3:user3“
VNCSERVERARGS[1]=“-geometry 1024×768“
VNCSERVERARGS[2]=“-geometry 1024×768“
VNCSERVERARGS[3]=“-geometry 800×600“

解释一下这个文件:
VNCSERVERS这一行是配置在系统启动时启动几个VNC server,上面的例子里运行了三个VNC server,其中user1在display :1,user2在display :2,user3在display :3。
VNCSERVERARGS这三行,分别为VNC server 1, 2, 3配置启动参数,上面的例子里对user1和user2使用屏幕分辨率1024×768,对user3使用800×600。
其它支持的参数请使用“man vncserver”命令查询。

编辑好这个文件后,保存,然后以root身份运行:
/sbin/service vncserver start

这样user1, user2, user3 的vncserver就启动了。
以后每次系统重启时,都会自动启动这三个用户的vncserver。

注意:上面三个用户必须已经使用vncpasswd命令设置过vnc密码,不然他的vncserver启动会失败!

关于VNC服务使用的端口号与桌面号相关,VNC使用TCP端口从5900开始,对应关系如下 
桌面号为“1” ---- 端口号为5901 
桌面号为“2” ---- 端口号为5902 
桌面号为“3” ---- 端口号为5903 
…… 
基于Java的VNC客户程序Web服务TCP端口从5800开始,也是与桌面号相关,对应关系如下 
桌面号为“1” ---- 端口号为5801 
桌面号为“2” ---- 端口号为5802 
桌面号为“3” ---- 端口号为5803 
基于上面的介绍,如果Linux开启了防火墙功能,就需要手工开启相应的端口.
5. VNC server自启动

# chkconfig vncserver on
请使用浏览器的分享功能分享到微信等