Ubuntu 桌面沙箱
在 Cube 沙箱里跑一个完整的 Ubuntu 22.04 GNOME 桌面,用浏览器打开即可操作。适用于 GUI 自动化、截图测试、Agent 驱动的桌面任务,以及任何需要真实显示器的场景。
你会得到什么
- Ubuntu 22.04,默认 Yaru 主题和左侧 Dock(文件管理器、终端)
- 1280×720 的桌面画面,通过 noVNC 在
6080端口输出 - 键鼠、剪贴板、截图均可用
- 可通过 SDK 脚本化:带上
DISPLAY=:0运行命令即可操作 GUI
前置条件
- 一个可用的 Cube 集群,且能访问
cubemastercli - 本机已安装 Docker,用于本地测试
cubesandboxPython SDK,用于程序化访问
快速开始
1. 构建并推送镜像
bash
cd examples/ubuntu-desktop
docker build -t <registry>/ubuntu-desktop:v1 .
docker push <registry>/ubuntu-desktop:v12. 创建模板
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/参考
- 示例仓库:examples/ubuntu-desktop
- noVNC:https://novnc.com