do xen是否支持多个vnc客户端连接?

时间:2014-09-03 01:24:59

标签: vnc kvm xen

我打开一个vnc查看器来连接xen虚拟机,这是正常的。同时,我打开另一个vnc查看器来连接相同的虚拟机,vnc查看器无法连接。状态始终为“正在连接......”。据我所知,原因是Xen无法支持多个vnc客户端同时连接同一个虚拟机。如果有人有同样的问题?如何解决这个问题?期待你的回答。

1 个答案:

答案 0 :(得分:0)

vncserver具有允许不同类型共享的选项,特别是:

   -nevershared
          Never allow shared desktops.

   -alwaysshared
          Always allow shared desktops.

通常我会说要查找正在使用的vncserver命令并对其进行修改,但Xen似乎工作方式不同,只是通过标志来设置一些选项。使用Xen,我认为在2010年左右将多个VNC连接添加到vanilla QEMU中,并且同时考虑将其添加到Xen中,但我没有看到Xen文档中的预期优势I&#39在网上找到,所以也许它没有发生。

如果Xen仍然不直接支持它,并且您只是尝试与现有X服务器建立额外连接,则可以在第一个会话中运行x11vnc以添加对额外连接的支持(请参阅对于-shared和可能的-forever选项)。请注意,x11vnc应该只允许来自localhost的连接,然后使用SSH通过以下命令建立到VM的隧道,可以添加其他连接:

在VM上:

# :0 -> port 5900, increase if needed.  If vncserver's already there, definitely do.
# x11vnc require root access to reach a Ubuntu login screen, or matching user access
#   if a user is already logged in.
# An -auth option is usually needed - this one is for lighdm, but can vary wildly,
#   the output of x11vnc has a lot info on this.  The running X server will often
#   have the exact thing you need in its own command line.
#
x11vnc -shared -forever -auth /var/run/lightdm/root/:0 -display :0 -rfbwait 600

在您的本地计算机上:

# adjust the 5900 to be the sum of 5900 plus the number after the ":" in x11vnc:
# the 5901 tells which :(something) to use with vncviewer, just subtract 5900.
#
ssh -XC -L5901:localhost:5900 yourvmhostname
#          |               |
#  local port for :1       target port on VM for :0

然后在本地运行(这里:1是为什么我们有5901以上,调整品味):

vncviewer :1    # connects to the 5901 part on your *own* host, provided by the ssh.

一个怪癖:这些命令依赖于.Xauthority文件,该文件具有您想要使用的:(n)显示的神奇cookie。请注意,vncserver脚本通常会为您生成这些内容,一旦它们存在,您就不需要重新创建它们。如果您不使用vncserver本身,则可能需要自己制作:

remdpy=7     # assuming you need cookies for display :7 for some reason.
host=$(uname -n)
cookie=1fedaff375011821b5e0b4cf514d574a  # or something, see vncserver's example
for key in $host:$remdpy $host/unix:$remdpy ; do
  if xauth list $key | grep -sq . ; then
    echo $key already present
  else
    xauth -f ~/.Xauthority add $key . $cookie
  fi
done

不要使用与此相同的Cookie。

请注意,要穿透隐藏虚拟机(或真实主机)内部子网的网关主机,第一步是通过它建立隧道。这样的事情(root只是一个假设,如果可以,请使用较小的ID):

gateway=192.168.0.1
hidehost=172.16.0.1
# make a tunnel from localhost:2222 to $hidehost:22
ssh -CNn -L2222:$hidehost:22 root@$gateway &
# connect through it to $hidehost and run x11vnc there
ssh -C -p 2222 -L5901:127.0.0.1:5900 root@127.0.0.1 \
   'x11vnc -shared -forever -auth /var/run/lightdm/root/:0 -display :0 -rfbwait 600'
# connect to VNC on localhost:5901 - which uses the 2nd tunnel we just made
vncviewer :1  # run in a different window.

这在我的测试中起作用。可以使用-OProxyCommand组合这两个SSH(这样一个人不必清理后台的SSH作业),但更复杂。例如:

gateway=192.168.0.1
hidehost=172.16.0.1
ssh -C -oProxyCommand="ssh root@$gateway -n -W $hidehost:22" \
  -L5901:127.0.1:5900 root@127.0.0.1 \
  'x11vnc -shared -forever -auth /var/run/lightdm/root/:0 -display :0 -rfbwait 600'
vncviewer :1   # run in a different window.