File x2gostartagent of Package x2go

#!/bin/bash

X2GO_PORT=49 #First port for X2GO=50
SSH_PORT=30000 #First ssh port 30001

X2GO_ROOT=${HOME}/.x2go
REMOTE=localhost
X2GO_CLIENT=`echo $SSH_CLIENT | awk '{print $1}'`
X2GO_GEOMETRY=$1
X2GO_LINK=$2
X2GO_PACK=$3
X2GO_TYPE=$4
X2GO_KBD_LAYOUT=$5
X2GO_KBD_TYPE=$6
X2GO_SET_KBD=$7
X2GO_STYPE=$8
X2GO_CMD=$9
X2GO_RESIZE=0
X2GO_FULLSCREEN=0


export NX_CLIENT=/usr/bin/x2gosuspend-agent

COLORDEPTH=`echo "$X2GO_TYPE"|awk '{split($0,a,"-depth_"); print a[2]}'`

SESSION_TYPE="D"

if [ "$X2GO_STYPE" == "R" ]
then
  SESSION_TYPE="R"
elif  [ "$X2GO_STYPE" == "S" ]
then
  SESSION_TYPE="S"
fi

if [ "$X2GO_CLIENT" == "" ]
then
   X2GO_CLIENT=$HOSTNAME
fi


USED_DISPLAYS=`sudo x2gopgwrapper getdisplays $HOSTNAME`


while [ "`echo \"$OUTPUT\" | awk '{print $1,$3}'`" != "INSERT 1" ]
do
 X2GO_PORT=$(($X2GO_PORT + 1))
 X2GO_PORT=`echo "for(\\$i=$X2GO_PORT;\\$br ne \"true\";\\$i++){ if(\"$USED_DISPLAYS\" =~ m/\\|\\$i\\|/){\\$br=\"false\";}else{\\$br=\"true\";print \\$i;}}"|perl`

 if  [ -e "/tmp/.X${X2GO_PORT}-lock" ] || [ -e "/tmp/.X11-unix/X${X2GO_PORT}" ] 
 then
    OUTPUT="XXX"
 else
   SESSION_NAME=${USER}-${X2GO_PORT}-`date +"%s"`
   if [ "$COLORDEPTH" != "" ]
   then
       SESSION_NAME="$SESSION_NAME"_st${SESSION_TYPE}${X2GO_CMD}_dp${COLORDEPTH}
   fi
   OUTPUT=`sudo x2gopgwrapper insertsession $X2GO_PORT $HOSTNAME $SESSION_NAME`
 fi 
done


USED_PORTS=`sudo x2gopgwrapper getports $HOSTNAME`


while [ "$GR_PORT" == "" ] || [ "$SOUND_PORT" == "" ] || [ "$FS_PORT" == "" ]
do
  OUTPUT=""
  while [ "`echo \"$OUTPUT\" | awk '{print $1,$3}'`" != "INSERT 1" ]
  do
    SSH_PORT=$(($SSH_PORT + 1))

    ##check if port in /etc/services

    SSH_PORT=`echo "for(\\$i=$SSH_PORT;\\$br ne \"true\";\\$i++){ if(\"$USED_PORTS\" =~ m/\\|\\$i\\|/){\\$br=\"false\";}else{\\$br=\"true\";print \\$i;}}"|perl`

    SERV=`grep $SSH_PORT /etc/services`
    if [ "$SERV" == "" ]
    then
      CR=`echo "use IO::Socket; \\$sock = new IO::Socket::INET ( LocalAddr => 'localhost',LocalPort => \"$SSH_PORT\",\
                                  Proto => 'tcp',Listen => 1,Reuse =>1 ) or die ;print \"OK\";close(\\$sock);"|perl 2>/dev/null`
      if [ "$CR" == "OK" ]
      then
         OUTPUT=`sudo x2gopgwrapper insertport $HOSTNAME $SESSION_NAME $SSH_PORT`
      fi
    fi
  done
  if [ "$GR_PORT" == "" ]
  then
     GR_PORT=$SSH_PORT
  elif [ "$SOUND_PORT" == "" ]
  then
     SOUND_PORT=$SSH_PORT
  else
     FS_PORT=$SSH_PORT
  fi
done



if [ "$X2GO_GEOMETRY" == "" ]
then
    X2GO_GEOMETRY=fullscreen
fi

if [ "$X2GO_GEOMETRY" == "fullscreen" ]
then
    X2GO_RESIZE=1
    X2GO_FULLSCREEN=1
fi

SESSION_DIR=${X2GO_ROOT}/C-${SESSION_NAME}

if [ ! -d $X2GO_ROOT ]
then
    mkdir $X2GO_ROOT
fi

if [ ! -d $X2GO_ROOT/ssh ]
then
    mkdir $X2GO_ROOT/ssh
fi

if [ ! -d $SESSION_DIR ]
then
    mkdir $SESSION_DIR
fi

X2GO_COOKIE=`mcookie`


LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:${X2GO_LIB}"
export LD_LIBRARY_PATH

PATH="${PATH}:${X2GO_BIN}/"
export PATH


xauth add ${HOSTNAME}/unix:${X2GO_PORT} MIT-MAGIC-COOKIE-1 ${X2GO_COOKIE}
xauth add ${HOSTNAME}:${X2GO_PORT} MIT-MAGIC-COOKIE-1 ${X2GO_COOKIE}


X2GO_HOST=nx/nx,link=${X2GO_LINK},pack=${X2GO_PACK},limit=0,root=${SESSION_DIR},cache=8M,images=32M,type=${X2GO_TYPE},\
id=${SESSION_NAME},\
cookie=$X2GO_COOKIE,errors=${SESSION_DIR}/session.log,keyboard=${X2GO_KBD_LAYOUT},kbtype=${X2GO_KBD_TYPE},\
keybd=${X2GO_SET_KBD},\
geometry=${X2GO_GEOMETRY},resize=${X2GO_RESIZE},fullscreen=${X2GO_FULLSCREEN},accept=${REMOTE},listen=${GR_PORT}


echo "${X2GO_HOST}:${X2GO_PORT}" >${SESSION_DIR}/options

NX_AGENT=:${X2GO_PORT}


SAVED_DISPLAY=$DISPLAY

DISPLAY=nx/nx,options=${SESSION_DIR}/options:${X2GO_PORT} 
export DISPLAY


LD_LIBRARY_PATH=$X2GO_LIB x2goagent  -$SESSION_TYPE -geometry ${X2GO_GEOMETRY} -name "X2GO-${SESSION_NAME}"  ${NX_AGENT} 2>${SESSION_DIR}/session.log &

X2GO_AGENT_PID=$!

X2GO_SND_PORT=1024
sudo x2gopgwrapper createsession $X2GO_COOKIE $X2GO_AGENT_PID $X2GO_CLIENT $GR_PORT $SOUND_PORT $FS_PORT $SESSION_NAME > /dev/null

echo $X2GO_PORT
echo $X2GO_COOKIE
echo $X2GO_AGENT_PID
echo $SESSION_NAME
echo $GR_PORT
echo $SOUND_PORT
echo $FS_PORT
openSUSE Build Service is sponsored by