VNC
		简介』
		
				
		
		网络遥控技术是指由一部计算机(主控端)去控制另一部计算机(被控端),而且当主控端在控制端时,就如同用户亲自坐在被控端前操作一样,可以执行被控端的应用程序,及使用被控端的系统资源。
		
				
 VNC
		(
		Virtual Network Computing
		)是一套由
		AT&T
		实验室所开发的可操控远程的计算机的软件,其采用了
		GPL
		授权条款,任何人都可免费取得该软件。
		VNC
		软件主要由两个部分组成:
		VNC server
		及
		VNC viewer
		。用户需先将
		VNC server
		安装在被控端的计算机上后,才能在主控端执行
		VNC viewer
		控制被控端。
		
				
		
		(在
		windows
		中也由一套著名的网络遥控软件
		――Symantec
		公司推出的
		pcAnywhere
		。
		
				
 VNC server
		与
		VNC viewer
		支持多种操作系统,如
		Unix
		系列(
		Unix
		,
		Linux
		,
		Solaris
		等),
		windows
		及
		MacOS
		,因此可将
		VNC server 
		及
		VNC viewer
		分别安装在不同的操作系统中进行控制。如果目前操作的主控端计算机没有安装
		VNC viewer
		,也可以通过一般的网页浏览器来控制被控端。
		
				
		
		整个
		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
		的桌面环境及输入装置。
		
				
						
								『
								VNC
								的安装与使用』
								
										
								
								本人的操作环境:被控端
								 Redhat9.0
								,主控端
								Windows XP
								。
								
										
 1
								.
								
								
								载
								VNC Server
 VNC Server
								下载地址:
								http://gwbn.onlinedown.net/soft/1271.htm
						
				
		
		
				
						
								2
								.安装。
								
										
 vnc-3.3.7-x86_linux.tar.gz (
								如果是源代码请看包里的说明
								)
								,
								当下载了
								VNC
								的
								Linux
								版本后,可以解压文件到一个文件夹中,例如
								/home/vnc
								,然后复制文件
								vncserver
								、
								 vncpasswd
								和
								Xvnc
								到
								/usr/bin
								目录中。假如想要能够通过
								VNC
								服务器的整合
								Java
								界面远程控制
								Linux
								电脑,也得需去建立一个子目录
								/usr/local/vnc/classes
								。在建立此子目录之后,复制
								VNCJava.class
								文件到此目录中。(一般
								redhat 9.0
								自带以上文件,所以直接用终端执行就可以)。
								
										
 3.
								在
								Linux
								上启动
								VNC Server
								执行
								vncserver
								命令:
								
										
 [root@linux root]# vncserver
 You will require a password to access your desktops.
 Password:                       ----
								为了不想任何人都可以任意遥控此计算机。因此当第
								
										
 Verify:                          ---1
								次启动
								VNC server
								时,会要求设置网络遥控的密码。
								
										
 New ‘X’ desktop is linux:1         ----
								一定要记住这一行稍后会用到。
								
										
 Creating default startup script /root/.vnc/xstartup
 Starting applications specified in /root/.vnc/xstartup
 Log file is /root/.vnc/linux:1.log
								(经上述步骤后,便已启动了
								VNC Server
								。如果你想要更改
								VNC Server
								的密码,只要执行
								vncpasswd
								命令即可。)
								
								
						
				
		
		
				
						
								5. 
								从浏览器远程遥控。
								
										
								
								启动
								VNC Server 
								后直接打开浏览器,在地址栏中输入被控端的网址或
								IP
								地址,并在网址后加上
								“
								:
								5800
								+显示编号
								”
								的端口号即可操控该计算机。
								
										
								
								例如:
								http://192.168.01.:5801 (
								如果显示编号为
								1
								,一般第一次设置的显示编号都是
								1
								,就用
								5800
								+
								1
								=
								5801
								。
								) 
						
				
		
		
				
						
								
										 
								
						
				
		
		
				
						
								如果看到窗口,就说明你成功,在密码框输入密码,就能远程控制了。
						
				
		
		
				
						
								
										
												6
												.
												FAQ 
										
								
						
				
		
		
				
						
								
										A.  如何以图形界面登录被控端?
								
						
				
		
		
				
						
								
										编辑~/.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" &
 gnome-session &
 startkde &
 twm &
								
						
				
		
		
				
						
								
										gnome-session是启动Gnome图形界面;startkde是启动KDE图形界面;twm是启动文本界面。三者选其一。
								
						
				
		
		
				
						
								
										A. 如何开机时自动启动vnc服务
								
						
				
		
		
				
						
								
										打开“系统设置”-->"服务器设置"-->"服务",勾选上vncserver,“保存”。
								
						
				
		
		
				
						
								
										修改 /etc/sysconfig/vncservers
								
						
				
		
		
				
						
								
										VNCSERVERS="1:root  2:phred 3:sysadmin"    1代表“桌面1”,root代表用户名;可同时启动多个用户桌面
 VNCSERVERARGS[1]="-geometry 800x600 -alwaysshared -depth 24"
								
						
				
		
		
				
						
								
										-alwaysshared代表允许多用户同时登录 -depth代为色深,参数有8,16,24,32。
								
						
				
		
		
				
						
								
										
												
														
 A
												.为什么连接后,不能显示桌面,而只有一个
												Terminal
												窗口?
												
														
												
												试着修改
												/root/.vnc/xstartup,
												把最后一行
												 twm& 
												改成
												 gnome-session& or  kde&(
												据说
												KDE
												在目前的
												VNC Viewer
												上的表现不太稳定
												)
										
								
						
				
		
		
				
						
								
										
												B
												.
												
												
												为什么重新启动
												VNC Server
												后,连接不上了?
												
														
												
												因为重新启动
												VNC Server
												时,系统会指定一个新的显示编号,需使用此新的编号,否则就无法连接
										
								
						
				
		
		
				
						
								
										
												
										
								
						
				
		
		
				
						
								
										查看vnc已启用的桌面号及监听进程
								
						
				
		
		
				
						
								
										[root@linux /]# netstat -tlnp |grep vnc
								
						
				
		
		
				
						
								
										vncserver 命令带有一些很有用的参数,用vncserver --help 查看。
 简单解释一下:
 vncserver [:] [-name ] [-geometry x] [-depth ]
 [-pixelformat format]
 vncserver -kill :display
								
						
				
		
		
				
						
								
										:
 vnc服务的display号,可以自行指定,尽量不要使用系统默认的以保证安全,必须为非0的正整数
 vncserver :99
 使用时必须输入正确的display号才能连接;用浏览器要在端口号加上display号,默认端口5800,远程连接输入 XXX.XXX.XXX.XXX:5899
								
						
				
		
		
				
						
								
										-name 指定vncserver桌面名字
 比如要让名字显示为 “红帽”
 vncserver -name 红帽
								
						
				
		
		
				
						
								
										-geometry x指定显示桌面的分辨率,默认为1024x768
 vncserver -geometry 800x600
 这个命令实际中很有用,例如本地分辨率为1024x768 如果不设定远程vnc服务分辨率就会造成桌面显示不全的问题。
								
						
				
		
		
				
						
								
										-depth 指定显示颜色,设定范围8~32
 vncserver -depth 16
 用16bits颜色显示
								
						
				
		
		
				
						
								
										-pixelformat 指定色素格式 与-depth大致相同,只是表示方法不一样
 vncserver -pixelformat RGB888
 用24bits颜色显示
								
						
				
		
		
				
						
								
										vncserver -kill :display
 结束vnc服务及远程桌面
 vncserver -kill :1
 其它更详细的使用请用man查看。
								
						
				
		
		
				
						
								
										vnc内定的窗口管理器是twm与大家使用的可能不同,通过修改vnc的配置文件可以更换为自己喜欢的,方法如下:
 修改用户目录下的 .vnc/xstartup 文件
 #!/bin/sh
 [ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
 xsetroot -solid grey
 vncconfig -iconic &
 xterm -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" &
 twm &
 将#!/bin/sh后面的内容全部注释掉,改成
 ~/.Xclients
 保存文件
 现在可以测试修改是否成功,先kill vncserver服务
 vncserver -kill :
 或
 pa aux|grep Xvnc
 kill PID
 重新启动vncserver ,用vncviewer连接远程桌面是不是已经变成自己喜欢的类型了。
								
						
				
		
		
				
						
								在
前面有vnc server 设置的文章(http:
//bbs.chinaunix.net/forum/viewtopic.php?t=368552&highlight=yunqing)
里,
我们已经可以在一个linux的服务器上运行vncserver来进行远程访问了,但需要注意的是,如果直接使用vncviewer来进行访问,有
两点不利因素:
 1. 口令传输是明文,很容易被侦听到.
 2. 防火墙需要打开59xx端口,这在通常的单位里是不可能的.
 幸运的是,我们有ssh这个强大的工具,象X11 Forwarding(另文论述),我们可以使用ssh隧道来保护通讯过程,下面就进行简单介绍.
						
				
		
		
				
						
								假设vncserver运行在服务器 myserver (ip地址为:192.168.x.x)的屏幕1,也就是侦听 192.168.x.x:5901, 用户名为foo
						
				
		
		
				
						
								
										情形一: vnc客户端为linux
										
 这种情形很简单,一般的linux发行版本里面都默认安装了ssh套件.
 1. 用ssh登录到服务器
						
				
		
		
				
						
								ssh -L 5901:localhost:5901 -l foo myserver
						
				
		
		
				
						
								或者直接用ip地址
						
				
		
		
				
						
								ssh -L 5901:localhost:5901 -l foo 192.168.x.x
						
				
		
		
				
						
								2. 在本机的另外开的终端上,运行vncviewer (或其它的类似工具)
 vncviewer localhost:1
						
				
		
		
				
						
								
										情形二: vnc客户端为windows
										
 1. 下载一个ssh客户端,个人推荐putty,只有一个程序,不需要安装,简单而功能齐全. 到这里下载http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html
 下载putty.exe到桌面上直接运行即可。
 2. 运行putty,输入服务器的ip地址,输入一个名字,这里myserver作为session的名字,按save保存。见附图一
 3. 单击对话框左边的tunnels来选择相关设置,在source port里输入5901,在Destination里输入localhost:5901,按Add添加,如附图二
 4. 单击左边session,回到session设置,按save重新保存。按open即可登录到服务器。
5. 运行vnc-viewer (如果没有,到这里下载http://www.realvnc.com/download.html,只要一个
exe的文件就行),在Server里输入localhost:1,见附图三,
输入口令后一个linux的桌面就会出现在windows里,并且是非常 安全的,Cool?