Skip to main content

Quicksand Ubuntu Desktop

Pre-built Ubuntu 24.04 Desktop VM image with Xfce4 for the quicksand agent harness. Gives your agent a full graphical Linux desktop with keyboard, mouse, and screenshot control.

Installation

pip install quick-sandbox
quicksand install ubuntu-desktop

Usage

import asyncio
from quicksand import Key
from quicksand_ubuntu_desktop import UbuntuDesktopSandbox

async def main():
    async with UbuntuDesktopSandbox() as sb:
        # Take a screenshot
        await sb.screenshot("desktop.png")

        # Type text and press keys
        await sb.type_text("echo hello world")
        await sb.press_key(Key.RET)

        # Mouse control (absolute coordinates 0-32767)
        await sb.mouse_move(16383, 16383)
        await sb.mouse_click()

        # execute() still works alongside GUI input
        result = await sb.execute("uname -a")
        print(result.stdout)

asyncio.run(main())

With custom config

from quicksand_ubuntu_desktop import UbuntuDesktopSandbox

async with UbuntuDesktopSandbox(memory="4G", cpus=4) as sb:
    await sb.screenshot("desktop.png")

What's Included

  • Ubuntu 24.04 with Xfce4 desktop + LightDM (auto-login, no password prompt)
  • Firefox ESR browser
  • Full apt/deb ecosystem
  • Python 3, bash, curl, ca-certificates
  • The quicksand guest agent (pre-installed)
  • Software rendering via Mesa (LIBGL_ALWAYS_SOFTWARE=1)

Default Config

Setting Default
Memory 1G
CPUs 2
Display Enabled (always)
Boot timeout 60s
Init system systemd

Desktop API

All methods are async:

  • await screenshot(path) — save the guest display as a PNG
  • await type_text(text) — type a string via keyboard events
  • await press_key(*keys) — press a key combo, e.g. press_key(Key.CTRL, Key.C)
  • await mouse_move(x, y) — move mouse to absolute position (0-32767 range)
  • await mouse_click(button, double=False) — click "left", "right", "middle", "wheel-up", or "wheel-down"
  • await query_display_size() — get display resolution as (width, height)
  • await execute(cmd) — run a shell command (same as headless sandboxes)
  • vnc_port — host-side VNC port for connecting a viewer

All standard sandbox features (mounts, save/load, network config) work with desktop sandboxes too.

License

MIT

Metadata

Release files for quicksand-ubuntu-desktop 0.9.10

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Built distribution (wheel)

Table of built distributions (wheels) for quicksand-ubuntu-desktop 0.9.10
File Interpreter ABI Platform
quicksand_ubuntu_desktop-0.9.10-py3-none-any.whl Python 3 none any Details

Release files / quicksand_ubuntu_desktop-0.9.10-py3-none-any.whl

Download URL quicksand_ubuntu_desktop-0.9.10-py3-none-any.whl
Size 3.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
c5091cfe952c51b6bd01ba725630e7da52f874b402db8ff16e68bca2efd4ffdc
BLAKE2b-256 checksum
How to use checksums
01aeca2db90702a541793f9a747d31141bd8bf547da1c888e266c9483a8ace20
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.12.13 {"installer":{"name":"uv","version":"0.12.13","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release history Release notifications | RSS feed

0.9.11

1 release file

This release

0.9.10 This release

1 release file

0.9.9

1 release file

0.9.8

1 release file

0.9.7

1 release file

0.9.6

1 release file

0.9.5

1 release file

0.9.4

1 release file

0.9.3

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page