一、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


WARNING: The first attempt to start Xvnc failed, possibly because the font
catalog is not properly configured.  Attempting to determine an appropriate
font path for this system and restart Xvnc using that font path ...
Could not start Xvnc.

/usr/bin/Xvnc: symbol lookup error: /usr/bin/Xvnc: undefined symbol: pixman_composite_trapezoids
/usr/bin/Xvnc: symbol lookup error: /usr/bin/Xvnc: undefined symbol: pixman_composite_trapezoids


解决方法:

yum install pixman pixman-devel libXfont


[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:桌面号
RHEL 6.2安装及配置VNC服务器_服务器RHEL 6.2安装及配置VNC服务器_安装_02
linux客户端下可以用vncviewer命令连接,连接格式:IP:桌面号
RHEL 6.2安装及配置VNC服务器_服务器_03
RHEL 6.2安装及配置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的地址即可。
RHEL 6.2安装及配置VNC服务器_服务器_05RHEL 6.2安装及配置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"

  当需要多个客户机以同一用户登录服务器时,可以在客户机vncviewer里设置,也可以在服务器的配置文件中设置,具体如下:

   VNCSERVERARGS[1]="-geometry 800x600 -nolisten tcp -AlwaysShared"

    如果启用多用户,第18行,可以直接空格再继续同格式的跟在后面,但是第19行的[2],一定要改成第18行启用的用户数加上1,比如上面两个用户,就要 写成3,。不然的话,vncserver重启后,最后一个用户的vnc桌面不可用,但是如果以上用户又启用了其他桌面但没写进这个文件,不受影响。具体原 因,我也不理解。

3、web访问
  网上都说vnc可以启用web界面,但是,我没做成,希望有高手指点。

4、声明
  由于在网上找了好久没有找到关于VNC共享桌面的资料,于是自己花点时间琢磨了一下,以上都是本人通过有道词典翻译的man手册页,然后经过多次试验得出的结论,有些观点或许跟官方不一致,仅供参考。E文好的去官网吧。