Skip to content
Go back

Kasm Workspaces: Browser Desktops

By SumGuy 11 min read
Kasm Workspaces: Browser Desktops

Sometimes you want a browser tab that IS a Linux desktop, then disappears the moment you close it

You click a link someone sent you in Discord. You immediately regret it. The URL has three hyphens and ends in .ru. You’ve opened it in your daily browser, which is logged into your bank, your email, your entire life.

This is fine. Everything is fine.

Or — hear me out — you open that link in a fully isolated Linux desktop that lives in a Docker container, streams to your browser via WebRTC, and gets nuked the moment you’re done. No trace. No cookies. No “oops I accidentally installed a keylogger.”

That’s Kasm Workspaces. And it’s way more useful than that one sketchy-link scenario.

What Kasm Actually Is

Kasm is a container streaming platform. You get a web-based interface where you can launch workspaces — each one is a Docker container running a full Linux desktop (or just a single app like a browser) that gets streamed to your browser via KasmVNC, their fork of the classic VNC protocol tuned for low-latency web delivery.

The key word is ephemeral. By default, when your session ends, the container goes with it. Nothing persists. No crumbs. No leftover tabs. The next time you launch that workspace, it’s a fresh container from the base image — like spinning up a throwaway VM but in about 10 seconds instead of 3 minutes.

Each workspace is:

Kasm ships with a registry of pre-built workspace images: Ubuntu, Kali Linux, Tor Browser, Chromium, Firefox, VS Code, and a bunch more. You can also build your own images if you want something custom.

Installing Kasm: The “Just Get It Running” Path

Kasm Community Edition is free for up to 5 concurrent users. That covers the entire homelab population who will ever actually use this.

System requirements: 2 CPU cores minimum (4 recommended), 4 GB RAM minimum (8 GB recommended — and that’s realistic, since each workspace is its own container with a DE), 50 GB disk space, and a reasonably modern Ubuntu/Debian/CentOS host.

The install is surprisingly painless:

Terminal window
# Download the installer
cd /tmp
curl -O https://kasm-releases.s3.amazonaws.com/1.16.0.c1fcba/kasm_release_1.16.0.c1fcba.tar.gz
tar -xf kasm_release_*.tar.gz
# Install (interactive — it'll ask for passwords)
sudo bash kasm_release/install.sh

The installer sets up PostgreSQL, the Kasm API, an nginx reverse proxy, and the agent service. It’ll spit out your admin credentials and the URL when done. You’ll want to throw this behind your Caddy or Traefik reverse proxy with a real cert if you’re exposing it externally.

If you prefer Compose:

docker-compose.yml
version: "3"
services:
kasm:
image: lscr.io/linuxserver/kasm:latest
privileged: true
environment:
- KASM_PORT=443
- DOCKER_HUB_USERNAME= # optional
- DOCKER_HUB_PASSWORD= # optional
volumes:
- /opt/kasm/data:/opt
- /dev/input:/dev/input
- /run/udev/data:/run/udev/data
ports:
- "3000:3000"
- "443:443"
restart: unless-stopped

LinuxServer’s image bundles everything into a single container, which is great for quick testing but not ideal for production. For anything serious, use the native installer.

Real Uses: When Kasm Earns Its RAM

This is the one that got most people interested. Someone sends you a link. Your gut says no. But curiosity says yes. Launch a throwaway Chromium workspace, open the link, poke around, close the session. The container dies. Whatever that page tried to do stays inside the container — it never touches your host browser, your cookies, your extensions, any of it.

Not perfect security (more on that in a minute), but it’s vastly better than “well I guess I’ll just open it and hope.”

Disposable Tor Browser Desktop

Kasm ships a Tor Browser image in their registry. Launch it, browse, close it — the session and all history disappear. You’re not running Tor on your host machine. You’re not mucking with your system’s routing. It’s contained.

More useful than spinning up a full Tails VM for occasional use.

Banking-Only Browser

Your daily browser is a beautiful disaster of extensions, open tabs, and autofill data. Your bank doesn’t need to see any of that, and your daily browsing doesn’t need to be fingerprinted alongside your bank sessions.

Keep a persistent “banking” workspace (yes, Kasm supports persistent storage for workspaces you want to keep state in). Launch it when you need to move money. Close it when you’re done. It never touches anything else running on your machine.

Fresh Dev Sandbox

VS Code workspace, spun up clean every session. No “why does my linter work on my laptop but not in CI” — because you’re already in a clean Ubuntu container. Install whatever toolchain you need, break it spectacularly, spin up another one. The image resets every time unless you explicitly persist it.

This is genuinely useful for testing install scripts, trying out new tools without polluting your system, or just having a clean environment for a specific project.

Family / Kiosk Mode

Got a family member who “just needs a browser” but somehow always ends up with 14 browser toolbars and something called “WildTangent”? Give them a Chromium workspace. Limited, locked down, doesn’t touch the rest of your server. Their web browsing is isolated. When it gets weird, you blow away the session and they start fresh.

The Threat Model: Where Kasm Helps and Where It Doesn’t

