首页 > 代码库 > Linux系统VNC配置

Linux系统VNC配置

VNC概述

   VNC (Virtual Network Computing)是虚拟网络计算机的缩写。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/

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

        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服务器程序。


  1. 确认VNC是否安装
    默认情况下,Red Hat Enterprise Linux安装程序会将VNC服务安装在系统上。
    确认是否已经安装VNC服务及查看安装的VNC版本
    [root@testdb ~]# rpm -q vnc-server
    vnc-server-4.1.2-9.el5
    [root@testdb ~]#

    若系统没有安装,可以到操作系统安装盘的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

    2.启动VNC服务
    使用vncserver命令启动VNC服务,命令格式为“vncserver :桌面号”,其中“桌面号”用“数字”的方式表示,每个用户连个需要占用1个桌面
    启动编号为1的桌面示例如下
    [root@testdb ~]# 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

    以上命令执行的过程中,因为是第一次执行,需要输入密码,这个密码被加密保存在用户主目录下的.vnc子目录(/root/.vnc/passwd)中;同时在用户主目录下的.vnc子目录中为用户自动建立xstartup配置文件(/root/.vnc/xstartup),在每次启动VND服务时,都会读取该文件中的配置信息。
    BTW:/root/.vnc/目录下还有一个“testdb: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@testdb ~]# iptables -I INPUT -p tcp --dport 5901 -j ACCEPT
    [root@testdb ~]# iptables -I INPUT -p tcp --dport 5801 -j ACCEPT

    4.测试VNC服务
    第一种方法是使用VNC Viewer软件登陆测试,操作流程如下
    启动VNC Viewer软件 --> Server输入“144.194.192.183:1” --> 点击“OK” --> Password输入登陆密码 --> 点击“OK”登陆到X-Window图形桌面环境 --> 测试成功
    第二种方法是使用Web浏览器(如Firefox,IE,Safari)登陆测试,操作流程如下
    地址栏输入http://144.194.192.183: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中对其进行修改,先看一下这个配置文件
    [root@testdb ~]# 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文件的最后一行修改为“startkde &”,再重新启动vncserver服务后就可以登陆到KDE桌面环境
    将这个xstartup文件的最后一行修改为“gnome-session &”,再重新启动vncserver服务后就可以登陆到GNOME桌面环境

    重新启动vncserver服务的方法:
    [root@testdb ~]# vncserver -kill :1
    [root@testdb ~]# vncserver :1

    6.配置多个桌面
    可以使用如下的方法启动多个桌面的VNC
    vncserver :1
    vncserver :2
    vncserver :3
    ……
    但是这种手工启动的方法在服务器重新启动之后将失效,因此,下面介绍如何让系统自动管理多个桌面的VNC,方法是将需要自动管理的信息添加到/etc/sysconfig/vncservers配置文件中,先以桌面1为root用户桌面2为oracle用户为例进行配置如下:
    格式为:VNCSERVERS="桌面号:使用的用户名 桌面号:使用的用户名"
    [root@testdb ~]# vi /etc/sysconfig/vncservers
    VNCSERVERS="1:root 2:oracle"
    VNCSERVERARGS[1]="-geometry 1024x768"
    VNCSERVERARGS[2]="-geometry 1024x768"

    7.修改VNC访问的密码
    使用命令vncpasswd对不同用户的VNC的密码进行修改,一定要注意,如果配置了不同用户的VNC需要分别到各自用户中进行修改,例如在我的这个实验中,root用户和oracle用户需要分别修改,修改过程如下:
    [root@testdb ~]# vncpasswd
    Password:
    Verify:
    [root@testdb ~]#

    8.启动和停止VNC服务
    1)启动VNC服务命令
    [root@testdb ~]# /etc/init.d/vncserver start
    Starting VNC server: 1:root
    New ‘testdb:1 (root)‘ desktop is testdb:1

    Starting applications specified in /root/.vnc/xstartup
    Log file is /root/.vnc/testdb:1.log

    2:oracle
    New ‘testdb:2 (oracle)‘ desktop is testdb:2

    Starting applications specified in /home/oracle/.vnc/xstartup
    Log file is /home/oracle/.vnc/testdb:2.log

                                                               [  OK  ]
    2)停止VNC服务命令
    [root@testdb ~]# /etc/init.d/vncserver stop
    Shutting down VNC server: 1:root 2:oracle                  [  OK  ]

    3)重新启动VNC服务命令
    [root@testdb ~]# /etc/init.d/vncserver restart
    Shutting down VNC server: 1:root 2:oracle                  [  OK  ]
    Starting VNC server: 1:root
    New ‘testdb:1 (root)‘ desktop is testdb:1

    Starting applications specified in /root/.vnc/xstartup
    Log file is /root/.vnc/testdb:1.log

    2:oracle
    New ‘testdb:2 (oracle)‘ desktop is testdb:2

    Starting applications specified in /home/oracle/.vnc/xstartup
    Log file is /home/oracle/.vnc/testdb:2.log

                                                               [  OK  ]

    4)设置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

    9.小结
      VNC的详细配置方法到此已经写完,希望能对大家有帮助。VNC对于远程调用图形化界面来说非常的轻巧和便捷,善用之!




Linux系统VNC配置