diff --git a/start-vnc b/start-vnc index 9fe1bdeaab8b32ec5e7583116d8ddfa248c10bde..2a4a728ca427b51e370ac6efd3e5209ef9c182f0 100755 --- a/start-vnc +++ b/start-vnc @@ -111,33 +111,40 @@ readonly SVNC_FRONTEND_HOST="mistral.dkrz.de" # # If your vncviewer client has trouble with TurboVNC's password format # then disable this option (set to "false" or comment). -readonly SVNC_PASSWORD="true" +readonly SVNC_PASSWORD=true + +# Kill vncserver job running if script ends for some reason +readonly SVNC_KILLSERVER=true clean_up () { trap - ERR EXIT set +e - 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 - - if [[ -n ${job_id:-} ]]; then - echo "Removing job ${job_id}." - ssh_frontend "scancel -Q ${job_id}; sleep 1; \ - rm -f .startvnc/out.${job_id}" + if ${SVNC_KILLSERVER}; 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 + + if [[ -n ${job_id:-} ]]; then + echo "Removing job ${job_id}." + ssh_frontend "scancel -Q ${job_id}; sleep 1; \ + rm -f .startvnc/out.${job_id}" + else + echo "Job ID not available. Make sure the vncjob is not running!" + ssh_frontend "squeue -u ${SVNC_USERNAME}" + fi else - echo "Job ID not available. Make sure the vncjob is not running!" - ssh_frontend "squeue -u ${SVNC_USERNAME}" + echo "Kept job ${job_id} running." fi ssh_frontend "" "-O exit" rmdir "${ssh_socket_dir}" # Remove local vnc PasswordFile - if [[ ${SVNC_PASSWORD} = "true" ]]; then + if ${SVNC_PASSWORD}; then rm -f "vnc_passwd" fi exit @@ -288,21 +295,21 @@ main () { echo "Vncserver started on node ${vnc_host}.dkrz.de display \ :${vnc_display}." - local vnc_port_local=$((5900 + RANDOM % 100)) # WSL doesn't seem to detect used ports so randomize # local port to reduce risk of masking. + local vnc_port_local=$((5900 + RANDOM % 100)) local vnc_port_remote=$(( 5900 + vnc_display )) - while ! ssh -o ForwardX11=no \ - -o StrictHostKeyChecking=accept-new \ - -L "${vnc_port_local}:localhost:${vnc_port_remote}" \ - -Nf \ - "${SVNC_USERNAME}@${vnc_host}.dkrz.de"; do + until ssh -o ForwardX11=no \ + -o StrictHostKeyChecking=accept-new \ + -L "${vnc_port_local}:localhost:${vnc_port_remote}" \ + -Nf \ + "${SVNC_USERNAME}@${vnc_host}.dkrz.de"; do vnc_port_local=$((5900 + RANDOM % 100)) echo "Trying local port ${vnc_port_local}." done local client_options client_options="${SVNC_CLIENT_OPTIONS:-}" - if [[ ${SVNC_PASSWORD} = "true" ]]; then + if ${SVNC_PASSWORD}; then echo "Fetching password from frontend." ssh_frontend "cat .vnc/passwd" > vnc_passwd client_options+=" -passwd vnc_passwd"