Skip to content
Snippets Groups Projects
Commit 301181ae authored by Mathis Rosenhauer's avatar Mathis Rosenhauer
Browse files

Update doc

parent 7736e1fd
No related branches found
No related tags found
No related merge requests found
#!/bin/bash
#
# Copyright 2017
#
# Mathis Rosenhauer
# Deutsches Klimarechenzentrum GmbH
# Bundesstr. 45a
# 20146 Hamburg
# Germany
# Copyright 2017 Deutsches Klimarechenzentrum GmbH
#
# All rights reserved.
#
......@@ -37,50 +31,80 @@
#
# startvnc
#
# Starts vncserver on a GPU node by submitting a generated job script.
# A local vncviewer client is used to connect to the server over an
# encypted ssh tunnel. After the client shuts down, the server job is
# terminated.
# This script is intended to be used on your local workstation running
# Ubuntu or Fedora Linux or macOS (tested). Other Unix flavors may
# work as well. It allows you to connect to one of DKRZ's
# visualization nodes to work remotely on your visualizations.
#
# Technically, it starts a VNC server on one of the GPU nodes by
# submitting a generated job script. A local vncviewer client is used
# to connect to the server over an encypted ssh tunnel. After the
# client shuts down, the server job is terminated.
#
# Interrupting the script with Ctrl-C should clean up and kill a
# running or queued job. That may take a couple of seconds so be
# patient.
# Your local vncviewer client has to support the -via
# option. TigerVNC, TightVNC, and TurboVNC are known to work.
#
# The vncviewer client has to support the -via option. TurboVNC,
# TigerVNC and TightVNC are known to work.
# In case of problems contact Mathis Rosenhauer <rosenhauer@dkrz.de>.
#
set -eu
# Default settings
# LDAP username
SVNC_USERNAME=""
#
# You can change the settings here or override them with command line
# options. SVNC_ACCTCODE is the only parameter you have to provide if
# your local username matches your username on the frontend and if
# vncviewer is installed in the standard location (tight/tigervnc on
# Linux for example).
# Project account code
SVNC_ACCTCODE=""
# Session run time in minutes
SVNC_RUNTIME=240
# LDAP username
#
# Specify your username on the login node if it is not your local
# username.
SVNC_USERNAME=$(id -un)
# Quality of service
SVNC_QOS="normal"
# Path to local vncviewer
#
# On Linux and other Unix systems chances are that vncviewer is
# installed in /usr/bin. If this is not the case, e.g. if you use
# TurboVNC or if you are on macOS, then change this parameter.
SVNC_VNCVIEWER="/usr/bin/vncviewer"
# Resolution of remote desktop window
#
# This is just the initial resolution. Resizing the vncviewer window
# later should also work.
SVNC_GEOMETRY="1920x1200"
# Path to local vncviewer
SVNC_VNCVIEWER="/usr/bin/vncviewer"
# Session run time in minutes
SVNC_RUNTIME=240
# Uncomment this if you use TurboVNC as vncviewer
#readonly SVNC_VNC_OPTIONS="-extssh"
# Quality of service
SVNC_QOS="normal"
# Frontend host. Must be directly accessible from client. The frontend
# and the node where vncserver is running need a shared home file
# system.
# Uncomment this if you use TurboVNC as vncviewer.
#
# TurboVNC will work without this option but then it will use its own
# implementation of ssh which dosen't support public key auth among other
# things.
#
# readonly SVNC_VNC_OPTIONS="-extssh"
# Frontend host
#
# Must be directly accessible from client. The frontend and the node
# where vncserver is running need a shared home file system. You will
# have to change this for other sites than DKRZ (along with many other
# things).
readonly SVNC_FRONTEND_HOST="mistral.dkrz.de"
# Copy vncpassword temporarily to the local workstation
#
# If your vncviewer client has trouble with TurboVNC's password format
# then disable this option (set to "false" or comment).
readonly SVNC_PASSWORD="true"
......@@ -88,13 +112,14 @@ clean_up () {
trap - ERR EXIT
set +e
if [[ -n ${vnc_host} ]]; then
if [[ -n ${vnc_host:-} ]]; then
echo "Killing vncserver :${vnc_display} on ${vnc_host}."
ssh_frontend "ssh ${vnc_host} \"/opt/TurboVNC/bin/vncserver \
-kill :${vnc_display}\""
fi
echo "Removing job."
if [[ -n ${job_id} ]]; then
if [[ -n ${job_id:-} ]]; then
echo "Removing job ${job_id}."
ssh_frontend "scancel -Q ${job_id}; sleep 1; \
cd .startvnc && rm -f out.${job_id}"
else
......@@ -158,8 +183,8 @@ parse_options () {
readonly SVNC_VNCVIEWER
readonly SVNC_VNC_OPTIONS
if [[ -z ${SVNC_ACCTCODE} ]] || [[ -z ${SVNC_USERNAME} ]]; then
printf "ERROR: Please specify at least username and acctcode.\n\n" >&2
if [[ -z ${SVNC_ACCTCODE} ]]; then
printf "ERROR: Please specify an acctcode.\n\n" >&2
usage
exit 1
fi
......@@ -179,7 +204,7 @@ submit_vnc_job () {
ssh_frontend "cd .startvnc && sbatch" <<EOF
#!/bin/bash -l
#SBATCH --partition=gpu
#SBATCH --ntasks=12
#SBATCH --ntasks=24
#SBATCH --qos=${SVNC_QOS}
#SBATCH --time=${SVNC_RUNTIME}
#SBATCH --account=${SVNC_ACCTCODE}
......@@ -221,14 +246,17 @@ main () {
local 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"
if [[ ${SVNC_PASSWORD} = "true" ]]; then
echo "Fetching password from frontend."
ssh_frontend "cat .vnc/passwd" > ${HOME}/vnc_passwd
vnc_options+=" -passwd ${HOME}/vnc_passwd"
fi
echo "Connecting vncviewer to ${vnc_host}.dkrz.de"
"${SVNC_VNCVIEWER}" ${vnc_options} :${vnc_display}
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment