diff --git a/start-vnc b/start-vnc index b09876c82df49db6e3417ad795b46926117e7c10..6fb0b94182ccb73bd2f689a14d990fdd5b1c0693 100755 --- a/start-vnc +++ b/start-vnc @@ -64,7 +64,7 @@ SVNC_ACCTCODE="" # # Specify your username on the login node if it is not your local # username. -SVNC_USERNAME=$(id -un) +SVNC_USERNAME="$(id -un)" # Path to local vncviewer # @@ -142,17 +142,29 @@ clean_up () { } usage () { - printf "Usage: %s [OPTIONS]\n" $(basename $0) >&2 - printf -- "-u username\n-A acctcode\n-g geometry\n-n nodes\n" >&2 - printf -- "-q qos\n-t time\n-v path_to_vncviewer\n" >&2 - printf -- "-x vncviewer_options\n" >&2 + cat <<EOF +Usage: $(basename "$0") [OPTION] + +Available values for OPTION include: + + -A acctcode acctcode of job + -g geometry initial geometry of vnc window + -n nodes number of nodes + -q qos job qos + -t time job runtime + -u username use username for login + -v path path to vncviewer program + -x options addidtional options for vncviewer + +EOF } ssh_frontend () { local command="$1" local extra_options="${2:-}" - local options="${extra_options} -o ForwardX11=no \ - -o ControlPath=${ssh_socket_dir}/control:%h:%p:%r" + local options + options="${extra_options} -o ForwardX11=no \ + -o ControlPath=${ssh_socket_dir}/control:%h:%p:%r" ssh ${options} "${SVNC_USERNAME}@${SVNC_FRONTEND_HOST}" "${command}" } @@ -208,10 +220,11 @@ prepare_vncserver () { } submit_vnc_job () { + local sbatch_resources if [[ ${SVNC_NODES} = "half" ]]; then - local sbatch_resources="#SBATCH --ntasks=24" + sbatch_resources="#SBATCH --ntasks=24" else - local sbatch_resources="#SBATCH --nodes=${SVNC_NODES}" + sbatch_resources="#SBATCH --nodes=${SVNC_NODES}" sbatch_resources+=$'\n#SBATCH --exclusive' fi ssh_frontend "cd .startvnc && sbatch" <<EOF @@ -236,8 +249,8 @@ logfile=\${HOME}/.startvnc/out.${job_id} while [[ -z \${host_and_display} ]]; do sleep 1 if [[ -f \${logfile} ]]; then - host_and_display=\$(grep -Po "started on display \Kmg[0-9]+:[0-9]+" \ - \${logfile}) + host_and_display="\$(grep -Po "started on display \Kmg[0-9]+:[0-9]+" \ + \${logfile})" fi printf "." >&2 done @@ -250,22 +263,24 @@ main () { parse_options "$@" trap clean_up INT QUIT TERM ERR EXIT - ssh_socket_dir=$(mktemp -d "${HOME}/.ssh/socket.XXXXX") + ssh_socket_dir="$(mktemp -d "${HOME}/.ssh/socket.XXXXX")" ssh_frontend "" "-MNf" prepare_vncserver echo "Submitting vncserver job." - job_id=$(submit_vnc_job) + job_id="$(submit_vnc_job)" printf "Waiting for job ${job_id} to start" >&2 - local host_and_display=$(get_vnc_host_and_display "$job_id") + local host_and_display + host_and_display="$(get_vnc_host_and_display "$job_id")" vnc_host=${host_and_display%:*} vnc_display=${host_and_display#*:} echo "Vncserver started on node ${vnc_host}.dkrz.de display \ :${vnc_display}." - local vnc_options="${SVNC_VNC_OPTIONS:-} \ - -via ${SVNC_USERNAME}@${vnc_host}.dkrz.de" + local vnc_options + vnc_options="${SVNC_VNC_OPTIONS:-} \ + -via ${SVNC_USERNAME}@${vnc_host}.dkrz.de" if [[ ${SVNC_PASSWORD} = "true" ]]; then echo "Fetching password from frontend." ssh_frontend "cat .vnc/passwd" > ${HOME}/vnc_passwd