CSDN博客

img bjbs_270

虚拟网络计算工具VNC使用指南

发表于2004/9/29 19:54:00  2673人阅读

分类: Linux 技术文章

 

虚拟网络计算工具VNC使用指南


作者:Jeremy Impson
编译:ideal <ideal@linuxaid.com.cn>

简介

虚拟网络计算工具(VNC,Virtual Network Computing)本质上来说是一个远程显示系统,管理员通过它不仅仅可以在运行程序的本地机上察看桌面环境,而且可以从Internet上的任何地方察看远程机器的运行情况,而且它具有跨平台的特性。

本文将讨论为Linux系统设置基于VNC的X Windows系统桌面的一个全新的方法,通过阅读本文,你将能够配置实现通过一个显示管理器登录进入X-Window桌面。更重要的是,用户能在网络任何位置通过工作站控制台安全地访问同一个桌面。

典型情况下,一个图形工作站系统运行有一个显示管理器。在本文中我们讨论的显示管理器指XDM, GDM (GNOME显示管理器)或KDM (KDE显示管理器)等应用。一个显示管理器为用户提供图形化的登录界面。当一个用户登录进入系统,显示管理器启动合适的窗口管理器(例如fvwm2, GNOME或KDE)。从窗口管理器中用户可以运行任何应用程序。当用户退出登录,应用程序被关闭,窗口管理器同样退出,显示管理器再次出现,等待再次登录。如果同一个用户重新登录,那么显示管理器启动一个新的窗口管理器,并且所有的应用必须重新启动。这就是传统的X-Window系统桌面的工作过程。我们将这样一个桌面会话称为一个X桌面。当一个用户使用工作站的键盘和监视器来使用工作站时,我们就称之为用户通过控制台登录,这是为了和通过网络登录区分。

 

图 1.一个显示管理器

在虚拟网络计算一文中我们学习了如何配置VNC以实现通过网络上的任何机器保持状态地访问一个桌面。这里“保持状态”我的意思是当一个用户没有连接到桌面时,桌面并没有终止,而是保持等待连接请求的状态。当一个用户使用VNC客户端连接到VNC服务器时,每个窗口仍然保持在上次离开时的状态,每个被打开的文件仍然保持状态。控制窗口管理器和应用程序的VNC服务器的特性保证了桌面状态的连续性。

因此,网络上的任何计算机可以运行VNC客户端(例如vncviewer)来连接到工作站来显示桌面。我们甚至可以在运行VNC服务器的工作站上运行VNC客户端。我们将这种桌面会话称为VNC桌面,我们把运行VNC服务器(和其窗口管理器)的工作站称为VNC工作站。

对于VNC桌面,有一个问题。假设你希望通过控制台登录到VNC工作站,那么这个工作站同样在运行在VNC桌面。你可能通过网络上其他机器连接登录该工作站,这时候你往往希望能继续通过网络连接VNC桌面。同时当你通过一个显示管理器登录到控制台时,你希望看到和通过VNC连接登录时看到的同样的桌面。但是如果如果你通过显示管理器登录到工作站,那么它将会启动一个新的窗口管理器。基本上来说你启动的是一个新的X桌面,它和已经运行在该工作站的VNC桌面是没有关系的。

如果你希望在一个Unix系统上连接到VNC桌面,你必须运行一个VNC客户端,例如vncviewer。这样很愚蠢,因为基于X的桌面的一个应用程序窗口(vncviewer)本身是另外一个机器上的桌面(VNC桌面)。象这样保持多级别的重定向是非常麻烦的,除了容易引起混淆,而且效率也很低下因为需要系统运行两个窗口管理器,虽然实际上应该只需要一个。

本文将讨论如何配置一个X服务器,显示管理器和一个VNC服务器,使得可以直接登录到VNC桌面,而不需要再启动一个窗口管理器,并且在离开时保持所有的文件和应用程序状态直到下次登录。

前提

我们这里讨论的情况可以应用于在任何Linux发行版中。但是需要一个可以运行的X服务器,一个显示管理器和VNC。我们可以使用下面的命令来测试前提条件:

rpm -q XFree86 vnc XFree86-xdm kdebase gdm
只要保证安装有XFree86-xdm kdebase或gdm就可以了。我们这里讨论的所有配置文件存放位置都是以redhat7.1为标准。当然可以配置任何Linux系统来使用通明VNC桌面,但是文章中讨论的配置文件可能会在不同的位置。

无论你喜欢采用任何显示管理器,它都应该在系统启动时启动。一般都是在/etc/inittab文件中配置如下内容:

x:5:respawn:/etc/X11/prefdm -nodaemon
prefdm一般都是一个指向你希望采用的显示管理器的一个符号连接。X和你喜欢的显示管理器必须保证启动和运行。

配置VNC服务器

VNC服务器同样也必须在运行,同时也要配置VNC服务器运行你喜欢的窗口管理器。这通过编辑文件$HOME/.vnc/xstartup来启动你喜欢的窗口管理器。使用startkde &来启动KDE,使用gnome-session &来启动GNOME,fvwm2 &来启动FVWM2。同时要,确保在$HOME/.vnc/passwd中启动vncpasswd 来创建密码文件。

RedHat7.1提供了一些简单的方法在系统启动时来启动VNC。使用linuxconf来设置vncserver启动脚本(/etc/init.d/vncserver)实现系统自启动时启动vncserver。但是默认的启动脚本灵活性不够,因此编辑/etc/init.d/vncserver,修改:

"su - ${display##*:} -c "cd && [ -f .vnc/passwd ]
&& vncserver :${display%%:*}""

为:

"su - ${display##*:} -c "cd && [ -f .vnc/passwd ]
&& vncserver ${ARGS} :${display%%:*}""
然后编辑/etc/sysconfig/vncservers:
# The VNCSERVERS variable is a list of
# display:user pairs.
#
# Uncomment the line below to start a VNC server on
# display :1 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/vnc/sshvnc.html>.

VNCSERVERS="1:jdimpson"
ARGS="-geometry 1024x768 -alwaysshared "
在ARGS中修改"1024x768"来适应自己的X桌面实际参数配置。可以在这里添加任何其他VNC服务器参数配置。在VNCSERVERS中修改jdimpson为你希望运行VNC桌面的用户。VNCSERVERS中的1表示VNC以桌面1运行,如果希望添加其他的桌面,可以修改配置如下:
VNCSERVERS="1:jdimpson 2:phred 3:sysadmin"
在RedHat系统上,使用以下命令启动VNC:
/etc/init.d/vncserver start
现在你就可以使用VNC任何客户端来使用VNC桌面。

配置显示管理器

在我的Red Hat 7.1系统中,我创建了名为$HOME/.xsession的文件。这个文件用来设定当通过显示管理器时应该运行哪个窗口管理器。当登录进入时,显示管理器检测这个配置文件。如果该文件存在,显示管理器将运行该文件中设定的程序。显示管理器认为该文件包含有启动用户希望的窗口管理器程序的命令。不是运行GNOME或KDE这样的窗口管理器,然而我们将运行VNC客户端。编辑$HOME/.xsession为如下:

exec vncviewer -passwd $HOME/.vnc/passwd
-fullscreen localhost:1
如果你使用的是其他的linux发行版,那么文章的说明可能同样适合你。一个快速检测的方法是在该文件中添加如下命令:
exec fvwm2
当登录到显示管理器,如果fbwm2成功启动,那么表示你成功了。如果没有成功启动,那就需要察看系统文档。

登录

登录到显示管理器的登录窗口。你将可以看到你喜欢的桌面。

当你通过显示管理器登录到服务器,它将被你选择的运行在VNC服务器的窗口管理器所替代。如果在网络中有其他的计算机,那么可以试一试使用客户端连接服务器。那么你就可能看到两个桌面。当使用一个计算机移动一个窗口,你可以看到在另外的计算机上的窗口同样在移动。

在登录到显示服务器以后,如果显示屏闪烁以后,重新出现登录界面,那么说明出现了错误。首先确保VNC服务器在运行和.xsession文件配置是正确的。

