1#!/bin/bash
2#============================================================================
3# This script should be installed in /usr/X11R6/bin/Xvnc-xen.
4#============================================================================
5#
6# Start Xvnc and use vncconnect to connect back to a vncviewer listening in
7# domain 0. The host and port to connect to are given by
8#
9#    VNC_VIEWER=<host>:<port>
10#
11# in the kernel command line (/proc/cmdline).
12#
13# The '--vnc' option to 'xm create' will start a vncviewer and
14# pass its address in VNC_VIEWER for this script to find.
15#
16# Usage:
17#        Xvnc-xen [args]
18#
19# Any arguments are passed to Xvnc.
20#
21#============================================================================
22
23# Prefix for messages.
24M="[$(basename $0)]"
25
26# Usage: vnc_addr
27# Print <host>:<port> for the vncviewer given in
28# the kernel command line.
29vnc_addr () {
30    sed -n -e "s/.*VNC_VIEWER=\([^ ]*\).*/\1/p" /proc/cmdline
31}
32
33# Usage: vnc_connect
34# If a vncviewer address was given on the kernel command line,
35# run vncconnect for it.
36vnc_connect () {
37    local addr=$(vnc_addr)
38
39    if [ -n "${addr}" ] ; then
40        echo "$M Connecting to ${addr}."
41        vncconnect ${addr}
42    else
43        echo "$M No VNC_VIEWER in kernel command line."
44        echo "$M Create the domain with 'xm create --vnc <display>'."
45        return 1
46    fi
47}
48
49# Start the vnc server.
50Xvnc "$@" >/dev/null 2>&1 &
51
52# Connect back to the viewer in domain-0.
53vnc_connect
54