一、VNC简单介绍:
1、简介
       VNC (Virtual Network Computing)是虚拟网络计算机的缩写。VNC是一款优秀的远程控制工具软件,由著名的AT&T的欧洲研究实验室开发的。VNC是在基于UNIX和Linux操作系统的免费的开放源码软件,远程控制能力强大,高效实用。 其性能可以和Windows和MAC中的任何远程控制软件媲美。
 ——百度百科
ps:Symantec的pcAnywhere也是优秀的远程软件,windows环境下的。
 
2、vnc工作流程:
 (1)VNC客户端通过浏览器或VNC Viewer连接至VNC Server。
    (2)VNC Server传送一对话窗口至客户端,要求输入连接密码,以及存取的VNC Server显示装置。
    (3)在客户端输入联机密码后,VNC Server验证客户端是否具有存取权限。
    (4)若是客户端通过VNC Server的验证,客户端即要求VNC Server显示桌面环境。
    (5)VNC Server通过X Protocol 要求X Server将画面显示控制权交由VNC Server负责。
    (6) VNC Server将来由 X Server的桌面环境利用VNC通信协议送至客户端,并且允许客户端控制VNC Server的桌面环境及输入装置。
 
3、linux下的vnc安装(RHEL6.2):
RHEL6.2中的相关rpm是:
客户端:tigervnc-1.0.90-0.17.20110314svn4359.el6.x86_64.rpm
服务端:tigervnc-server-1.0.90-0.17.20110314svn4359.el6.x86_64.rpm
安装: 
yum install tigervnc
yum install tigervnc-server
  

二、VNC服务搭建:
1、启用vnc桌面
 
[xuke@RHEL6 ~]$ vncserver

You will require a password to access your desktops.

Password:
Verify:
xauth:    creating new authority file /home/xuke/.Xauthority
xauth: (stdin):1:    bad display name "RHEL6:3" in "add" command

New 'RHEL6:3 (xuke)' desktop is RHEL6:3

Creating default startup script /home/xuke/.vnc/xstartup
Starting applications specified in /home/xuke/.vnc/xstartup
Log file is /home/xuke/.vnc/RHEL6:3.log

[xuke@RHEL6 ~]$
 
 
 
2、更改vnc桌面配置文件
 
[xuke@RHEL6 ~]$vim .vnc/xstartup
    1 #!/bin/sh
    2    
    3 [ -r /etc/sysconfig/i18n ] && . /etc/sysconfig/i18n
    4 export LANG
    5 export SYSFONT
    6 vncconfig -iconic &
    7 unset SESSION_MANAGER
    8 unset DBUS_SESSION_BUS_ADDRESS
    ……
    ……
