#!/bin/bash MCORE_LIBDIR="@@MCORE_LIBDIR@@" source @@SYSCONFDIR@@/mcore/mcore.conf source ${MCORE_LIBDIR}/include/common.global.class ICADIR="${MCORE_CONFIG_PATH}/citrix/ica" ICASUFFIX="ica" die() { echo "ERROR: $@"; exit 1; } # very basic getops for argv in $* do case $1 in --add|--del|--print|--query) method="${1//--}" ;; --name) shift; name="$1" ;; --session) shift; session="$1" ;; --mode) shift; mode="$1" ;; --user) shift; user="$1" ;; --domain) shift; domain="$1" ;; --password) shift; password="$1" ;; esac shift done [[ -n ${method} ]] || die "No method given" case "${method}" in add) # requires name [[ -n ${name} ]] || die "No name given" # action 'add' requires mode too [[ -n ${mode} ]] || die "No mode given" # and session [[ -n ${session} ]] || die "No session given" # other sanity checks case "${mode}" in fullscreen) ;; seamless) ;; *x*) ;; *) die "unknown mode '${mode}'" esac icafile="${ICADIR}/${name}.${ICASUFFIX}" CONFIG="${MROOT}/${icafile}" clearconfig addconfig '[WFClient]' addconfig 'Version=2' serverlist=$(NOCOLORS=true ${MCORE_LIBDIR}/citrix-serverlist --print) declare -i i=0 for server in ${serverlist} do (( i++ )) server_num="${i}" [[ ${i} -eq 1 ]] && server_num="" addconfig "TcpBrowserAddress${server_num}=${server}" done addconfig 'ScreenPercent=0' addconfig '[ApplicationServers]' addconfig "${session}=" addconfig "[${session}]" addconfig "Address=${session}" addconfig "InitialProgram=#${session}" # mapping table xorg -> citrix # citrix 1 = 16 colors # citrix 2 = 256 colors # citrix 4 = 16 bit # citrix 8 = 32 bit # try always 16 bit addconfig "DesiredColor=4" addconfig 'TransportDriver=TCP/IP' addconfig 'WinStationDriver=ICA 3.0' [[ -n ${user} ]] && addconfig "Username=${user}" [[ -n ${domain} ]] && addconfig "Domain=${domain}" [[ -n ${password} ]] && addconfig "ClearPassword=${password}" # use the right display settings case "${mode}" in # fullscreen mode fullscreen) addconfig 'UseFullScreen=Yes' addconfig 'NoWindowManager=True' addconfig "DesiredHRES=65535" addconfig "DesiredVRES=65535" ;; # seamless window mode seamless) addconfig 'TWIMode=On' ;; # a desired resolution *x*) addconfig "DesiredHRES=${mode%x*}" addconfig "DesiredVRES=${mode#*x}" ;; esac ;; del) [[ -n ${name} ]] || die "No name given" if [ -f ${MROOT}/${ICADIR}/"${name}".${ICASUFFIX} ] then rm ${MROOT}/${ICADIR}/"${name}".${ICASUFFIX} else eecho "No configured session named '${name}' exists." fi ;; print) list_files_in_directory ${MROOT}/${ICADIR} ;; query) eval sessionlist=( $(${MCORE_LIBDIR}/query-citrix-browser --session) ) sessioncount="${#sessionlist[*]}" for (( i=0; i