[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] vnc port selection
From: |
acue |
Subject: |
Re: [Qemu-devel] vnc port selection |
Date: |
Thu, 21 Aug 2008 16:34:29 +0200 |
User-agent: |
Mail/News (X11/20061101) |
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
########################################################################
#
#PROJECT: Unified Sessions Manager
#AUTHOR: Arno-Can Uestuensoez - address@hidden
#MAINTAINER: Arno-Can Uestuensoez - address@hidden
#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);
}
}
########################################################################
#
#PROJECT: Unified Sessions Manager
#AUTHOR: Arno-Can Uestuensoez - address@hidden
#MAINTAINER: Arno-Can Uestuensoez - address@hidden
#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);
}
}
########################################################################
#
#PROJECT: Unified Sessions Manager
#AUTHOR: Arno-Can Uestuensoez - address@hidden
#MAINTAINER: Arno-Can Uestuensoez - address@hidden
#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);
}
}
#!/bin/bash
########################################################################
#
#PROJECT: Unified Sessions Manager
#AUTHOR: Arno-Can Uestuensoez - address@hidden
#MAINTAINER: Arno-Can Uestuensoez - address@hidden
#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 address@hidden
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 address@hidden@"
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 address@hidden@"
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:address@hidden@}"
}
#
#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
}