VNC概述

VNC (Virtual Network Console)是虚拟网络控制台的缩写。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/

TightVNC官方网址:  http://www.tightvnc.com/

 TigerVNC官方网址http://tigervnc.org         TigerVNC最初基于TightVNC的(从未发布的)VNC 4分支

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

VNC安装配置

安装相应桌面环境与vnc服务端和客户端:
# yum groupinstall "GNOME Desktop
Environment"(CentOS 5.x安装GNOME桌面环境)
# yum groupinstall "X Window System"
"Desktop"(CentOS 6.x安装GNOME桌面环境)
# yum groupinstall Xfce(CentOS安装Xfce桌面环境,可选)
# yum install vnc-server vnc* (CentOS 5.x里)
# yum install tigervnc-server tigervnc (CentOS 6.x里)
说明:Xfce与KDE,Gnome都是图形桌面环境,其特点是占用资源更小资源占用情况大致为:Gnome>KDE>Xfce。具体情况与版本有关。一般版本越新,资源占用越大。

1.确认VNC是否安装
默认情况下,CentOS Linux安装程序会将VNC服务安装在系统上。
确认是否已经安装VNC服务及查看安装的VNC版本
[root@ localhost ~]# rpm -q vnc-server
vnc-server-4.1.2-9.el5
[root@ localhost ~]#
若系统没有安装,可以到操作系统安装盘的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

也可以连网直接用yum源安装。

2.启动VNC服务
使用vncserver命令启动VNC服务,命令格式为“vncserver :桌面号”,其中“桌面号”用“数字”的方式表示,每个用户连接需要占用1个桌面
启动编号为1的桌面示例如下

=======================================================================

[root@ localhost ~]#
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

=======================================================================

命令执行的过程中,是在root用户提示符下执行同时也是第一次执行,会在此用户的主目录(/root/)下生成.vnc子目录和相应的配置文件,同时需要输入密码(vncviewer端用此用户访问的密码),这个密码被加密保存在此用户主目录下的.vnc子目录(/root/.vnc/passwd)中;同时在用户主目录下的.vnc子目录中为用户自动建立xstartup配置文件(/root/.vnc/xstartup),在每次启动VND服务时,都会读取该文件中的配置信息。上面的是添加root用户通过VNC访问权限,如果想添加其他用户访问权限,需要在相应的用户命令提示符下进行上面的操作(如test用户也需要执行[test@ localhost ~]$ vncserver :1   在相应的主目录下生成对应的.vnc子目录)。对不同用户的访问密码更改也需要在相应的命令提示符下操作。
在/root/.vnc/目录下还有一个“root: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@ localhost ~]# iptables -I INPUT -p tcp --dport 5901 -j ACCEPT
[root@ localhost ~]# iptables -I INPUT -p tcp --dport 5801 -j ACCEPT

==========================================================================

4.测试VNC服务
第一种方法是使用VNC Viewer软件登陆测试,操作流程如下
启动VNC Viewer软件 --> Server输入“192.168.1.100:1” --> 点击“OK” --> Password输入登陆密码 --> 点击“OK”登陆到X-Window图形桌面环境 --> 测试成功
第二种方法是使用Web浏览器(如Firefox,IE,Safari)登陆测试,操作流程如下
地址栏输入192.168.1.100:1: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中对其进行修改(需要登录的每个用户主目录下的.vnc/xstartup文件都要修改),先看一下这个配置文件。

==========================================================================
[root@ localhost ~]# 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文件中下面两行的注释,就是删除行前面的“#”的符号。

# unset
SESSION_MANAGER
# exec /etc/X11/xinit/xinitrc

这个xstartup文件的最后一行twm
& 前面加“#” 注释”, 在新建一行添加gnome-session &  ,重新启动vncserver服务后就可以登陆到GNOME桌面环境。

这个xstartup文件的最后一行twm
& 前面加“#” 注释”, 在新建一行添加startkde &  ,重新启动vncserver服务后就可以登陆到KDE桌面环境 。                            
重新启动vncserver服务的方法:

