diff --git a/terminalserver/tasks/main.yml b/terminalserver/tasks/main.yml
new file mode 100644
index 0000000000000000000000000000000000000000..288090f5f15dbae5a8d5bf22294c79d629bfe3f8
--- /dev/null
+++ b/terminalserver/tasks/main.yml
@@ -0,0 +1,13 @@
+---
+# file: roles/portal/tasks/main.yml
+
+- name: ensure additional software is installed
+  apt: name={{ item }} state=present
+  with_items:
+    - etherwake
+    - wakeonlan
+  tags:
+    - packages
+
+- include: x2go.yml
+- meta: flush_handlers
diff --git a/terminalserver/tasks/x2go.yml b/terminalserver/tasks/x2go.yml
new file mode 100644
index 0000000000000000000000000000000000000000..196afdc32813f3144f59a0614be14d43d4a5cc96
--- /dev/null
+++ b/terminalserver/tasks/x2go.yml
@@ -0,0 +1,47 @@
+---
+# file: roles/portal/tasks/x2go.yml
+
+- name: ensure apt key for x2go is present
+  apt_key: keyserver=keys.gnupg.net id=E1F958385BFE2B6E state=present
+  tags: 
+    - x2go
+    - repos
+
+- name: ensure repository for x2go is in apt sources
+  apt_repository: repo='deb http://packages.x2go.org/debian jessie main' state=present
+  tags: 
+    - x2go
+    - repos
+
+- name: ensure apt cache is updated
+  apt: update_cache=yes
+  tags: 
+    - x2go
+    - packages
+
+- name: ensure x2go keyring is installed
+  apt: name=x2go-keyring state=present
+  tags: 
+    - x2go
+    - packages
+
+- name: ensure apt cache is updated again
+  apt: update_cache=yes
+  tags: 
+    - x2go
+    - packages
+
+- name: ensure x2go server is installed
+  apt: name={{ item }} state=latest
+  with_items:
+    - x2goserver
+    - x2goserver-xsession
+  tags: 
+    - x2go
+    - packages
+
+- name: ensure x2go server is running and enabled
+  service: name=x2goserver state=running enabled=yes
+  tags:
+    - x2go
+    - service