20 if [ -x /etc/X11/xinit/xinitrc ]; then
21     exec /etc/X11/xinit/xinitrc
22 fi
23 if [ -f /etc/X11/xinit/xinitrc ]; then
24     exec sh /etc/X11/xinit/xinitrc
25 fi
26 [ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
27 xsetroot -solid grey
28 xterm -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" &
29 #twm &
30 gnome-session &                                        
   第7行和第21或24行在红帽5版本中默认是被注释掉的,要启用;最后一个gnome-session &是启用gnome的桌面,把默认的twm注释掉,很丑的。
 
3、修改vncserver配置文件,并重启服务
 
[xuke@RHEL6 ~]$su root
Password:

[root@RHEL6 xuke]#vim /etc/sysconfig/vncservers
……        
17    
18    VNCSERVERS="1:root 2:xuke"
19    VNCSERVERARGS[3]="-geometry 800x600 -nolisten tcp -localhost"
[root@RHEL6 xuke]#service vncserver restart
第18、19行要启用。
 
4、vnc客户端连接
windows客户端安装VNC Viewer这个程序可以连接,连接格式:IP:桌面号
VNC服务_vncVNC服务_vnc_02
linux客户端下可以用vncviewer命令连接,连接格式:IP:桌面号
VNC服务_vnc_03
VNC服务_vnc_04
 

三、VNC共享桌面配置
1、构建可用的vncserver
   参照第二部分,首先搭建好可用访问的vncserver
2、发布共享的桌面
 
[xuke@RHEL6 ~]$ x0vncserver --PasswordFile=/home/xuke/.vnc/passwd  --display=:1 --AcceptKeyEvents=off --AcceptPointerEvents=off &
[1] 5101
[xuke@RHEL6 ~]$    
Mon Jul    9 18:06:05 2012
Geometry:        Desktop geometry is set to 1024x768+0+0
Main:                XTest extension present - version 2.2
Main:                Listening on port 5900

[xuke@RHEL6 ~]$
x0vncserver 共享vnc桌面命令
--display=:1 指定共享的桌面号
--PasswordFile指定客户端密码验证文件,除非指定--SecurityTypes=None
--AcceptKeyEvents 是否接受来自客户端的按键和释放事件
--AcceptPointerEvents 是否接受来自客户端的指针事件
 
3、客户端连接共享
  此时客户端就可以通过vncviewer连接到共享的桌面了。但是,连接时,不要加桌面号,只用输入VNCserver的地址即可。
 VNC服务_vnc_05VNC服务_vnc_06
 
 
四、VNC相关常用命令
1、启用vnc桌面
vncserver
   普通用户也有权限启用vnc桌面,上面就是特意拿普通账号举的例子。
   如果命令后面不跟桌面号(:1),默认从1开始依次往后排。如果桌面号1已经被tom启用,那么下次root将缺省启用桌面2,如果4、5都已经被启用,但是2被关闭,那下次将先启用2,再往后排。 启用的VNC桌面占用端口号为port=(5900+桌面号)
   选项:  -list 列出当前用户所有VNC桌面号及PROCESS ID
           -kill <X-display>关闭指定的桌面号
 
2、更改vnc密码
vncpasswd
   vncserver服务程序没有设置密码将不能运行
   用户第一次启用VNC桌面时会被要求输入密码
   更改当前用户的VNC密码
   生成密码文件,vncpasswd [file]
 
3、配置和控制vnc服务器
vncconfig
   启用客户端与服务器之间的剪切板支持,红帽6版本~/.vnc/xstartup文件中有vncconfig -iconic &语句,已经启用。
   vncconfig --display=:1 -disconnect断开现在所有的连接
   vncconfig --display=:1 -connect host:[port] 反向监听vncviewer
 
4、客户端访问
viewer
   linux下访问vncserver的命令,格式为:ip:x,其中x为桌面号。
   访问共享的桌面时,不需要桌面号
 
 

五、FAQ
1、端口号问题
   x0vncserver共享桌面的端口号是5900。做实验时,RHEL6中的qemu-kvm把5900的端口占用了,所以一直启用不了共享。杀掉qemu-kvm就OK了。
  由于x0vncserver就用5900这个端口,所以一台服务器只能有一个共享桌面,第一个启用的生效。
 
2、多用户问题
   /etc/sysconfig/vncservers文件中: 
 
18    VNCSERVERS="1:root 2:xuke"
19    VNCSERVERARGS[3]="-geometry 800x600 -nolisten tcp -localhost"
   如果启用多用户,第18行,可以直接空格再继续同格式的跟在后面,但是第19行的[2],一定要改成第18行启用的用户数加上1,比如上面两个用户,就要写成3,。不然的话,vncserver重启后,最后一个用户的vnc桌面不可用,但是如果以上用户又启用了其他桌面但没写进这个文件,不受影响。具体原因,我也不理解。
 
3、web访问
   网上都说vnc可以启用web界面,但是,我没做成,希望有高手指点。
 
4、声明
   由于在网上找了好久没有找到关于VNC共享桌面的资料,于是自己花点时间琢磨了一下,以上都是本人通过有道词典翻译的man手册页,然后经过多次试验得出的结论,有些观点或许跟官方不一致,仅供参考。E文好的去官网吧。