==========================================================================[[root@
localhost ~]# vncserver -kill :1
[root@ localhost ~]# vncserver :1

==========================================================================

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

修改/etc/sysconfig/vncservers文件,未经修改的vncservers文件如下所示:

===========================================================

[root@localhost ~]#
more /etc/sysconfig/vncservers

# The VNCSERVERS
variable is a list of display:user pairs.

#

# Uncomment the lines
below to start a VNC server on display :2

# as my 'myusername'
(adjust this to your own).  You will also

# need to set a VNC
password; run 'man vncpasswd' to see how

# to do that.

#

# DO NOT RUN THIS
SERVICE if your local area network is

# untrusted!  For
a secure way of using VNC, see

# <URL:http://www.uk.research.att.com/archive/vnc/sshvnc.html>.

# Use "-nolisten
tcp" to prevent X connections to your VNC server via TCP.

# Use
"-nohttpd" to prevent web-based VNC clients connecting.

# Use
"-localhost" to prevent remote VNC clients connecting except when

# doing so through a
secure tunnel.  See the "-via" option in the

# `man vncviewer'
manual page.

#
VNCSERVERS="2:myusername"

#
VNCSERVERARGS[2]="-geometry 800x600 -nolisten tcp -nohttpd
-localhost"

===========================================================

将最后两行配置信息取消注释。

VNCSERVERS="2:myusername"

上面这行添加两个用户,可以添加多个用户中间用空格隔开,如下:

VNCSERVERS="1:root  2:test"

VNCSERVERARGS[2]="-geometry 800x600
-nolisten tcp -nohttpd -localhost"

上面这行是每个用户的配置参数,用户和用户参数要一一对应,修个成如下参数:

VNCSERVERARGS[1]="-geometry
1024x768 "

VNCSERVERARGS[2]="-geometry
1024x768 "

关于参数配置说明:
1)、VNCSERVERS 是用来设定可以使用VNC的服务器账号,可以设定多个,这里的“用户名”是指linux系统用户的名称(root用户和普通用户),例如上面root、test,但是中间要用空格隔开。使用VNCVIEWER登录时,192.168.1.100:1表示是以root账号登录,以此类推。
2)、注意前面的数字“1”或是“2”为桌面号,每个用户可以有多个桌面号,但是每个桌面号只能属于一个用户,当你要从其它电脑用VNC访问服务器时,就需要用IP:1这种方法,而不能直接用IP。如假定你的VNC服务器IP是192.168.1.100,那想进入VNC服务器,并以test用户登录时,需要在vncviewer里输入IP的地方输入:192.168.1.100:2 (2对应的就是test用户),如果是root,那就是192.168.1.100:1 (1对应的就是root用户);
3)、下面两行[1][2]最好与上面那个相对应,后面的800X600可以换成你电脑支持的分辨率。注意中间的”x”不是“*”,而是小写字母”x”。

4):-geometry 表示远程桌面分辨率,默认为800x600,根据vncviewer所在电脑的分辨率设置。

5):-nohttpd  表示不监听HTTP端口(58xx),这个在参数里面去掉不加影响效果。

6):-nolisten tcp 表示不监听TCP端口(60xx),这个在参数里去掉不加影响效果。

7):-localhost 只运行从本机访问,这个在参数里去掉不加,加了远程登录不了。

8):AlwaysShared 默认只允许一个VNCVIEWER连接,此参数表示同一个显示端口允许多用户同时登录.

9):-depth  表示色深,参数有8,16,24,32. 可以不加。

7): SecurityTypes None 登录不需要密码认证VncAuth默认值,要密码认证。

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

==========================================================================
[root@ localhost ~]# vncpasswd
Password:                                                  
    #输入密码
Verify:                                                          
#确认密码
[root@ localhost ~]#

8.启动和停止VNC服务
1)启动VNC服务命令
[root@ localhost ~]# service vncserver start

2)停止VNC服务命令
[root@ localhost ~]# service vncserver stop

3)重新启动VNC服务命令
[root@ localhost ~]# service vncserver restart

9设置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

10、可能遇到的问题:

1)、黑屏
在Linux里安装配置完VNC服务端,发现多用户登陆会出现黑屏的情况,具体的现象为:
客户端可以通过IP与会话号登陆进入系统,但登陆进去是漆黑一片,除了一个叉形的鼠标以外,伸手不见五指。

原因:用户的VNC的启动文件权限未设置正确。
解决方法:将黑屏用户的xstartup(一般为:/用户目录/.vnc/xstartup)文件的属性修改为755(rwxr-xr-x)。
完后杀掉所有已经启动的VNC客户端:
vncserver -kill :1
vncserver -kill :2 (注意:-kill与:1或:2中间有一空格)
最后重启vncserver服务即可! # service vncserver
restart

注意:vncserver只能由启动它的用户来关闭,即时是root也不能关闭其它用户开启的vncserver,
除非用kill命令暴力杀死进程。

2)、Windown下如何登陆VNC Server
a从浏览器登录(浏览器需要安装JAVA支持库,作为java
applet来实现,才能登录控制VNC服务器,可以yum
install java*安装)
直接从浏览器中输入如下地址:
http://xxx.xxx.xxx.xxx:5801

b从VNC客户端登录
在windows上安装vnc客户端,然后输入xxx.xxx.xxx.xxx:x,连接登录。

备注:
输入的格式为IP:桌面号,桌面号要看你自己的配置而定。如192.168.80.128:1
登陆提示connection refused(10061),则是因为linux防火墙的问题,请检查防火墙设置。
后面的尾缀”:x”也是不能少的,要不然老提示failed to
connect : connection refused (10061)
11.小结
  VNC的详细配置方法到此已经写完,都是在网上搜索的加自己的实践。VNC对于远程调用图形化界面来说非常的轻巧和便捷!

