From: acue <acue@i4p.de>
To: qemu-devel@nongnu.org
Cc: Xen Development Mailing List <xen-devel@lists.xensource.com>
Subject: Re: [Qemu-devel] vnc port selection
Date: Thu, 21 Aug 2008 16:34:29 +0200 [thread overview]
Message-ID: <48AD7CF5.30407@i4p.de> (raw)
In-Reply-To: <48ADA659.2030201@codemonkey.ws>
[-- Attachment #1: Type: text/plain, Size: 1793 bytes --]
Anthony Liguori wrote:
> Gerd Hoffmann wrote:
>> Hi folks,
>>
>> Xen's qemu-dm version has a '-vncunused' command line switch which asks
>> the internal vnc server to pick any unused tcp port to listen on. The
>> actual port is communicated to the outside world via xenstore.
>>
>> I'm looking for a reasonable way to implement that functionality in
>> upstream qemu. First, I think it shouldn't be a separate command line
>> switch but an option for the existion -vnc switch.
>
> Maybe something like a to=N option. So you would have:
>
> -vnc localhost:0,to=10
>
> That would try from displays 0 to 10 and select the first one it could
> attach to.
>
>> Second, we need a
>> way to communicate the port picked which isn't xen-specific. Obvious
>> choice is a monitor info subcommand.
>>
>
> There's already an info vnc. It can be added to that.
>
> Regards,
>
> Anthony Liguori
>
>> Comments? Other suggestions?
>>
>> cheers,
>> Gerd
>>
>>
>
>
>
>
Hello Gerd,
Even though currently it is a bash+awk solution the algorithm could be
of interest for you.
It works on Linux+OpenBSD+Solaris and accepts MIN and MAX value for the
port.
An aditional seed-value is added for slowly-released ports for immediate
access.
I use different ranges particularly in order to distinguish
displayforwarding and
"clientforwarding".
Thus one range for local vncviewer access by OpenSSH with "-X" option,
another for
forwarded remote vncviewer access by OpenSSH tunnels with port-forwarding.
The files are available at http:/sourceforge.net/projects/ctys with the
directory path: ctys.01_07_001b04/plugins/VNC
Arno
--
----------------------------------------------------------------------------
Arno-Can Uestuensoez
www.i4p.de / www.i4p.com
[-- Attachment #2: getFirstFreeVNCPort.Linux.awk --]
[-- Type: text/plain, Size: 1202 bytes --]
########################################################################
#
#PROJECT: Unified Sessions Manager
#AUTHOR: Arno-Can Uestuensoez - acue@UnifiedSessionsManager.org
#MAINTAINER: Arno-Can Uestuensoez - acue_sf1@sourceforge.net
#SHORT: ctys
#CALLFULLNAME: Commutate To Your Session
#LICENCE: GPL3
#VERSION: 01_06_001a10
#
########################################################################
#
# Copyright (C) 2007 Arno-Can Uestuensoez (UnifiedSessionsManager.org)
#
########################################################################
function ptrace(inp){
if(!d){
print line ":" inp | "cat 1>&2"
}
}
BEGIN{
ptrace("awk:getFirstFreeVNCPort");
ptrace("min ="min);
ptrace("max ="max);
ptrace("seed="seed);
chk[0]="";
}
{
gsub("^[0-9.]*:+","",$4);
}
$4>min&&$4<max{
idx=$4-min;
chk[idx]=$4;
}
END{
l=max-min;
for(i=0;i<l;i++){
if(chk[i]==""){
if(seed==0){break;}
seed--;
ptrace("skip("seed")="i);
}
}
if(i<max){
ptrace("result="i);
printf("%d",min+i);
}else{
ptrace("result exceeds maximum("max")="i);
}
}
[-- Attachment #3: getFirstFreeVNCPort.OpenBSD.awk --]
[-- Type: text/plain, Size: 1202 bytes --]
########################################################################
#
#PROJECT: Unified Sessions Manager
#AUTHOR: Arno-Can Uestuensoez - acue@UnifiedSessionsManager.org
#MAINTAINER: Arno-Can Uestuensoez - acue_sf1@sourceforge.net
#SHORT: ctys
#CALLFULLNAME: Commutate To Your Session
#LICENCE: GPL3
#VERSION: 01_06_001a10
#
########################################################################
#
# Copyright (C) 2007 Arno-Can Uestuensoez (UnifiedSessionsManager.org)
#
########################################################################
function ptrace(inp){
if(!d){
print line ":" inp | "cat 1>&2"
}
}
BEGIN{
ptrace("awk:getFirstFreeVNCPort");
ptrace("min ="min);
ptrace("max ="max);
ptrace("seed="seed);
chk[0]="";
}
{
gsub("^[0-9.]*:+","",$4);
}
$4>min&&$4<max{
idx=$4-min;
chk[idx]=$4;
}
END{
l=max-min;
for(i=0;i<l;i++){
if(chk[i]==""){
if(seed==0){break;}
seed--;
ptrace("skip("seed")="i);
}
}
if(i<max){
ptrace("result="i);
printf("%d",min+i);
}else{
ptrace("result exceeds maximum("max")="i);
}
}
[-- Attachment #4: getFirstFreeVNCPort.SunOS.awk --]
[-- Type: text/plain, Size: 1202 bytes --]
########################################################################
#
#PROJECT: Unified Sessions Manager
#AUTHOR: Arno-Can Uestuensoez - acue@UnifiedSessionsManager.org
#MAINTAINER: Arno-Can Uestuensoez - acue_sf1@sourceforge.net
#SHORT: ctys
#CALLFULLNAME: Commutate To Your Session
#LICENCE: GPL3
#VERSION: 01_06_001a10
#
########################################################################
#
# Copyright (C) 2007 Arno-Can Uestuensoez (UnifiedSessionsManager.org)
#
########################################################################
function ptrace(inp){
if(!d){
print line ":" inp | "cat 1>&2"
}
}
BEGIN{
ptrace("awk:getFirstFreeVNCPort");
ptrace("min ="min);
ptrace("max ="max);
ptrace("seed="seed);
chk[0]="";
}
{
gsub("^[0-9.]*:+","",$4);
}
$4>min&&$4<max{
idx=$4-min;
chk[idx]=$4;
}
END{
l=max-min;
for(i=0;i<l;i++){
if(chk[i]==""){
if(seed==0){break;}
seed--;
ptrace("skip("seed")="i);
}
}
if(i<max){
ptrace("result="i);
printf("%d",min+i);
}else{
ptrace("result exceeds maximum("max")="i);
}
}
[-- Attachment #5: hook --]
[-- Type: text/plain, Size: 19056 bytes --]
#!/bin/bash
########################################################################
#
#PROJECT: Unified Sessions Manager
#AUTHOR: Arno-Can Uestuensoez - acue@UnifiedSessionsManager.org
#MAINTAINER: Arno-Can Uestuensoez - acue_sf1@sourceforge.net
#SHORT: ctys
#CALLFULLNAME: Commutate To Your Session
#LICENCE: GPL3
#VERSION: 01_03_001b01
#
########################################################################
#
# Copyright (C) 2007 Arno-Can Uestuensoez (UnifiedSessionsManager.org)
#
########################################################################
VNC_MAGIC=VNC_GENERIC;
VNC_VERSTRING=;
VNC_STATE=DISABLED;
VNCSERVER_OPT=;
VNCVIEWER_OPT=;
VNC_PREREQ=;
export VNC_BASEPORT=${VNC_BASEPORT:-5900}
_myPKGNAME_VNC="${BASH_SOURCE}"
_myPKGVERS_VNC="01.02.001b01"
hookInfoAdd $_myPKGNAME_VNC $_myPKGVERS_VNC
_myPKGBASE_VNC="${_myPKGNAME_VNC%/hook}"
VNC_VERSTRING=${_myPKGVERS_VNC};
VNC_PREREQ="HOST-CAPABILITY:VNC-${VNC_VERSTRING}-${MYARCH}";
if [ -d "${HOME}/.ctys" -a -d "${HOME}/.ctys/vnc" ];then
if [ -f "${HOME}/.ctys/vnc/vnc.conf.${MYOS}" ];then
. "${HOME}/.ctys/vnc/vnc.conf.${MYOS}"
fi
fi
if [ -d "${MYCONFPATH}" -a -d "${MYCONFPATH}/vnc" ];then
if [ -f "${MYCONFPATH}/vnc/vnc.conf.${MYOS}" ];then
. "${MYCONFPATH}/vnc/vnc.conf.${MYOS}"
fi
fi
_waitcVNC=${VNC_INIT_WAITC:-2}
_waitsVNC=${VNC_INIT_WAITS:-2}
#FUNCBEG###############################################################
#NAME:
# getFirstFreeVNCPort
#
#TYPE:
# bash-function
#
#DESCRIPTION:
# Gets the first free port above a given base, thus multiple regions
# could be managed
#
#EXAMPLE:
#
#PARAMETERS:
# $1: <MIN>
# $2: [<MAX>]
#
#OUTPUT:
# RETURN:
# VALUES:
# <first-port>
#
#FUNCEND###############################################################
function getFirstFreeVNCPort () {
printDBG $S_LIB ${D_BULK} $LINENO $BASH_SOURCE "$FUNCNAME:CALL=<${*}>"
local MIN=${1:-$VNC_BASEPORT};
local MAX=$2;
[ -z "$MAX" ]&&let MAX=MIN+1000;
local _seed=$((RANDOM%VNCPORTSEED));
doDebug $S_XEN ${D_MAINT} $LINENO $BASH_SOURCE
local D=$?
printDBG $S_LIB ${D_BULK} $LINENO $BASH_SOURCE "$FUNCNAME:MIN=${MIN} MAX=${MAX} seed=${_seed}"
case ${MYOS} in
Linux)
local localClientAccess=`${CTYS_NETSTAT} -n -l -t|awk -v d="${D}" -v min="${MIN}" -v max="${MAX}" -v seed="${_seed}" -f ${_myPKGBASE_VNC}/getFirstFreeVNCPort.${MYOS}.awk`
;;
OpenBSD)
local localClientAccess=`${CTYS_NETSTAT} -n -l -t|awk -v d="${D}" -v min="${MIN}" -v max="${MAX}" -v seed="${_seed}" -f ${_myPKGBASE_VNC}/getFirstFreeVNCPort.${MYOS}.awk`
;;
SunOS)
local localClientAccess=`${CTYS_NETSTAT} -n -l -t|awk -v d="${D}" -v min="${MIN}" -v max="${MAX}" -v seed="${_seed}" -f ${_myPKGBASE_VNC}/getFirstFreeVNCPort.${MYOS}.awk`
;;
esac
printDBG $S_LIB ${D_BULK} $LINENO $BASH_SOURCE "$FUNCNAME:localClientAccess=<${localClientAccess}>"
echo -n -e "${localClientAccess}";
}
#FUNCBEG###############################################################
#NAME:
# getFirstFreeVNCDisplay
#
#TYPE:
# bash-function
#
#DESCRIPTION:
# Gets the first free display above a given base, thus multiple regions
# could be managed
#
#EXAMPLE:
#
#PARAMETERS:
# $1: <MIN>
# $2: [<MAX>]
#
#OUTPUT:
# RETURN:
# VALUES:
# <first-port>
#
#FUNCEND###############################################################
function getFirstFreeVNCDisplay () {
printDBG $S_LIB ${D_BULK} $LINENO $BASH_SOURCE "$FUNCNAME:CALL=<${*}>"
local MIN=${1:-$VNC_BASEPORT};
local MAX=$2;
[ -z "$MAX" ]&&let MAX=VNC_PORT+1000;
printDBG $S_LIB ${D_BULK} $LINENO $BASH_SOURCE "$FUNCNAME:MIN=${MIN} MAX=${MAX}"
local _myPort=`getFirstFreeVNCPort ${@}`
local _myDisplay=$((_myPort-MIN));
printDBG $S_LIB ${D_BULK} $LINENO $BASH_SOURCE "$FUNCNAME:_myPort=<${_myPort}>"
printDBG $S_LIB ${D_BULK} $LINENO $BASH_SOURCE "$FUNCNAME:_myDisplay=<${_myDisplay}>"
echo -n -e "${_myDisplay}";
}
#FUNCBEG###############################################################
#NAME:
# serverRequireVNC
#
#TYPE:
# bash-function
#
#DESCRIPTION:
# Reports whether a server component has to be called for the current
# action.
#
#EXAMPLE:
#
#PARAMETERS:
# $*: ${EXECCALL}|<options-list>
# Generally a string containing an <options-list>, where the
# first match is choosen. So only one type option is allowed to
# be contained.
#
#OUTPUT:
# RETURN:
# INPUT, where required changes for destination are set.
# VALUES:
# 0: true, required - output is valid.
# 1: false, not required - output is not valid.
#
#FUNCEND###############################################################
function serverRequireVNC () {
printDBG $S_VNC ${D_BULK} $LINENO $BASH_SOURCE "$FUNCNAME \$@=$@"
local _ret=1;
local _res=;
local _S=`getSessionType ${*}`;_S=${_S:-$C_SESSIONTYPE};
local _A=`getActionResulting ${*}`;
case $_A in
GETCLIENTPORT)
printDBG $S_VNC ${D_MAINT} $LINENO $BASH_SOURCE "$FUNCNAME:_res=\"${*}\""
printDBG $S_VNC ${D_MAINT} $LINENO $BASH_SOURCE "$FUNCNAME:_ret=\"0\""
echo -n "${*}";
return 0
;;
esac
local _CS_SPLIT=${*};
_CS_SPLIT=${_CS_SPLIT//CONNECTIONFORWARDING/SERVERONLY}
_CS_SPLIT=${_CS_SPLIT//*LOCALONLY*/}
_CS_SPLIT=${_CS_SPLIT//*CLIENTONLY*/}
if [ -n "${_CS_SPLIT}" ];then
_res="${_CS_SPLIT}";_ret=0;
fi
printDBG $S_VNC ${D_MAINT} $LINENO $BASH_SOURCE "_CS_SPLIT=\"${_CS_SPLIT}\""
printDBG $S_VNC ${D_MAINT} $LINENO $BASH_SOURCE "_S=\"${_S}\""
printDBG $S_VNC ${D_MAINT} $LINENO $BASH_SOURCE "_A=\"${_A}\""
printDBG $S_VNC ${D_MAINT} $LINENO $BASH_SOURCE "$FUNCNAME:_res=\"${_res}\""
printDBG $S_VNC ${D_MAINT} $LINENO $BASH_SOURCE "$FUNCNAME:_ret=\"${_ret}\""
echo -n "${_res}";
return ${_ret};
}
#FUNCBEG###############################################################
#NAME:
# clientRequireVNC
#
#TYPE:
# bash-function
#
#DESCRIPTION:
# Reports whether a client component has to be called for the current
# action.
#
#EXAMPLE:
#
#PARAMETERS:
# $*: ${EXECCALL}|<options-list>
# Generally a string containing an <options-list>, where the
# first match is choosen. So only one type option is allowed to
# be contained.
#
#OUTPUT:
# RETURN:
# INPUT, where required changes for destination are set.
# VALUES:
# 0: true, required - output is valid.
# 1: false, not required - output is not valid.
#
#FUNCEND###############################################################
function clientRequireVNC () {
printDBG $S_VNC ${D_BULK} $LINENO $BASH_SOURCE "$FUNCNAME \$@=$@"
local _ret=1;
local _res=;
local _A=`getActionResulting ${*}`;
local _S=`getSessionType ${*}`;_S=${_S:-$C_SESSIONTYPE};
local _CS_SPLIT=${*};
_CS_SPLIT=${_CS_SPLIT//*DISPLAYFORWARDING*/}
_CS_SPLIT=${_CS_SPLIT//*SERVERONLY*/}
if [ "${_CS_SPLIT}" == "${*}" ];then
_res="${_CS_SPLIT}";_ret=0;
fi
printDBG $S_VNC ${D_MAINT} $LINENO $BASH_SOURCE "_CS_SPLIT=\"${_CS_SPLIT}\""
printDBG $S_VNC ${D_MAINT} $LINENO $BASH_SOURCE "_S=\"${_S}\""
printDBG $S_VNC ${D_MAINT} $LINENO $BASH_SOURCE "_A=\"${_A}\""
printDBG $S_VNC ${D_MAINT} $LINENO $BASH_SOURCE "$FUNCNAME:_res=\"${_res}\""
printDBG $S_VNC ${D_MAINT} $LINENO $BASH_SOURCE "$FUNCNAME:_ret=\"${_ret}\""
echo -n "${_res}";
return ${_ret};
}
#FUNCBEG###############################################################
#NAME:
# setVersionVNC
#
#TYPE:
# bash-function
#
#DESCRIPTION:
# Sets defaults and MAGIC-ID for local vmware version.
#
#EXAMPLE:
#
#PARAMETERS:
#
#
#OUTPUT:
# GLOBALS:
# VNC_MAGIC: {VNC_REAL412|VNC_TIGHT129|...}
# Value to be checked.
#
# VMW_DEFAULTOPTS
# Appropriate defaults.
#
# -RealVNC - 4.1.2
# -TightVNC - 1.2.9
#
# RETURN:
#
# VALUES:
#
#FUNCEND###############################################################
function setVersionVNC () {
local _checkonly=;
local _ret=0;
if [ "$1" == "NOEXIT" ];then
local _checkonly=1;
fi
local _verstrg=;
if [ -z "${VNCSEXE}" ];then
ABORT=2;
printERR $LINENO $BASH_SOURCE ${ABORT} "Missing executable for VNCserver"
printERR $LINENO $BASH_SOURCE ${ABORT} "can not find:"
printERR $LINENO $BASH_SOURCE ${ABORT} " -> vncserv"
printERR $LINENO $BASH_SOURCE ${ABORT} ""
printERR $LINENO $BASH_SOURCE ${ABORT} "Check your PATH"
printERR $LINENO $BASH_SOURCE ${ABORT} " -> PATH=${PATH}"
printERR $LINENO $BASH_SOURCE ${ABORT} ""
if [ "${C_SESSIONTYPE}" == "VNC" -a -z "${_checkonly}" ];then
gotoHell ${ABORT}
else
return ${ABORT}
fi
_ret=${ABORT};
else
local _vsexe=`${VNCSEXE} --help 2>&1|egrep '(Usage:|usage:)'`
ABORT=2;
if [ -n "$_vsexe" ];then
printDBG $S_LIB ${D_SYS} $LINENO "$BASH_SOURCE" "$FUNCNAME:`setSeverityColor TRY \"call(${VNCSEXE} --help)\"` => [ `setSeverityColor INF OK` ]"
_ret=0;
else
printDBG $S_LIB ${D_SYS} $LINENO "$BASH_SOURCE" "$FUNCNAME:`setSeverityColor TRY \"call(${VNCSEXE} --help)\"` => [ `setSeverityColor ERR NOK` ]"
_ret=${ABORT};
fi
fi
if [ -z "${VNCVEXE}" ];then
ABORT=2
printERR $LINENO $BASH_SOURCE ${ABORT} "Missing executable for VNCviewer"
printERR $LINENO $BASH_SOURCE ${ABORT} "can not find:"
printERR $LINENO $BASH_SOURCE ${ABORT} " -> vncviewer"
printERR $LINENO $BASH_SOURCE ${ABORT} ""
printERR $LINENO $BASH_SOURCE ${ABORT} "Check your PATH"
printERR $LINENO $BASH_SOURCE ${ABORT} " -> PATH=${PATH}"
printERR $LINENO $BASH_SOURCE ${ABORT} ""
if [ "${C_SESSIONTYPE}" == "VNC" -a -z "${_checkonly}" ];then
gotoHell ${ABORT}
else
return ${ABORT}
fi
_ret=${ABORT};
fi
if [ -n "`${VNCVEXE} --help 2>&1|egrep '(RealVNC)'`" ];then
# _verstrg=`${VNCVEXE} --help 2>&1|awk '/VNC [Vv]iewer/{printf("%s\n",$5);}'`
_verstrg=`${VNCVEXE} --help 2>&1|sed -n 's/VNC [Vv]iewer[^0-9]*\([0-9]*.[0-9]*.[0-9]*\).*/\1/p'`
ABORT=2;
if [ -n "$_verstrg" ];then
_verstrg="RealVNC-${_verstrg}"
printDBG $S_LIB ${D_SYS} $LINENO "$BASH_SOURCE" "$FUNCNAME:`setSeverityColor TRY \"call(${VNCVEXE} -version)\"` => [ `setSeverityColor INF OK` ]"
_ret=0;
else
printDBG $S_LIB ${D_SYS} $LINENO "$BASH_SOURCE" "$FUNCNAME:`setSeverityColor TRY \"call(${VNCVEXE} --version)\"` => [ `setSeverityColor ERR NOK` ]"
_ret=${ABORT};
fi
else
if [ -n "`${VNCVEXE} --help 2>&1|egrep '(TightVNC)'`" ];then
_verstrg=`${VNCVEXE} --help 2>&1|awk -v a=${_allign} '/[vV]iewer [vV]ersion/{printf("%s\n",$4);}'`
ABORT=2;
if [ -n "$_verstrg" ];then
_verstrg="TightVNC-${_verstrg}"
printDBG $S_LIB ${D_SYS} $LINENO "$BASH_SOURCE" "$FUNCNAME:`setSeverityColor TRY \"call(${VNCVEXE} -version)\"` => [ `setSeverityColor INF OK` ]"
_ret=0;
else
printDBG $S_LIB ${D_SYS} $LINENO "$BASH_SOURCE" "$FUNCNAME:`setSeverityColor TRY \"call(${VNCVEXE} --version)\"` => [ `setSeverityColor ERR NOK` ]"
_ret=${ABORT};
fi
else
if [ -n "`${VNCVEXE} --help 2>&1|egrep '(open display:)'`" ];then
printWNG 1 $LINENO $BASH_SOURCE 0 "DISPLAY is not available"
printWNG 1 $LINENO $BASH_SOURCE 0 " 1. One common cause is the call of \"ssh\" without the \"-X\""
printWNG 1 $LINENO $BASH_SOURCE 0 " option. Even for the utilized check by \"vncviewer --help\" "
printWNG 1 $LINENO $BASH_SOURCE 0 " option a display is required."
_verstrg=GENERIC
_ret=0;
else
printWNG 1 $LINENO $BASH_SOURCE 0 "Can not evaluate version for \"which-ed\" vncviewer."
printWNG 1 $LINENO $BASH_SOURCE 0 "."
printWNG 1 $LINENO $BASH_SOURCE 0 " 1. One common cause is the call of \"ssh\" without the \"-X\""
printWNG 1 $LINENO $BASH_SOURCE 0 " option. Even for the utilized check by \"vncviewer --help\" "
printWNG 1 $LINENO $BASH_SOURCE 0 " option a display is required."
printWNG 1 $LINENO $BASH_SOURCE 0 " 2. Another common cause for the initial usage is the missing "
printWNG 1 $LINENO $BASH_SOURCE 0 " permission \"X11Forwarding yes\" in \"/etc/ssh/sshd_conf\"."
_verstrg=GENERIC
_ret=0;
fi
fi
fi
printDBG $S_VNC ${D_BULK} $LINENO $BASH_SOURCE "VNC"
printDBG $S_VNC ${D_BULK} $LINENO $BASH_SOURCE " _verstrg=${_verstrg}"
#currently somewhat restrictive to specific versions.
case ${_verstrg} in
"TightVNC"*)
VNC_MAGIC=VNCT;
VNC_STATE=ENABLED;
VNC_PREREQ="${VNC_PREREQ}%${_verstrg}-${MYARCH} vncserver,vncviewer";
VNCSERVER_OPT="${VNCSERVER_OPT_TightVNC}";
VNCVIEWER_OPT="${VNCVIEWER_OPT_TightVNC}";
_ret=0;
;;
"RealVNC"*)
VNC_MAGIC=VNCR;
VNC_STATE=ENABLED;
VNC_PREREQ="${VNC_PREREQ}%${_verstrg}-${MYARCH} vncserver,vncviewer";
VNCSERVER_OPT="${VNCSERVER_OPT_RealVNC}";
VNCVIEWER_OPT="${VNCVIEWER_OPT_RealVNC}";
_ret=0;
;;
*)
VNC_MAGIC=VNCG;
VNCSERVER_OPT="${VNCSERVER_OPT_GENERIC}";
VNCVIEWER_OPT="${VNCVIEWER_OPT_GENERIC}";
VNC_PREREQ="${VNC_PREREQ}%${_verstrg}-${MYARCH}";
_ret=2;
;;
esac
printDBG $S_VNC ${D_BULK} $LINENO $BASH_SOURCE "VNC_MAGIC = ${VNC_MAGIC}"
printDBG $S_VNC ${D_BULK} $LINENO $BASH_SOURCE "VNC_VERSTRING = ${VNC_VERSTRING}"
printDBG $S_VNC ${D_BULK} $LINENO $BASH_SOURCE "VNC_STATE = ${VNC_STATE}"
printDBG $S_VNC ${D_BULK} $LINENO $BASH_SOURCE "VNC_PREREQ = ${VNC_PREREQ}"
printDBG $S_VNC ${D_BULK} $LINENO $BASH_SOURCE "VNCSERVER_OPT = ${VNCSERVER_OPT}"
printDBG $S_VNC ${D_BULK} $LINENO $BASH_SOURCE "VNCVIEWER_OPT = ${VNCVIEWER_OPT}"
return $_ret;
}
#FUNCBEG###############################################################
#NAME:
# noClientServerSplitSupportedMessageVNC
#
#TYPE:
# bash-function
#
#DESCRIPTION:
#
#EXAMPLE:
#
#PARAMETERS:
#
#OUTPUT:
# RETURN:
# VALUES:
#
#FUNCEND###############################################################
function noClientServerSplitSupportedMessageVNC () {
ABORT=2
printERR $LINENO $BASH_SOURCE ${ABORT} "Unexpected ERROR!!!"
printERR $LINENO $BASH_SOURCE ${ABORT} "VNC perfectly supports ClientServerSplit!!!"
printERR $LINENO $BASH_SOURCE ${ABORT} "Check for process ownership, probably just missing permissions."
printERR $LINENO $BASH_SOURCE ${ABORT} "On grave slow machines just a timeout may have occured."
printERR $LINENO $BASH_SOURCE ${ABORT} "Try a following connect, if so adapt TIMEOUT value, but for this target only."
}
#FUNCBEG###############################################################
#NAME:
# clientServerSplitSupportedVNC
#
#TYPE:
# bash-function
#
#DESCRIPTION:
# Checks whether the split of client and server is supported.
# This is just a hardcoded attribute.
#
#EXAMPLE:
#
#PARAMETERS:
#
#OUTPUT:
# RETURN:
# 0: If supported
# 1: else
#
# VALUES:
#
#FUNCEND###############################################################
function clientServerSplitSupportedVNC () {
printDBG $S_VNC ${D_BULK} $LINENO $BASH_SOURCE "$FUNCNAME $1"
case $1 in
CREATE)return 0;;
CANCEL)return 0;;
esac
return 1;
}
#FUNCBEG###############################################################
#NAME:
# enumerateMySessionsVNC
#
#TYPE:
# bash-function
#
#DESCRIPTION:
# Not supported.
#
#EXAMPLE:
#
#PARAMETERS:
#
#OUTPUT:
# RETURN:
# VALUES:
#
#FUNCEND###############################################################
function enumerateMySessionsVNC () {
printDBG $S_VNC ${D_BULK} $LINENO $BASH_SOURCE "$FUNCNAME:\$@=${@}"
}
#
#Managed load of sub-packages gwhich are required in almost any case.
#On-demand-loads will be performed within requesting action.
#
hookPackage "${_myPKGBASE_VNC}/session"
hookPackage "${_myPKGBASE_VNC}/list"
hookPackage "${_myPKGBASE_VNC}/info"
if [ -d "${HOME}/.ctys" -a -d "${HOME}/.ctys/vnc" ];then
#Source pre-set environment from user
if [ -f "${HOME}/.ctys/vnc/vnc.conf" ];then
. "${HOME}/.ctys/vnc/vnc.conf"
fi
#Source pre-set environment from installation
if [ -f "${MYCONFPATH}/vnc/vnc/cli.conf" ];then
. "${MYCONFPATH}/conf/vnc/vnc.conf"
fi
fi
#FUNCBEG###############################################################
#NAME:
# handleVNC
#
#TYPE:
# bash-function
#
#DESCRIPTION:
#
#EXAMPLE:
#
#PARAMETERS:
# $1: <OPMODE>
# $2: <ACTION>
#
#OUTPUT:
# RETURN:
#
# VALUES:
#
#FUNCEND###############################################################
function handleVNC () {
printDBG $S_VNC ${D_BULK} $LINENO $BASH_SOURCE "${FUNCNAME}:$*"
local OPMODE=$1;shift
local ACTION=$1;shift
case ${ACTION} in
CREATE)
case ${OPMODE} in
PROLOGUE)
;;
EPILOGUE)
;;
CHECKPARAM|ASSEMBLE|EXECUTE)
hookPackage "${_myPKGBASE_VNC}/create"
createConnectVNC ${OPMODE} ${ACTION}
;;
esac
;;
CANCEL)
case ${OPMODE} in
PROLOGUE)
;;
EPILOGUE)
;;
CHECKPARAM|ASSEMBLE|EXECUTE)
hookPackage "${_myPKGBASE_VNC}/cancel"
cutCancelSessionVNC ${OPMODE} ${ACTION}
;;
esac
;;
GETCLIENTPORT)
case ${OPMODE} in
PROLOGUE)
;;
EPILOGUE)
;;
CHECKPARAM)
if [ -n "$C_MODE_ARGS" ];then
printDBG $S_VNC ${D_BULK} $LINENO $BASH_SOURCE "C_MODE_ARGS=$C_MODE_ARGS"
_C_GETCLIENTPORT=$C_MODE_ARGS
else
ABORT=1
printERR $LINENO $BASH_SOURCE ${ABORT} "Missing <session-label>|<session-id>"
gotoHell ${ABORT}
fi
;;
EXECUTE)
printDBG $S_VNC ${D_BULK} $LINENO $BASH_SOURCE "Remote command:C_MODE_ARGS=${C_MODE_ARGS}"
printDBG $S_VNC ${D_BULK} $LINENO $BASH_SOURCE "CLIENTPORT(VNC,${MYHOST},${_C_GETCLIENTPORT})=`getClientTPVNC ${_C_GETCLIENTPORT}`"
echo "CLIENTPORT(VNC,${MYHOST},${_C_GETCLIENTPORT})=`getClientTPVNC ${_C_GETCLIENTPORT}`"
gotoHell 0
;;
ASSEMBLE)
;;
esac
;;
*)
#SUSPEND|RESUME|RESET
ABORT=1;
printERR $LINENO $BASH_SOURCE ${ABORT} "System Error, unsupported ACTION for VNC:ACTION=${ACTION} OPMODE=${OPMODE}"
;;
esac
}
#FUNCBEG###############################################################
#NAME:
# initVNC
#
#TYPE:
# bash-function
#
#DESCRIPTION:
#
#EXAMPLE:
#
#PARAMETERS:
#
#OUTPUT:
# RETURN:
#
# VALUES:
#
#FUNCEND###############################################################
function initVNC () {
local _curInit=$1;shift
local _initConsequences=$1
local ret=0;
local _raise=$((INITSTATE<_curInit));
printDBG $S_VNC ${D_MAINT} $LINENO $BASH_SOURCE "$FUNCNAME:${INITSTATE} -> ${_curInit} - ${_raise}"
if [ "$_raise" == "1" ];then
#for raise of INITSTATE do not touch the OS's decisions, just expand.
case $_curInit in
0);;#NOP - Done by shell
1) #add own help to searchlist for options
MYOPTSFILES="${MYOPTSFILES} ${MYHELPPATH}/010_vnc"
setVersionVNC $_initConsequences
ret=$?
;;
2);;
3);;
4);;
5);;
6);;
esac
else
case $_curInit in
*);;
esac
fi
return $ret
}
next prev parent reply other threads:[~2008-08-21 17:37 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-08-21 16:37 [Qemu-devel] vnc port selection Gerd Hoffmann
2008-08-21 17:31 ` Anthony Liguori
2008-08-21 14:34 ` acue [this message]
2008-08-21 18:30 ` Avi Kivity
2008-08-21 18:35 ` Anthony Liguori
2008-08-21 19:53 ` [Xen-devel] " Daniel P. Berrange
2008-08-24 8:54 ` Avi Kivity
2008-08-24 10:01 ` Jamie Lokier
2008-08-26 10:15 ` [Xen-devel] " Ian Jackson
2008-08-21 19:52 ` Daniel P. Berrange
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=48AD7CF5.30407@i4p.de \
--to=acue@i4p.de \
--cc=qemu-devel@nongnu.org \
--cc=xen-devel@lists.xensource.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).