应该注意的是在设置中你不应该使用任何退出窗口管理器的登录特性。这样将终止VNC桌面,这可能不是你希望的结果。这时使用Ctrl-Alt-Backspace来杀除X服务器,显示管理器返回到屏幕。如果你重新登录,你将进入到你刚才离开的环境,因此你可以将控制台给别的用户使用,而不丢失你的桌面状态。

系统原理

当服务器启动时,它将为在文件/etc/sysconfig/vncservers中定义的每个用户运行VNC服务器。当VNC启动时将读取用户主目录的.vnc/xstartup文件,并使用它运行你希望的窗口管理器。然后VNC服务器就等待连接请求。

 

Figure 3. The Whole Process

显示管理器同样会在系统启动时启动,并且为用户提供一个图形登录界面。

对于哪些没有配置VNC服务器和没有在主目录下正确设置.xsession文件的用户来说,他们在登录进入显示管理器时将得到常见的X桌面。对于那些具有适当的配置的用户来说将会得到一个VNC桌面,  而且能够在网络上任何位置访问VNC桌面。

缺点和其他选项

这里讨论的设置具有很多长处,对于我来说主要的优势是从网络上的任何计算机访问我的桌面。而将VNC作为默认桌面的一个最主要的缺点是GUI的图形性能不够稳定。例如在VNC桌面上播放电影效果就很差。大多数的图形变换很快的游戏在VNC上运行也不是很好。同样当vnc服务器运行时,它是作为你运行的所有应用X服务器,它不可能获得任何图形加速特性,即使本机的X服务器试用了图形加速。(你可以退出登录,以其他用户身份登录到系统,播放电影或打游戏然后再退出登录;最后再以原始用户身份进入系统,你可以得到以该身份上次退出时的桌面)

该配置对于多用户应用环境来说可伸缩性不够好,你能在/etc/sysconfig/vncservers文件中定义很多VNC会话来实现在系统启动时启动。。但是所有的这些VNC桌面都会处于空闲状态直到它们被使用。对应每个VNC桌面都会有一个VNC服务器,一个窗口管理器在运行。对于GNOME和KDE还会运行有很多辅助应用。所有的这些应用都会占用内存,而且相互之间会竞争资源。对于诸如类似Citrix MetaFrame和Microsoft Terminal Server 的商业解决方案都需要有强大的计算机来支持多用户应用环境。

另外一个可选的方式是使用XDMCP,它是实现远程访问X桌面的传统方法,但是这种方法可能使你丢掉桌面状态的连续性,因为在这种方式下每次登录都是启动一个新的桌面,这样你就不能实现本地和远程共享同一个桌面。可以在www.linuxdoc.org/HOWTO/XDMCP-HOWTO得到更多关于XDMCP的资料。

另外一个解决方法是以inetd/xinetd方式运行VNC,也就是使用-inetd参数。但是这可能导致VNC为每个连接都重新启动,使得多个连接使用一个桌面,而且初始连接断开以后对应的VNC进程也随之结束。所以失去了保持连接状态和在本地远程之间共享桌面的特性。察看VNC得到更多的资料。

另外一个选择是使用x0rfbserver,这个应用以正常的X桌面方式运行,但是其却依赖于VNC客户端的显示内容。它能很好的利用X服务器支持的任何加速显卡的特性。而且它比X服务器加VNC服务器的方式占用更少的内存(它只需要一个X服务器和本来就很小的x0rfbserver应用程序)。但是它却要求你总是保持X桌面运行在控制台,因此它不适用于多个用户公用机器的情况。可以从www.hexonet.de/software.en得到更多的资料。

 

Jeremy D. Impson 是来自Owego的Lockheed Martin Systems Integration的名高级副研究员。他是移动通信和移动计算中心的成员,在这里他使用开放源码软件来开发移动计算系统。你可以通过电子邮件地址jeremy.impson@lmco.com和他联系。

编者按:除了VNC以外,还有一个更好的协议-tight VNC同样可以选择使用,它完全和VNC兼容(同样的配置文件和同样的可执行文件名)。参见http://www.tightvnc.com/.

阅读全文
0 0

相关文章推荐

img
取 消
img