1使用VNC的优势
在使用VNC进行远程连接之前,我们尝试过使用windows自带的远程连接程序mstsc.exe。mstsc.exe由于是windows自带,所以当连接双方均是windows时,不需要使用任何的第三方工具,只要进行正确的设置,即可进行远程连接。但使用mstsc.exe程序存在很多的不足,主要是如下几个方面:
⑴连接的双方必须都是windows系统。
⑵mstsc.exe是不开源的程序。
⑶使用mstsc.exe要进行比较复杂的防火墙、杀毒软件等的设置。
⑷当有用户远程连接了一台电脑后,被连接的电脑将被挤出登陆。这样被连接方,不能看到远程连接用户对自己的电脑做了什么。
而对于我们设计的系统而言,它的不足体现在下面的几个方面:
⑴无法看到domU的开机画面和关机画面,因为mstsc.exe只有在domU开机后才能运行,关机前会关闭。
⑵使用mstsc.exe会使我们的服务器端的代理程序变得复杂,因为必须另写程序通知代理程序domU已经开机完毕。
对于以上的这些问题。使用VNC进行远程连接,均可解决。具体而言,vnc的优势如下:
⑴VNC通用性强,几乎可运行在所有的操作系统上,无论是windows,linux,unix,还是mac,VNC都有其对应的版本。
⑵VNC是开源可控的程序。VNC由由著名的 AT&T的欧洲研究实验室开发的,并开源了十多年,经过各方修改和发生,保证了VNC的安全性和稳定性。
⑶使用VNC不需要经过复杂的设置,被连接方打开VNCServer,并为其设置密码和端口,连接方使用VNCViewer,输入IP端口和密码后即可进行连接。
⑷画面实时同步显示,双方可同时对电脑进行操作,可以看到对方对电脑做了什么,任何时候,任一方均可断开连接。
⑸VNC自带了数据的传输加密功能,不过该功能我们的系统没有用到,我们使用的是我们自己的代理程序进行的可控的传输加密。
对于我们的系统,我们使用VNC可以得到如下的好处:
⑴客户端可以看到domU的开机画面和关机画面。
⑵使服务器的代理程序变得简单,只要连接建立后,就进行加密转发,而不再需要判断domU是否开启完毕。
⑶domU可以安装任何的操作系统,而不仅限于windows,我们的程序都不需要做任何的更改。做到了domU操作系统无关性。
2 VNC使用方法及其配置
VNC按功能分成两类,VNCServer和VNCViewer,使用时被连接方打开VNCServer并为其设置端口的密码,连接方打开VNCViewer输入正确的IP、端口和密码后即可建立连接。
由于Xen集成了VNCServer的功能,它为VNC提供了相应的接口,这里我们将其命名为XenVNC。要想使用VNCViewer连接XenVNC我们只需要对Xen及其相应domU的配置文件进行修改即可。
在相应domU配置文件中加入如下的两句话:
vnc=1
vfb= ['type=vnc,vncdisplay=95,vnclisten=0.0.0.0']
在这里我们设置连接domU时使用的端口号为95,由于XenVNC是从5900开
始的,所以远程连接时,VNCViewer实际要使用5995端口。这里我们没有设置密码,使用下面的语句可为其设置密码123456:
vfb= ['type=vnc,vncdisplay=95,vncpasswd=123456,vnclisten=0.0.0.0']
要想使用Xen的VNC功能,必须修改Xen的配置文件使其支持VNC。
使用命令:vim /etc/xen/xend-config.sxp打开该配置文件,也可以使用其它编辑器。
找到下面三行,修改或取消其解释(删掉该行前面的‘#’),也可以直接在其中加入下面两行:
(vnc-listen '0.0.0.0')
(vnc-passwd 'goodluck')
修改保存退出后,重启xen服务即可生效,重启使用命令:
service xend start
这里我们设置'0.0.0.0'表示,任何IP的VNCViewer都可连接domU,如果domU没有设置密码,使用默认密码'goodluck'。
服务器完成这些设置后,则可以进行远程连接了。VNC的版本有很多,经过多次测试,最终选择tightVNV进行远程连接。连接方打开VNCViewer,单击选项后,设置首远编码为RAW,输入正确的IP和端口(在上面的配置文件中应该是IP:5995)后,若有密码会提示输入。都输入正确后,远程连接就建立了。
最后附上一个我能够使用的配置文件的例子:
import os, re
arch = os.uname()[4]
if re.search('64', arch):
arch_libdir = 'lib'
# arch_libdir = 'lib64'
else:
arch_libdir = 'lib'
kernel = '/usr/'+ arch_libdir +'/xen/boot/hvmloader'
builder='hvm'
memory=512
shadow_memory = 8
name="test_program"
vif = ['bridge=virbr0']
#vif = [ 'mac=00:16:36:60:56:30,ip=192.168.122.6' ]
dhcp="off"
disk = [
'tap:aio:/home/xen/images/test_program.img,hda,w'
]
boot = "c"
#boot = "dc"
device_model = '/usr/' + arch_libdir + '/xen/bin/qemu-dm'
vnc=1
vfb = [ 'type=vnc,vncdisplay=90,vncpasswd=123456' ]
#vnc=1
#vncviewer=0
#vncunused=1
#vncpasswd='123456'
#vnclisten='0.0.0.0'
#vncdisplay=90
serial='pty'
sdl=1
usb=1
usbdevice='tablet'