Skip to content

Ubuntu 桌面沙箱

在 Cube 沙箱里跑一个完整的 Ubuntu 22.04 GNOME 桌面,用浏览器打开即可操作。适用于 GUI 自动化、截图测试、Agent 驱动的桌面任务,以及任何需要真实显示器的场景。

你会得到什么

  • Ubuntu 22.04,默认 Yaru 主题和左侧 Dock(文件管理器、终端)
  • 1280×720 的桌面画面,通过 noVNC 在 6080 端口输出
  • 键鼠、剪贴板、截图均可用
  • 可通过 SDK 脚本化:带上 DISPLAY=:0 运行命令即可操作 GUI

前置条件

  • 一个可用的 Cube 集群,且能访问 cubemastercli
  • 本机已安装 Docker,用于本地测试
  • cubesandbox Python SDK,用于程序化访问

快速开始

1. 构建并推送镜像

bash
cd examples/ubuntu-desktop
docker build -t <registry>/ubuntu-desktop:v1 .
docker push <registry>/ubuntu-desktop:v1

2. 创建模板

bash
cubemastercli tpl create-from-image \
  --image <registry>/ubuntu-desktop:v1 \
  --alias ubuntu-desktop \
  --writable-layer-size 16Gi \
  --cpu 4000 \
  --memory 8192 \
  --expose-port 6080 \
  --expose-port 49983 \
  --probe 6080 \
  --probe-path / \
  --allow-internet-access

探针指向 6080(noVNC),确保桌面真正起来后才标记沙箱就绪。

3. 打开桌面

python
from cubesandbox import Sandbox

sb = Sandbox.create(template="ubuntu-desktop", timeout=-1)
print("桌面:", f"https://{sb.get_host(6080)}/")

浏览器打开打印的地址,就能看到 Ubuntu 桌面。

程序操作桌面

沙箱里的桌面跑在 DISPLAY=:0,运行命令时带上这个变量:

python
# 截图
sb.commands.run("DISPLAY=:0 gnome-screenshot -f /tmp/desk.png")
print(sb.files.read("/tmp/desk.png"))

# 列出当前窗口
sb.commands.run("DISPLAY=:0 wmctrl -l")

访问方式

CubeProxy 提供两种方式打开桌面:

  • Host 模式(默认):https://6080-<sandbox-id>.cube.app/ — 与 noVNC 默认的 WebSocket 路径兼容,推荐使用。
  • Path 模式https://<proxy>/sandbox/<sandbox-id>/6080/ — 不需要泛域名 DNS,但 noVNC 的 WebSocket 需要带完整路径。可以通过 query 参数 path=sandbox/<id>/6080/websockify 传入,或用一个小型反代设置 Host 头。

本地测试

推送前,先在本机验证镜像:

bash
cd examples/ubuntu-desktop
./run-local.sh
# 打开 http://127.0.0.1:6080/

参考