diff --git a/.gitignore b/.gitignore
index 0021961636df206a21be6dae05b5f1b16a82b493..679847acc9a7583eb1c25c3eb169f0e562c51e75 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1,2 @@
 testing/*
+*/.ipynb_checkpoints/*
diff --git a/Python/QA-005-Remote-Kernels.ipynb b/Python/QA-005-Remote-Kernels.ipynb
index 16441366b88f534a29a0b9d0b1bad6aba88d7e74..bda6f8585a5c316b97fd24978227edc7740cf2e6 100644
--- a/Python/QA-005-Remote-Kernels.ipynb
+++ b/Python/QA-005-Remote-Kernels.ipynb
@@ -14,8 +14,32 @@
     "These commands will install the required packages into your `~/.local/bin` and `~/.local/lib` directories by default in Linux/Mac. \n",
     "If you are using the **anaconda** then the packages will be installed there.\n",
     "\n",
-    "Make sure that the `/bin` path is in your `$PATH` environment variable.\n",
-    "\n",
+    "Make sure that the `/bin` path is in your `$PATH` environment variable."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 2,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "/home/opt/spack/opt/spack/linux-centos6-sandybridge/gcc-5.3.0/anaconda3-2020.07-6p2eqnrd2mu4masynsdqvrbfdit7fyuk/bin/pip3\n"
+     ]
+    }
+   ],
+   "source": [
+    "# This shows you which python distribution you are using\n",
+    "# pip is the python installer / not conda\n",
+    "!which pip3"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
     "## Install the required packages"
    ]
   },
@@ -53,7 +77,7 @@
    "source": [
     "# this might not be necessary for everyone\n",
     "# adjust the path accordingly to make sure that jupyter-kernelspec, jupyter and remote_ikernel can be found.\n",
-    "%env PATH=/home/mblaschek/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
+    "%env PATH=/home/${USER}/.local/bin:$PATH"
    ]
   },
   {
@@ -62,23 +86,30 @@
    "source": [
     "## Configure remote connection\n",
     "\n",
-    "Depending on your install, you might have one or two selections here. `jupyter-kernelspec` shows you the kernels that you can use. The one you installed the above packages with should be here. We don't need these anyway. Just so you know about that."
+    "Depending on your install, you might have one or two selections here. `jupyter-kernelspec` shows you the kernels that you can use. The one you installed the above packages with should be here. We don't need these anyway. Just so you know about that.\n",
+    "\n",
+    "\n",
+    "    jupyter-kernelspec [cmd]\n",
+    "        list\n",
+    "            List installed kernel specifications.\n",
+    "        install\n",
+    "            Install a kernel specification directory.\n",
+    "        remove\n",
+    "            Remove one or more Jupyter kernelspecs by name.\n"
    ]
   },
   {
    "cell_type": "code",
    "execution_count": 18,
-   "metadata": {
-    "scrolled": true
-   },
+   "metadata": {},
    "outputs": [
     {
      "name": "stdout",
      "output_type": "stream",
      "text": [
-      "Available kernels:\r\n",
-      "  anaconda3    /home/mblaschek/.local/share/jupyter/kernels/anaconda3\r\n",
-      "  python3      /home/mblaschek/.local/share/jupyter/kernels/python3\r\n"
+      "Available kernels:\n",
+      "  anaconda3    /home/mblaschek/.local/share/jupyter/kernels/anaconda3\n",
+      "  python3      /home/mblaschek/.local/share/jupyter/kernels/python3\n"
      ]
     }
    ],
@@ -95,16 +126,16 @@
      "name": "stdout",
      "output_type": "stream",
      "text": [
-      "{\r\n",
-      " \"argv\": [\r\n",
-      "  \"/home/mblaschek/anaconda3/bin/python\",\r\n",
-      "  \"-m\",\r\n",
-      "  \"ipykernel_launcher\",\r\n",
-      "  \"-f\",\r\n",
-      "  \"{connection_file}\"\r\n",
-      " ],\r\n",
-      " \"display_name\": \"Python 3(Ana)\",\r\n",
-      " \"language\": \"python\"\r\n",
+      "{\n",
+      " \"argv\": [\n",
+      "  \"/home/mblaschek/anaconda3/bin/python\",\n",
+      "  \"-m\",\n",
+      "  \"ipykernel_launcher\",\n",
+      "  \"-f\",\n",
+      "  \"{connection_file}\"\n",
+      " ],\n",
+      " \"display_name\": \"Python 3(Ana)\",\n",
+      " \"language\": \"python\"\n",
       "}"
      ]
     }
@@ -112,7 +143,7 @@
    "source": [
     "# This is the relevant file.\n",
     "# It contains the path to the executable and some names\n",
-    "!cat /home/mblaschek/.local/share/jupyter/kernels/anaconda3/kernel.json"
+    "!cat /home/${USER}/.local/share/jupyter/kernels/anaconda3/kernel.json"
    ]
   },
   {
@@ -129,6 +160,8 @@
     "\n",
     "    kernel-launcher miniconda3 ipython \n",
     "    \n",
+    "`kernel-launcher` will load the module and execute the executable (here: ipython)\n",
+    "    \n",
     "### Modules available on SRVX1\n",
     "```bash\n",
     ">>> module av\n",
@@ -157,7 +190,7 @@
     "2. Name: `PyS1` for Python on srvx1\n",
     "3. Host: `mblaschek@srvx1.img.univie.ac.at` username and server\n",
     "\n",
-    "In order to allow easy access adding the public key to ssh authentication is recommended. Otherwise set `export SSH_ASKPASS=1` and you should be prompted each time the connection is established."
+    "In order to allow easy access [adding the public key to ssh authentication](../SSH-VPN-VNC/SSH.md) is recommended. Otherwise set `export SSH_ASKPASS=1` and you should be prompted each time the connection is established."
    ]
   },
   {
@@ -169,7 +202,7 @@
      "name": "stdout",
      "output_type": "stream",
      "text": [
-      "Added kernel ['rik_ssh_mblaschek_srvx1_img_univie_ac_at_pys1']: SSH mblaschek@srvx1.img.univie.ac.at PyS1.\r\n"
+      "Added kernel ['rik_ssh_mblaschek_srvx1_img_univie_ac_at_pys1']: SSH mblaschek@srvx1.img.univie.ac.at PyS1.\n"
      ]
     }
    ],
@@ -191,10 +224,10 @@
      "name": "stdout",
      "output_type": "stream",
      "text": [
-      "Available kernels:\r\n",
-      "  anaconda3                                        /home/mblaschek/.local/share/jupyter/kernels/anaconda3\r\n",
-      "  python3                                          /home/mblaschek/.local/share/jupyter/kernels/python3\r\n",
-      "  rik_ssh_mblaschek_srvx1_img_univie_ac_at_pys1    /home/mblaschek/.local/share/jupyter/kernels/rik_ssh_mblaschek_srvx1_img_univie_ac_at_pys1\r\n"
+      "Available kernels:\n",
+      "  anaconda3                                        /home/mblaschek/.local/share/jupyter/kernels/anaconda3\n",
+      "  python3                                          /home/mblaschek/.local/share/jupyter/kernels/python3\n",
+      "  rik_ssh_mblaschek_srvx1_img_univie_ac_at_pys1    /home/mblaschek/.local/share/jupyter/kernels/rik_ssh_mblaschek_srvx1_img_univie_ac_at_pys1\n"
      ]
     }
    ],
@@ -212,29 +245,29 @@
      "name": "stdout",
      "output_type": "stream",
      "text": [
-      "{\r\n",
-      "  \"argv\": [\r\n",
-      "    \"/usr/bin/python3\",\r\n",
-      "    \"-m\",\r\n",
-      "    \"remote_ikernel\",\r\n",
-      "    \"--interface\",\r\n",
-      "    \"ssh\",\r\n",
-      "    \"--host\",\r\n",
-      "    \"mblaschek@srvx1.img.univie.ac.at\",\r\n",
-      "    \"--kernel_cmd\",\r\n",
-      "    \"kernel-launcher miniconda3 ipython kernel -f {host_connection_file}\",\r\n",
-      "    \"{connection_file}\"\r\n",
-      "  ],\r\n",
-      "  \"display_name\": \"SSH mblaschek@srvx1.img.univie.ac.at PyS1\",\r\n",
-      "  \"remote_ikernel_argv\": [\r\n",
-      "    \"/home/mblaschek/.local/bin/remote_ikernel\",\r\n",
-      "    \"manage\",\r\n",
-      "    \"--add\",\r\n",
-      "    \"--kernel_cmd=kernel-launcher miniconda3 ipython kernel -f {connection_file}\",\r\n",
-      "    \"--name=PyS1\",\r\n",
-      "    \"--interface=ssh\",\r\n",
-      "    \"--host=mblaschek@srvx1.img.univie.ac.at\"\r\n",
-      "  ]\r\n",
+      "{\n",
+      "  \"argv\": [\n",
+      "    \"/usr/bin/python3\",\n",
+      "    \"-m\",\n",
+      "    \"remote_ikernel\",\n",
+      "    \"--interface\",\n",
+      "    \"ssh\",\n",
+      "    \"--host\",\n",
+      "    \"mblaschek@srvx1.img.univie.ac.at\",\n",
+      "    \"--kernel_cmd\",\n",
+      "    \"kernel-launcher miniconda3 ipython kernel -f {host_connection_file}\",\n",
+      "    \"{connection_file}\"\n",
+      "  ],\n",
+      "  \"display_name\": \"SSH mblaschek@srvx1.img.univie.ac.at PyS1\",\n",
+      "  \"remote_ikernel_argv\": [\n",
+      "    \"/home/mblaschek/.local/bin/remote_ikernel\",\n",
+      "    \"manage\",\n",
+      "    \"--add\",\n",
+      "    \"--kernel_cmd=kernel-launcher miniconda3 ipython kernel -f {connection_file}\",\n",
+      "    \"--name=PyS1\",\n",
+      "    \"--interface=ssh\",\n",
+      "    \"--host=mblaschek@srvx1.img.univie.ac.at\"\n",
+      "  ]\n",
       "}"
      ]
     }
@@ -268,8 +301,36 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "of course the remote kernel can be used in a local jupyter notebook or lab.\n",
+    "of course the remote kernel can be used in a local jupyter notebook or lab."
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## Adding a custom kernel\n",
     "\n",
+    "The only thing that you need is the `ipython` executable and you can add any kernel to your lab."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "!remote_ikernel manage \\\n",
+    "    --add \\\n",
+    "    --kernel_cmd='/opt/anaconda3/bin/ipython kernel -f {connection_file}' \\\n",
+    "    --name='MyP3' \\\n",
+    "    --interface=ssh \\\n",
+    "    --host=mblaschek@srvx1.img.univie.ac.at"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
     "## Remarks\n",
     "\n",
     "When running kernels on remote machines, the notebooks themselves will be saved onto the local filesystem, but the kernel will only have access to filesystem of the remote machine running the kernel. If you need shared directories, set up `sshfs` between your machines."
@@ -285,7 +346,7 @@
  ],
  "metadata": {
   "kernelspec": {
-   "display_name": "Python 3",
+   "display_name": "Anaconda3 (2020.07)",
    "language": "python",
    "name": "python3"
   },
@@ -299,7 +360,7 @@
    "name": "python",
    "nbconvert_exporter": "python",
    "pygments_lexer": "ipython3",
-   "version": "3.8.5"
+   "version": "3.8.3"
   }
  },
  "nbformat": 4,
diff --git a/SSH-VPN-VNC/Questions.md b/SSH-VPN-VNC/Questions.md
new file mode 100644
index 0000000000000000000000000000000000000000..5796c330a027819f448dac9431f7efa7067d819e
--- /dev/null
+++ b/SSH-VPN-VNC/Questions.md
@@ -0,0 +1,101 @@
+# Questions and Answers
+Please feel free to add you questions and anwsers.
+
+[[_TOC_]]
+
+
+## Q: ssh using key authentication?
+ 
+In order to connect passwordless to a remote server a key needs to be generated.
+```
+$ ssh-keygen -b 4096
+Generating public/private rsa key pair.
+Enter passphrase (empty for no passphrase): 
+Enter same passphrase again: 
+Your identification has been saved in .ssh/id_rsa
+Your public key has been saved in .ssh/id_rsa.pub
+The key fingerprint is:
+SHA256:lHEKWnP+1vdNfbSELXApKpFvllcgCp3DHsgrbO2RYuo mblaschek@pop-os
+The key's randomart image is:
++---[RSA 4096]----+
+|    ..B =..o...  |
+|     =.&.=..ooo  |
+|  . o +.X o oo o.|
+|   * = + B o  o.o|
+|  + + . S + . ..+|
+| .   .   .   . oo|
+|.               o|
+| E               |
+|                 |
++----[SHA256]-----+
+```
+It is recommended to use a password to encrpyt the private key `.ssh/id_rsa`. However, this password is then required to login. 
+
+Todo add infos on `ssh-agent`
+
+# Q: How to transfer files between two VPN networks?
+
+You should be able to use an SSH tunnel via a gateway server
+
+Situation
+```
+  VPN-1                                              VPN-2
+__________    /|       ___________      /|         __________
+|  local |   | |       | gateway |     | |         | remote |
+|        |---| |----<>------     |   Firewall      |        |
+|        | Firewall    |    \---<>-----| |---------|        |
+__________   | |       ___________     | |         __________
+             |/                        |/
+```
+Assuming you're trying to transfer a file from/to a remote computer ("remote") from/to your local computer ("local"), 
+establish a tunnel via a third computer ("gateway") by typing this on your local computer:
+
+```bash
+$ ssh -fNL 12345:remote:22 gatewaylogin@gateway
+```
+Then you can run an unlimited amount of SCP commands on this tunnel (still typing on your local computer):
+
+```bash
+# scp [SRC] [DEST]
+$ scp -P 12345 remotelogin@localhost://path/to/remote/file /local/path/where/you/want/file
+```
+
+another option is to use `rsync` with a gateway command:
+```bash
+# rsync [SRC] [DEST]
+$ rsync -avz -r --stats --progress -e "ssh gateway ssh" remote:/src/documents/ /dest/documents 
+```
+**Note: key-based authentication is required from the gateway to the remote server using rsync.**
+Initial testing showed that using key-based authentication between gateway and remote is required.
+
+## Q: How to connect to Jet, SRVX8, SRVX2?
+
+Currently (01.2021) only `srvx1.img.univie.ac.at` and `login.univie.ac.at` are available from the internet.
+Please replace `[USER]` with your username on these servers and adjust the servers to your needs.
+
+```bash
+$ ssh -t [USER]@srvx1.img.univie.ac.at 'ssh [USER]@jet01.img.univie.ac.at'
+```
+or using the above `~/.ssh/config` you can do:
+```bash
+$ ssh -t login ssh jet
+```
+or using the connect script
+```bash
+$ connect2jet -g login jet
+```
+
+## Q: How to mount a remote file system on Linux (MAC)?
+You can us programs like [Filezilla](https://filezilla-project.org/) or [Cyberduck](https://cyberduck.io/) (MAC) to transfer files between remote and local host. But sometimes it is much easier to mount a remote file system and work on it like an external drive.
+You can use the [mountserver](mountserver) script to do so. This requires `sshfs` to be installed, on Linux that is in the standard repositories. A short into and some additional steps can be found [here](https://www.tjansson.dk/2008/01/autofs-and-sshfs-the-perfect-couple/).
+
+```bash
+$ mountserver [remote] [remote directory] [local directory]
+# example
+$ mountserver srvx1 /raid61/wetter /home/monkey/srvx1
+```
+
+This will mount the remote directory to the local directory. The local directory will be created if it does not exist. The directory should be empty before mounting, otherwise that will cause problems.
+
+
+
diff --git a/SSH-VPN-VNC/README.md b/SSH-VPN-VNC/README.md
index f4a8655f0ce9861b1bbf659fb56835a4afa527e6..699ba6f1423d82f565307d1503f00eb9e5ec82dc 100644
--- a/SSH-VPN-VNC/README.md
+++ b/SSH-VPN-VNC/README.md
@@ -4,303 +4,28 @@
 
 ## General Access
 Please use these methods to access the servers:
-1. SSH
-2. JupyterHub
-3. VNC
+1. [SSH](SSH.md)
+2. [JupyterHub](../TeachingHub.md)
+3. [VNC](VNC.md)
+4. [VPN](VPN.md)
 
-## SSH
-
-**From any computer in the IMGW subnet**: Log in via ssh by typing either of the following in a terminal (there are two redundant login nodes, jet01 and jet02). Replace `[USERNAME]` with your own.
-```bash
-ssh -X [USERNAME]@srvx1.img.univie.ac.at
-ssh -X [USERNAME]@srvx8.img.univie.ac.at
-ssh -X [USERNAME]@jet01.img.univie.ac.at
-ssh -X [USERNAME]@131.130.157.215
-ssh -X [USERNAME]@jet02.img.univie.ac.at
-ssh -X [USERNAME]@131.130.157.216
-```
-The `-X` option enables X11 forwarding via ssh, i.e., permits opening graphical windows.
-
-Consider using a `~/.ssh/config` configuration file to allow easier access like this:
-```
-Host *
-    ServerAliveInterval 60
-    ServerAliveCountMax 2
-
-Host srvx1
-    HostName srvx1.img.univie.ac.at
-    User [USERNAME]
-
-Host srvx2
-    HostName srvx2.img.univie.ac.at
-    User [USERNAME]
-Host srvx8
-    HostName srvx8.img.univie.ac.at
-    User [USERNAME]
-Host jet
-    HostName jet01.img.univie.ac.at
-    User [USERNAME]
-Host login
-    HostName login.univie.ac.at
-    User [U:Account USERNAME]
-```
-and replacing `[USERNAME]` and `[U:Account USERNAME]` with your usernames. Using such a file allows to connect like this `ssh srvx2` using the correct server adress and specified username. Copy this file as well on `login.univie.ac.at` and you can use commands like this: `ssh -t login ssh jet` to connect directly to `jet` via the `login` gateway.
-
-If you want to use ssh-keys you can also use different keys in `.ssh/config` per server with `IdentityFile ~/.ssh/id_rsa_for_server`.
-
-
-**From eduroam**: You should be able to log in as above.
-
-**From the outer world**: First connect to the [UniVie VPN](https://zid.univie.ac.at/en/vpn/), then start up a terminal and log in as above. Consider using [connect2vpn](connect2vpn) script to do so. Set your U:Account username as environmental variable `$VPN_USER` and run `$ connect2vpn`, select split (only adresses within the UNINET) or full (all connections) tunnel and watch the connection information update every 10 seconds.
-
-If you are a guest, you can apply for a [guest u:account](https://zid.univie.ac.at/uaccount/#c11096). This will give you access to eduroam and to the VPN. Your application needs to be endorsed by a staff member, who also determines the expiration date of the account.
-
-
-### Connect Script
-If you are using a terminal (Mac, Linux, WSL, ...) you can use the script [connect2jet](connect2jet) like this:
-```bash
-connect2jet -g [U:Account-Username]@login.univie.ac.at [Jet-Username]@jet01.img.univie.ac.at
-```
-
-There is also an option to forward a port, e.g. the VNC Port:
-
-```bash
-connect2jet -g [U:Account-Username]@login.univie.ac.at -p 5901 [Jet-Username]@jet01.img.univie.ac.at
-```
-which allows you to connect to `localhost:5901` and view the VNC session. Other gateway servers can be `srvx1.img.univie.ac.at`
-
-## VNC
-
-**Be aware! Everyone with the VNC password will get access to your account**
-
-It is recommended not to use VNC. Use **jupyterhub** or **screen** instead.
-
-The VNC (Virtual Network Computing) allows to view a graphical user interface (GUI) from a remote server in an viewer application. This can be used to launch GUI programs on the servers.
-
-Xvnc is the Unix VNC server. Applications can display themselves on Xvnc as if it were a normal display, but they will appear on any connected VNC viewers rather than on a physical screen. The VNC protocol uses the TCP/IP ports 5900+N, where N is the display number.
-
-### Setup
-First of all check if a VNC server is already running or not. Depending on the results you have two options:
-1. Use an existing. (Note the Port/Display Number)
-2. Stop all and start a new VNC server
-
-```bash
-# Check VNC Server directly, lists available with DISPLAY/PORT
-vncserver -list
-
-# Check for processes:
-ps ux | grep Xvnc
-
-# Kill a VNC Display
-vncserver -kill :[DISPLAY]
-
-# Start a new VNC Server
-vncserver
-```
-
-### Connecting, setting the window manager
-Use a VNC client (e.g. the [RealVNC VNC Viewer](https://www.realvnc.com/en/connect/download/viewer/windows/) on Windows, or [Remmina](https://remmina.org/) on any Linux distribution) and connect to `srvx?.img.univie.ac.at:[DISPLAY]`.
-
-Connect with a viewer:
-1. Hostname: `srvx1.img.univie.ac.at` or `jet01.img.univie.ac.at`
-2. VNC Port: `vncserver -list` or `systemctl status --user vncserver.slice`
-3. VNC passwort (`vncpasswd` allows to set this on the server)
-
-The VNC server will automatically start a graphical window manager/desktop environment. Details are stored in `.vnc/xstartup`. Your default configuration will load GNOME, and `.vnc/xstartup` will be something like this:
-```bash
-#!/bin/sh
- 
-unset SESSION_MANAGER
-unset DBUS_SESSION_BUS_ADDRESS
-/etc/X11/xinit/xinitrc
-# Assume either Gnome will be started by default when installed
-# We want to kill the session automatically in this case when user logs out. In case you modify
-# /etc/X11/xinit/Xclients or ~/.Xclients yourself to achieve a different result, then you should
-# be responsible to modify below code to avoid that your session will be automatically killed
-if [ -e /usr/bin/gnome-session ]; then
-    vncserver -kill $DISPLAY
-fi
-```
-It is recommended to use IceWM instead. This is a more lightweight alternative to GNOME. To switch to IceWM, first log out from GNOME and disconnect from your VNC viewer, then change your `.vnc/xstartup` to this:
-```bash
-#!/bin/sh
- 
-[ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
-xsetroot -solid grey
-vncconfig -iconic &
-xterm -geometry -sb -sl 500 -fn 9x15bold -title "$VNCDESKTOP Desktop" &
-icewm &
-```
-
-Finally stop/restart the VNC server.
-```bash
-$ systemctl --user restart vncserver@:[DISPLAY].service --now
-```
-
-Monitor the status:
-```bash
-# Like this
-$ systemctl --user status vncserver@:[DISPLAY].service
-# or
-$ systemctl --user status vncserver.slice
-
- vncserver@:7.service - Remote desktop service (VNC)
-   Loaded: loaded (/jetfs/home/mblaschek/.config/systemd/user/vncserver@.service; enabled; vendor preset: e>
-   Active: active (running) since Mon 2020-10-05 17:00:23 CEST; 3 months 8 days ago
-   CGroup: /user.slice/user-54212.slice/user@54212.service/vncserver.slice/vncserver@:7.service
-           ├─  32405 gpg-agent --homedir /root/.emacs.d/elpa/gnupg --use-standard-socket --daemon
-           ├─  59959 /usr/bin/gnome-keyring-daemon --start --foreground --components=secrets
-           ├─ 116498 /usr/lib64/firefox/firefox -contentproc -childID 47 -isForBrowser -prefsLen 10637 -pre>
-           ├─ 177114 /bin/sh /usr/bin/xdg-open about:blank
-           ├─ 177225 /usr/lib64/firefox/firefox about:blank
-...
-```
-
-### Change the resolution of your VNC Session
-
-`xrandr` gives you a list of available resolutions, that can be used.
-
-Change the resolution to e.g. 1920x1080 (HD):
-```bash
-$ xrandr -s 1920x1080 -d $DISPLAY
-```
-Adding resolutions according to your display's resolution have a look here: [add_xrandr_resolution.sh](add_xrandr_resolution.sh)
-
-Note: `$DISPLAY` is an environment variable that is usually set to your VNC server port.
-
-# VPN
-Requirements:
-- `u:account`
-
-Some servers are only accessible from within the virtual network of the university of Vienna. Therefore access from outside has to be granted via the [VPN-Service](https://vpn.univie.ac.at). Go there and login with your `u:account` and download the *Big-IP Edge* client for you system. 
-
-![](https://zid.univie.ac.at/fileadmin/user_upload/d_zid/zid-open/daten/datennetz/vpn/Windows/01_download_neu.png) 
+## Jupyterhub
 
-Links:
- * [ZID-VPN](https://vpn.univie.ac.at/f5-w-68747470733a2f2f7a69642e756e697669652e61632e6174$$/vpn/)
- * Linux (Ubuntu, Generic), Windows, Mac: [VPN user guides](https://vpn.univie.ac.at/f5-w-68747470733a2f2f7a69642e756e697669652e61632e6174$$/vpn/anleitungen/)
- * Arch based AUR package [AUR f5fpc](https://aur.archlinux.org/packages/f5fpc/)
+On SRVX1 the TeachingHub and on Jet01 the ResearchHub is running and available to users and students. Connect to either [https://srvx1.img.univie.ac.at](https://srvx1.img.univie.ac.at) from everywhere or [https://jet01.img.univie.ac.at](https://jet01.img.univie.ac.at) from within the university network.
 
-Follow the install instructions for Windows, Mac and Linux and make sure the software works.
+[Here](../TeachingHub.md) is more information on how to connect and authenticate.
 
-![](https://zid.univie.ac.at/fileadmin/user_upload/d_zid/zid-open/daten/datennetz/vpn/Windows/08_verbinden.png)
-
-On Windows and Mac you get a nice gui that requires you to fill in the VPN server: `vpn.univie.ac.at` and username and password from the `u:account`. On Linux execute the following:
-```
-f5fpc -s -t vpn.univie.ac.at -u [user]
-```
-The status can be checked with `f5fpc --info`.
 
 ## Screen
 [Screen](https://wiki.ubuntuusers.de/Screen/) is terminal session manager, that allows to start processes and reconnect to these processes after disconnection.
 This starts a new session
+
 ```bash
 $ screen -S longjob
 ```
+
 You can detach from this session with `CTRL + A + D` and reconnect again with `screen -r`.
 
 Multiple Sessions can be created and the output saved (`-L` Option).
 
 
-## Jupyterhub
-
-On SRVX1 the TeachingHub and on Jet01 the ResearchHub is running and available to users and students. Connect to either [https://srvx1.img.univie.ac.at](https://srvx1.img.univie.ac.at) from everywhere or [https://jet01.img.univie.ac.at](https://jet01.img.univie.ac.at) from within the university network.
-
-[Here](../TeachingHub.md) is more information on how to connect and authenticate.
-
-
-# Q: ssh using key authentication?
- 
-In order to connect passwordless to a remote server a key needs to be generated.
-```
-$ ssh-keygen -b 4096
-Generating public/private rsa key pair.
-Enter passphrase (empty for no passphrase): 
-Enter same passphrase again: 
-Your identification has been saved in .ssh/id_rsa
-Your public key has been saved in .ssh/id_rsa.pub
-The key fingerprint is:
-SHA256:lHEKWnP+1vdNfbSELXApKpFvllcgCp3DHsgrbO2RYuo mblaschek@pop-os
-The key's randomart image is:
-+---[RSA 4096]----+
-|    ..B =..o...  |
-|     =.&.=..ooo  |
-|  . o +.X o oo o.|
-|   * = + B o  o.o|
-|  + + . S + . ..+|
-| .   .   .   . oo|
-|.               o|
-| E               |
-|                 |
-+----[SHA256]-----+
-```
-It is recommended to use a password to encrpyt the private key `.ssh/id_rsa`. However, this password is then required to login. 
-
-Todo add infos on `ssh-agent`
-
-# Q: How to transfer files between two VPN networks?
-
-You should be able to use an SSH tunnel via a gateway server
-
-Situation
-```
-  VPN-1                                              VPN-2
-__________    /|       ___________      /|         __________
-|  local |   | |       | gateway |     | |         | remote |
-|        |---| |----<>------     |   Firewall      |        |
-|        | Firewall    |    \---<>-----| |---------|        |
-__________   | |       ___________     | |         __________
-             |/                        |/
-```
-Assuming you're trying to transfer a file from/to a remote computer ("remote") from/to your local computer ("local"), 
-establish a tunnel via a third computer ("gateway") by typing this on your local computer:
-
-```bash
-$ ssh -fNL 12345:remote:22 gatewaylogin@gateway
-```
-Then you can run an unlimited amount of SCP commands on this tunnel (still typing on your local computer):
-
-```bash
-# scp [SRC] [DEST]
-$ scp -P 12345 remotelogin@localhost://path/to/remote/file /local/path/where/you/want/file
-```
-
-another option is to use `rsync` with a gateway command:
-```bash
-# rsync [SRC] [DEST]
-$ rsync -avz -r --stats --progress -e "ssh gateway ssh" remote:/src/documents/ /dest/documents 
-```
-**Note: key-based authentication is required from the gateway to the remote server using rsync.**
-Initial testing showed that using key-based authentication between gateway and remote is required.
-
-# Q: How to connect to Jet, SRVX8, SRVX2?
-
-Currently (01.2021) only `srvx1.img.univie.ac.at` and `login.univie.ac.at` are available from the internet.
-Please replace `[USER]` with your username on these servers and adjust the servers to your needs.
-
-```bash
-$ ssh -t [USER]@srvx1.img.univie.ac.at 'ssh [USER]@jet01.img.univie.ac.at'
-```
-or using the above `~/.ssh/config` you can do:
-```bash
-$ ssh -t login ssh jet
-```
-or using the connect script
-```bash
-$ connect2jet -g login jet
-```
-
-# Q: How to mount a remote file system on Linux (MAC)?
-You can us programs like [Filezilla](https://filezilla-project.org/) or [Cyberduck](https://cyberduck.io/) (MAC) to transfer files between remote and local host. But sometimes it is much easier to mount a remote file system and work on it like an external drive.
-You can use the [mountserver](mountserver) script to do so. This requires `sshfs` to be installed, on Linux that is in the standard repositories. A short into and some additional steps can be found [here](https://www.tjansson.dk/2008/01/autofs-and-sshfs-the-perfect-couple/).
-
-```bash
-$ mountserver [remote] [remote directory] [local directory]
-# example
-$ mountserver srvx1 /raid61/wetter /home/monkey/srvx1
-```
-
-This will mount the remote directory to the local directory. The local directory will be created if it does not exist. The directory should be empty before mounting, otherwise that will cause problems.
-
-
-
diff --git a/SSH-VPN-VNC/SSH.md b/SSH-VPN-VNC/SSH.md
new file mode 100644
index 0000000000000000000000000000000000000000..861f42fdcb9a05908a77dcb3448053ba8ddc42b8
--- /dev/null
+++ b/SSH-VPN-VNC/SSH.md
@@ -0,0 +1,60 @@
+# SSH
+
+**From any computer in the IMGW subnet**: Log in via ssh by typing either of the following in a terminal (there are two redundant login nodes, jet01 and jet02). Replace `[USERNAME]` with your own.
+```bash
+ssh -X [USERNAME]@srvx1.img.univie.ac.at
+ssh -X [USERNAME]@srvx8.img.univie.ac.at
+ssh -X [USERNAME]@jet01.img.univie.ac.at
+ssh -X [USERNAME]@131.130.157.215
+ssh -X [USERNAME]@jet02.img.univie.ac.at
+ssh -X [USERNAME]@131.130.157.216
+```
+The `-X` option enables X11 forwarding via ssh, i.e., permits opening graphical windows.
+
+Consider using a `~/.ssh/config` configuration file to allow easier access like this:
+```
+Host *
+    ServerAliveInterval 60
+    ServerAliveCountMax 2
+
+Host srvx1
+    HostName srvx1.img.univie.ac.at
+    User [USERNAME]
+
+Host srvx2
+    HostName srvx2.img.univie.ac.at
+    User [USERNAME]
+Host srvx8
+    HostName srvx8.img.univie.ac.at
+    User [USERNAME]
+Host jet
+    HostName jet01.img.univie.ac.at
+    User [USERNAME]
+Host login
+    HostName login.univie.ac.at
+    User [U:Account USERNAME]
+```
+and replacing `[USERNAME]` and `[U:Account USERNAME]` with your usernames. Using such a file allows to connect like this `ssh srvx2` using the correct server adress and specified username. Copy this file as well on `login.univie.ac.at` and you can use commands like this: `ssh -t login ssh jet` to connect directly to `jet` via the `login` gateway.
+
+If you want to use ssh-keys you can also use different keys in `.ssh/config` per server with `IdentityFile ~/.ssh/id_rsa_for_server`.
+
+
+**From eduroam**: You should be able to log in as above.
+
+**From the outer world**: First connect to the [UniVie VPN](https://zid.univie.ac.at/en/vpn/), then start up a terminal and log in as above. Consider using [connect2vpn](connect2vpn) script to do so. Set your U:Account username as environmental variable `$VPN_USER` and run `$ connect2vpn`, select split (only adresses within the UNINET) or full (all connections) tunnel and watch the connection information update every 10 seconds.
+
+If you are a guest, you can apply for a [guest u:account](https://zid.univie.ac.at/uaccount/#c11096). This will give you access to eduroam and to the VPN. Your application needs to be endorsed by a staff member, who also determines the expiration date of the account.
+
+
+### Connect Script
+If you are using a terminal (Mac, Linux, WSL, ...) you can use the script [connect2jet](connect2jet) like this:
+```bash
+connect2jet -g [U:Account-Username]@login.univie.ac.at [Jet-Username]@jet01.img.univie.ac.at
+```
+
+There is also an option to forward a port, e.g. the VNC Port:
+
+```bash
+connect2jet -g [U:Account-Username]@login.univie.ac.at -p 5901 [Jet-Username]@jet01.img.univie.ac.at
+```
+which allows you to connect to `localhost:5901` and view the VNC session. Other gateway servers can be `srvx1.img.univie.ac.at`
diff --git a/SSH-VPN-VNC/VNC.md b/SSH-VPN-VNC/VNC.md
new file mode 100644
index 0000000000000000000000000000000000000000..55261a5bfc53f8fc31d8213d46f2980be8639abe
--- /dev/null
+++ b/SSH-VPN-VNC/VNC.md
@@ -0,0 +1,98 @@
+# VNC
+
+**Be aware! Everyone with the VNC password will get access to your account**
+
+It is recommended not to use VNC. Use **jupyterhub** or **screen** instead.
+
+The VNC (Virtual Network Computing) allows to view a graphical user interface (GUI) from a remote server in an viewer application. This can be used to launch GUI programs on the servers.
+
+Xvnc is the Unix VNC server. Applications can display themselves on Xvnc as if it were a normal display, but they will appear on any connected VNC viewers rather than on a physical screen. The VNC protocol uses the TCP/IP ports 5900+N, where N is the display number.
+
+### Setup
+First of all check if a VNC server is already running or not. Depending on the results you have two options:
+1. Use an existing. (Note the Port/Display Number)
+2. Stop all and start a new VNC server
+
+```bash
+# Check VNC Server directly, lists available with DISPLAY/PORT
+vncserver -list
+
+# Check for processes:
+ps ux | grep Xvnc
+
+# Kill a VNC Display
+vncserver -kill :[DISPLAY]
+
+# Start a new VNC Server
+vncserver
+```
+
+### Connecting, setting the window manager
+Use a VNC client (e.g. the [RealVNC VNC Viewer](https://www.realvnc.com/en/connect/download/viewer/windows/) on Windows, or [Remmina](https://remmina.org/) on any Linux distribution) and connect to `srvx?.img.univie.ac.at:[DISPLAY]`.
+
+Connect with a viewer:
+1. Hostname: `srvx1.img.univie.ac.at` or `jet01.img.univie.ac.at`
+2. VNC Port: `vncserver -list` or `systemctl status --user vncserver.slice`
+3. VNC passwort (`vncpasswd` allows to set this on the server)
+
+The VNC server will automatically start a graphical window manager/desktop environment. Details are stored in `.vnc/xstartup`. Your default configuration will load GNOME, and `.vnc/xstartup` will be something like this:
+```bash
+#!/bin/sh
+ 
+unset SESSION_MANAGER
+unset DBUS_SESSION_BUS_ADDRESS
+/etc/X11/xinit/xinitrc
+# Assume either Gnome will be started by default when installed
+# We want to kill the session automatically in this case when user logs out. In case you modify
+# /etc/X11/xinit/Xclients or ~/.Xclients yourself to achieve a different result, then you should
+# be responsible to modify below code to avoid that your session will be automatically killed
+if [ -e /usr/bin/gnome-session ]; then
+    vncserver -kill $DISPLAY
+fi
+```
+It is recommended to use IceWM instead. This is a more lightweight alternative to GNOME. To switch to IceWM, first log out from GNOME and disconnect from your VNC viewer, then change your `.vnc/xstartup` to this:
+```bash
+#!/bin/sh
+ 
+[ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
+xsetroot -solid grey
+vncconfig -iconic &
+xterm -geometry -sb -sl 500 -fn 9x15bold -title "$VNCDESKTOP Desktop" &
+icewm &
+```
+
+Finally stop/restart the VNC server.
+```bash
+$ systemctl --user restart vncserver@:[DISPLAY].service --now
+```
+
+Monitor the status:
+```bash
+# Like this
+$ systemctl --user status vncserver@:[DISPLAY].service
+# or
+$ systemctl --user status vncserver.slice
+
+ vncserver@:7.service - Remote desktop service (VNC)
+   Loaded: loaded (/jetfs/home/mblaschek/.config/systemd/user/vncserver@.service; enabled; vendor preset: e>
+   Active: active (running) since Mon 2020-10-05 17:00:23 CEST; 3 months 8 days ago
+   CGroup: /user.slice/user-54212.slice/user@54212.service/vncserver.slice/vncserver@:7.service
+           ├─  32405 gpg-agent --homedir /root/.emacs.d/elpa/gnupg --use-standard-socket --daemon
+           ├─  59959 /usr/bin/gnome-keyring-daemon --start --foreground --components=secrets
+           ├─ 116498 /usr/lib64/firefox/firefox -contentproc -childID 47 -isForBrowser -prefsLen 10637 -pre>
+           ├─ 177114 /bin/sh /usr/bin/xdg-open about:blank
+           ├─ 177225 /usr/lib64/firefox/firefox about:blank
+...
+```
+
+### Change the resolution of your VNC Session
+
+`xrandr` gives you a list of available resolutions, that can be used.
+
+Change the resolution to e.g. 1920x1080 (HD):
+```bash
+$ xrandr -s 1920x1080 -d $DISPLAY
+```
+Adding resolutions according to your display's resolution have a look here: [add_xrandr_resolution.sh](add_xrandr_resolution.sh)
+
+Note: `$DISPLAY` is an environment variable that is usually set to your VNC server port.
diff --git a/SSH-VPN-VNC/VPN.md b/SSH-VPN-VNC/VPN.md
new file mode 100644
index 0000000000000000000000000000000000000000..6553ca8877b91e21095c4e2a0196153608d1402f
--- /dev/null
+++ b/SSH-VPN-VNC/VPN.md
@@ -0,0 +1,22 @@
+# VPN
+Requirements:
+- `u:account`
+
+Some servers are only accessible from within the virtual network of the university of Vienna. Therefore access from outside has to be granted via the [VPN-Service](https://vpn.univie.ac.at). Go there and login with your `u:account` and download the *Big-IP Edge* client for you system. 
+
+![](https://zid.univie.ac.at/fileadmin/user_upload/d_zid/zid-open/daten/datennetz/vpn/Windows/01_download_neu.png) 
+
+Links:
+ * [ZID-VPN](https://vpn.univie.ac.at/f5-w-68747470733a2f2f7a69642e756e697669652e61632e6174$$/vpn/)
+ * Linux (Ubuntu, Generic), Windows, Mac: [VPN user guides](https://vpn.univie.ac.at/f5-w-68747470733a2f2f7a69642e756e697669652e61632e6174$$/vpn/anleitungen/)
+ * Arch based AUR package [AUR f5fpc](https://aur.archlinux.org/packages/f5fpc/)
+
+Follow the install instructions for Windows, Mac and Linux and make sure the software works.
+
+![](https://zid.univie.ac.at/fileadmin/user_upload/d_zid/zid-open/daten/datennetz/vpn/Windows/08_verbinden.png)
+
+On Windows and Mac you get a nice gui that requires you to fill in the VPN server: `vpn.univie.ac.at` and username and password from the `u:account`. On Linux execute the following:
+```
+f5fpc -s -t vpn.univie.ac.at -u [user]
+```
+The status can be checked with `f5fpc --info`.
\ No newline at end of file