Let’s be real about what Kasm actually protects you from.

Where it helps:

Where it doesn’t help:

The realistic homelab threat model: “I want to keep sketchy browser activity out of my daily-use sessions and have a clean environment I can trash.” Kasm is excellent for that. For “I’m evading a nation-state actor” — different tool.

Apache Guacamole: The Other Clientless Remote Desktop

You’ve probably seen Guacamole in the same breath as Kasm. They look similar but they’re solving different problems.

Guacamole is a clientless gateway to existing remote desktops. You point it at RDP, VNC, or SSH endpoints that already exist — Windows machines, Linux VMs, whatever. Guacamole speaks HTML5 to your browser and translates to those protocols on the backend. It’s a jump box with a web UI.

When Guacamole wins:

When Kasm wins:

Honestly, they’re complementary. Guacamole for “get me into my Proxmox nodes.” Kasm for “give me a throwaway browser.” Many homelabs run both.

What About X11 Forwarding, xrdp, Sunshine?

These are different problems:

X11 forwarding over SSH — runs individual GUI apps on a remote host but renders them locally. Requires the X11 protocol to travel over SSH, which is fine on LAN but terrible over the internet. No browser. Requires an SSH client. Not a user-friendly option.

xrdp — slaps an RDP server onto Linux. Works, but RDP is persistent (same session reconnects), requires client software or at minimum an RDP-capable browser extension, and you’re managing a session on a real machine, not a throwaway container.

Sunshine + Moonlight — completely different beast. Low-latency game streaming from your host. Excellent for gaming and GPU-accelerated workloads. Not for browser isolation or containerized workspaces. Wrong tool entirely, but worth knowing it exists.

Kasm’s value is specifically “no client software, no persistent mess, containerized, disposable, accessible from literally any browser.” None of the above tick all four.

Working with Workspaces and Images

Once you’re in the Kasm dashboard, launching a workspace is a two-click operation. Pick an image, click “Launch,” wait 10-15 seconds, browser tab opens with your desktop.

The workspace registry works like Docker Hub but for Kasm images. Out of the box you get Ubuntu, Kali, Tor Browser, Chromium, Firefox, VS Code, Sublime Text, and a bunch more. You can add more from the registry or from any Docker image that has the Kasm base layers.

Building your own workspace image is straightforward if you know Docker:

Dockerfile
FROM kasmweb/ubuntu-jammy-desktop:1.16.0
# Your customizations
USER root
RUN apt-get update && apt-get install -y \
python3-pip \
nmap \
&& apt-get clean
# Back to kasm_user for runtime
USER 1000

Build it, push to your registry, add it to Kasm’s workspace catalog via the admin UI. Now it shows up as an option for your users. The Kasm team maintains decent documentation on this and the base images are reasonably well-structured.

For persistent storage on workspaces you want to keep state in: Kasm supports persistent profiles, which mount a volume into the container. The desktop resets, but your profile directory (files, configs, browser state) persists. Useful for the banking-only browser scenario.

Honest Gotchas

It feels enterprise-y for solo lab use. The admin interface has user management, groups, zones, API keys, session recording — full fleet management for a company with 500 workers. If you’re running this for yourself and two family members, it’s a lot of UI. You’ll set it up once and mostly forget it exists, which is fine, but the initial configuration overhead is real.

Resource cost is not trivial. Each running workspace is a container with a full desktop environment. A single Ubuntu + XFCE workspace idles at 300-500 MB RAM. If you have four concurrent users each running a workspace, that’s 1.5-2 GB just for the sessions, plus the Kasm infrastructure, plus your host OS. The 4 GB minimum is realistic, 8 GB gives you breathing room.

Community Edition is 5 concurrent users, not 5 accounts. You can create unlimited user accounts, but only 5 can have active sessions at once. For homelab use that’s almost never a problem — you’re probably the only one who actually uses it — but if you were hoping to deploy this for a small team, you hit the paywall at 6 simultaneous sessions.

GPU passthrough is complicated. If you want hardware-accelerated workspaces (useful for VS Code with lots of rendering, or anything 3D), GPU passthrough in containers is doable but requires extra config. Kasm supports it, but it’s not plug-and-play.

The Bottom Line

Kasm sits in a weird but useful niche: Docker-native, browser-delivered, ephemeral desktops. The install takes 20 minutes. The use cases are genuinely valuable — isolated browsing, throwaway dev environments, family kiosk mode, sandboxed sketchy links.

It’s not a VPN replacement. It’s not a bulletproof security tool against sophisticated attackers. It’s not Guacamole (use Guac for persistent infrastructure access). It is a very clean way to get a disposable Linux desktop in your browser, which turns out to be exactly what you need more often than you’d expect.

Your 2 AM self, staring at that .ru link, will thank you for setting this up last weekend.


Share this post on:

Send a Webmention

Written about this post on your own site? Send a webmention and it'll show up above once verified.


Next Post
ModSecurity vs Coraza WAF

Discussion

Powered by Garrul . Sign in with GitHub or Google, or post anonymously.

Related Posts