Get interactive! Putting a shell (or a desktop) in your Django app
2021-06-04, 10:45–11:30 (Europe/Paris), Main Room

How to make your Django app speak SSH or RDP with Guacamole, ASGI and Daphne — giving anyone a console or a desktop right in their browser!

In our City Cloud Academy learning platform, we enable learners to interact with real-world hands-on lab environments, so that they can learn complex technologies like OpenStack, Kubernetes, Terraform, Ceph, Ansible, and others. To do that, we use Apache Guacamole's guacd service to provide learners with interactive shell terminals — or even full desktop environments — that run right in people's browsers, no additional software required.

The Guacamole platform is normally deployed in conjunction with a Java servlet environment (commonly Apache Tomcat). But the Guacamole protocol is not tied to the Java language in any way, and a Python websocket proxy (pyguacamole) is readily available under an open source (MIT) license.

In this talk, we discuss how we implemented a learning platform (based on Open edX) that deploys an ASGI service under Daphne, uses pyguacamole to provide an asynchronous websocket connection to a Guacamole service, and thus creates a highly scalable, interactive, and immersive learning environment that helps people learn complex technology with no hardware or cloud investment at all.


The slides (with full speaker notes) are up at and

Florian Haas specializes in Free and Open Source Software (F/OSS), open source platforms for professional education (based on Open edX), cloud technology (OpenStack), software-defined storage (Ceph).


I am a Python developer, working in City Network, in the Education team. I am also a FOSS enthusiast and a former Outreachy intern. I am based in Estonia and I have been working with Django a bit over one year.