VNC CentOS Linux下VNC Server远程桌面配置详解的更多相关文章

  1. CentOS6.5下VNC Server远程桌面配置详解

    参考文献: (总结)CentOS Linux下VNC Server远程桌面配置详解 远程桌面连接工具VNC——license Key 我的下载地址为 太平洋下载 VNC连接黑屏的问题 centos 6 ...

  2. (总结)CentOS Linux下VNC Server远程桌面配置详解

    一.安装相应桌面环境与vnc服务端和客户端: # yum groupinstall "GNOME Desktop Environment"(CentOS 5.x安装GNOME桌面环 ...

  3. CentOS Linux下VNC Server远程桌面配置详解

    http://www.ha97.com/4634.html PS:偶以前基本不用Linux的远程图形桌面,前几天有开发的同事配置CentOS的vnc有问题,找我解决,就顺便记录总结一下,这个总结是比较 ...

  4. Windows server 2008 R2 多用户远程桌面配置详解(超过两个用户)

    转至:https://www.jb51.net/article/139542.htm 注意:一下是针对win2008  server r2的操作 1. 创建三个本地管理员测试用户 user01 use ...

  5. CentOS 7下Samba服务安装与配置详解

    1. Samba简介 Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成.SMB(Server Messages Block,信息服务块)是一种在局域网上共 ...

  6. Linux实现利用SSH远程登录服务器详解

    Linux实现利用SSH远程登录服务器详解 http://www.111cn.net/sys/linux/55152.htm

  7. Linux NFS服务器的安装与配置详解

    一.NFS服务简介 NFS是Network File System(网络文件系统).主要功能是通过网络让不同的服务器之间可以共享文件或者目录.NFS客户端一般是应用服务器(比如web,负载均衡等),可 ...

  8. Debian9.5 VNC Server远程桌面配置

    VNC概述 VNC (Virtual Network Console)是虚拟网络控制台的缩写.VNC 是一款优秀的远程控制工具软件,由著名的 AT&T 的欧洲研究实验室开发的.VNC 是在基于 ...

  9. centOS下NFS服务器的安装配置详解

    一.NFS简介 NFS就是Network FileSystem的缩写,最早之前是由Sun公司所发展出来的.他最大的功能就是可以透过网络,让不同的机器.不同的操作系统可以彼此分享个别档案(share f ...

随机推荐

  1. Redis加入Centos Linux开机启动

    Redis加入Centos Linux开机启动 网上有很多redis在linux下自动启动的例子,实现的方式很多,很多都是参考一个老外流传出来启动的例子,其实直接使用是不行,而且有很多地方有一些语法错 ...

  2. 你必须了解的RecyclerView的五大开源项目-解决上拉加载、下拉刷新和添加Header、Footer等问题

    前段时间做项目由于采用的MD设计,所以必须要使用RecyclerView全面代替ListView.但是开发中遇到了需要实现RecyclerView上拉加载.下拉刷新和添加Header以及Footer等 ...

  3. mysql-面试题目1

    一.数据库的ACID 原子性(Atomicity):保证事务中的所有操作全部执行或全部不执行. 一致性(Consistency):保证数据库始终保持数据的一致性——事务操作之前和之后都是一致的. 隔离 ...

  4. Node.js能够做什么?

    正如 JavaScript 为client而生.Node.js 为网络而生.Node.js 能做的远不止开发一个网 站那么简单,使用 Node.js,你能够轻松地开发:  具有复杂逻辑的站点:  ...

  5. HNU13377:Book Club(DFS)

    Problem description Porto's book club is buzzing with excitement for the annual book exchange event! ...

  6. legend---八、php对象如何转换成js对象

    legend---八.php对象如何转换成js对象 一.总结 一句话总结:a.直接转换:b.通过json对象做中间桥梁 1.为什么传递给父亲构造函数的参数不能写默认值? 这里的第三行的比如$type不 ...

  7. Idea的一些调试技巧及设置todo

    程序员的工作内容,除了大部分时间写代码之外,因为有不少的时间是用在调试代码上.甚至说不是在调试代码,就是即将调试代码. :) 今天我们来谈谈调试代码的一些技巧,在使用IDE提供的debugger时一些 ...

  8. BZOJ 1174: [Balkan2007]Toponyms

    Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 735  Solved: 102[Submit][Status][Discuss] Descriptio ...

  9. java 8 , merge()

    import java.util.HashMap; import java.util.Map; public class j8merge { public static void main(Strin ...

  10. lhgDialog使用--loading提示(不自动关闭)

    使用lhgDialog时,发现有一个$.dialog.tips()方法可以实现loading样式的提示,但是存在默认关闭时间.方法如下图所示, 为了实现不自动关闭的方法,查看了相应的源码后,实现不关闭 ...