vnc

来源:互联网 发布:大道寺知世情侣头像 编辑:程序博客网 时间:2024/06/12 01:38

vnc (by hanlray(at)gmail.com)

vnc server是一个虚拟的X server,它并不需要输入输出设备,客户端通过vnc viewer来展示该X server;vnc server的作用就相当与一个网关,在X协议和VNC协议之间做转换,因此在任一台机器上都可以启动多个vnc server instance,比如对Xvnc,用下面的命令启动一个instance:

vncserver

vncserver是Xvnc的一个wrapper,它在启动Xvnc后会执行~/.vnc/.xstartup文件;如果不指定display number,该instance将自动被分配一个空闲的display number并打印出来,希望连接该vnc server instance的用户应该使X client和该display通讯。

手动使用vnc的方式是这样的(仍以Xvnc为例):

  • 用户ssh到一个server上
  • 执行vncserver,得到一个display number
  • 用vnc viewer连接该display number

     

通常vnc和xinetd/inetd协作实现按需启动,这有两种使用方式:

公共

这种方式使服务器看起来对每个用户都提供了相同的一组运行在某些display number上的X server,比如任何用户都可以用vnc viewer连接<server>:1,连接后将会出现登录界面进行认证,每个用户都是单独的X session。配置实例如下:

 

service vnc1024x768x16 { disable = no socket_type = stream protocol = tcp wait = no user = nobody server = /usr/bin/Xvnc server_args = -inetd -query localhost -once -geometry 1024x768 -depth 16 -securitytypes none } 
在/etc/services中:
 vnc1024x768x165901/tcp 
这里xinetd的属性wait=no,它和vnc server的inetd option配合实现下列行为:

当xinetd接受了一个到vnc1024x768x16(tcp端口5901)的连接后,它启动一个Xvnc实例并把这个连接的socket传给该实例,自此以后该实例直接和该viewer通讯,而xinetd接着监听vnc1024x768x16;由于该vnc server实例并不监听vnc端口,它不能再接受其他viewer的连接。

这种方式实际上为每个到该service的连接都启动一个vnc server实例,因此应该配合xdmp实现用户认证;同时由于无法指定一个固定的display number,因此各个vnc server实例使用系统中当前未被使用的display number,这使得为每个用户分配一个固定的display number变得不可能。

显然这里的service是为1024x768、16位色而设的,系统通常提供一组这样的service来满足部分不同分辨率的需求。

用户专有

为每个用户分配一个固定的display number有几个好处:
  • 方便配合ssh tunnel来保护vnc连接,如果防火墙不允许vnc service,用ssh tunnel应该是使用vnc的唯一方法
  • 使用户定制桌面成为可能。不必使用系统默认桌面,每个用户可以选择自己偏爱的wm
  • 不必使用xdmp。用vnc passwd验证用户即可,不必输入用户名

配置例子:

service vnc1 { disable = no socket_type = stream protocol = tcp wait = yes user = ray server = /usr/bin/vncserver server_args = :51 -inetd -once -geometry 1200x1000 -depth 16 -passwordFile /home/ray/.vnc/passwd -extension XFIXES } 
service的端口可以选择比较靠后的以避免冲突,比如5950

这里wait=yes和vnc server的inetd option配置实现下列行为:

xinetd在vnc1的端口监听,当收到一个请求后启动一个vnc server实例并把该监听端口交给该实例处理,相当于该实例接管了vnc1的所有通讯,而xinetd的作用只是实现了vnc server的按需启动;同时由于该实例监听vnc端口,其他viewer也可以连接该实例。

这里使用的vncserver来实现用户桌面的定制:启动wm和一些X application

server_args指定的display number必须是第一个option,因为vncserver会判断该display number是否别占用

passwordFile option实现用户认证

extension XFIXES虽然在man里没有提到,在我这里却是必须的,否则会出现莫名奇妙的错误

实际使用中,这两种方式都可以提供,因为每种方式都有它们的应用场合。

原创粉丝点击