Desktop 模板

更新时间:
复制 MD 格式

Desktop 模板提供完整的 Linux 桌面环境,内置 Chrome,并兼容 e2b-desktop / @e2b/desktop SDK。您可以通过截图感知桌面,通过鼠标、键盘操作 GUI 应用,并通过实时流观察执行过程。

browser 模板相比,Desktop 模板控制的是整套虚拟桌面,而不是只通过 CDP 控制浏览器。本页介绍镜像配置、模板构建和最小验证;完整的鼠标键盘操作、实时流和安全建议,请参见使用 Computer Use Sandbox

功能特性

特性说明
完整桌面提供窗口管理器、终端和文件管理器
GUI 自动化通过截图、鼠标坐标、键盘和窗口 API 操作桌面应用
浏览器内置 Chrome,可通过应用启动接口打开指定 URL
实时查看通过 SDK 开启整桌面实时流
SDK 兼容支持 Python e2b-desktop 和 TypeScript @e2b/desktop

默认配置

本文使用 v0.0.39 版本的北京地域镜像:

配置项默认值说明
容器镜像fc-e2b-registry.cn-beijing.cr.aliyuncs.com/runtime/desktop:v0.0.39Desktop 官方镜像,北京地域示例
CPU4 vCPU推荐起始规格
内存8192 MB推荐起始规格
说明

构建模板时,镜像仓库地域应与云沙箱接入地域保持一致。其他地域请将镜像地址中的地域替换为对应地域,并保持版本为唯一标签 v0.0.39;同时配置同地域的 E2B_API_URLE2B_DOMAIN

构建 Desktop 模板

Desktop 模板不是开通即用的内置模板,需要先从官方 Desktop 镜像构建一个带名称的自定义模板。模板无需配置启动命令或就绪命令,Desktop SDK 会自动启动桌面环境和实时流服务。

Python

安装依赖:

uv venv .venv --python 3.12
source .venv/bin/activate
uv pip install e2b-desktop==2.4.1 python-dotenv

将以下代码保存为 build.py

"""Desktop 模板构建示例。"""

from dotenv import load_dotenv
from e2b import Template, default_build_logger

load_dotenv()

# SDK 自动读取 E2B_API_KEY / E2B_API_URL / E2B_DOMAIN 环境变量。
FROM_IMAGE = "fc-e2b-registry.cn-beijing.cr.aliyuncs.com/runtime/desktop:v0.0.39"

build = Template.build(
    Template().from_image(FROM_IMAGE),
    name="my-desktop-template",
    cpu_count=4,
    memory_mb=8192,
    on_build_logs=default_build_logger(),
)
print(f"template_id: {build.template_id}")

运行构建:

python build.py

Node.js

安装依赖:

npm install e2b@^2.31.0 @e2b/desktop@2.3.1 dotenv
npm install --save-dev tsx
npm pkg set type=module

将以下代码保存为 build.mjs

// Desktop 模板构建示例。
import "dotenv/config";
import { Template, defaultBuildLogger } from "e2b";

const FROM_IMAGE =
  "fc-e2b-registry.cn-beijing.cr.aliyuncs.com/runtime/desktop:v0.0.39";

const build = await Template.build(
  Template().fromImage(FROM_IMAGE),
  "my-desktop-template",
  {
    cpuCount: 4,
    memoryMB: 8192,
    onBuildLogs: defaultBuildLogger(),
  },
);
console.log(`template_id: ${build.templateId}`);

运行构建:

node build.mjs

最小验证

模板构建完成后,创建沙箱、启动 Chrome 并截图,验证桌面环境和应用启动能力。

Python

from pathlib import Path

from dotenv import load_dotenv
from e2b_desktop import Sandbox

load_dotenv()

desktop = None
try:
    desktop = Sandbox.create(template="my-desktop-template", timeout=600)
    desktop.launch("google-chrome", "https://example.com")
    # 等待应用窗口渲染完成,避免截到尚未加载的桌面。
    desktop.wait(10000)
    Path("desktop.png").write_bytes(desktop.screenshot())
finally:
    if desktop is not None:
        desktop.kill()

TypeScript:将以下代码保存为 desktop.ts

import "dotenv/config";
import { writeFileSync } from "node:fs";
import { Sandbox } from "@e2b/desktop";

let desktop: Sandbox | undefined;
try {
  desktop = await Sandbox.create("my-desktop-template", { timeoutMs: 600_000 });
  await desktop.launch("google-chrome", "https://example.com");
  // 等待应用窗口渲染完成,避免截到尚未加载的桌面。
  await desktop.wait(10_000);
  writeFileSync("desktop.png", await desktop.screenshot());
} finally {
  await desktop?.kill();
}

运行示例:

npx tsx desktop.ts

常用能力速查

能力PythonTypeScript
创建沙箱Sandbox.create(template=..., timeout=...)Sandbox.create(template, { timeoutMs })
启动应用desktop.launch("google-chrome", url)desktop.launch("google-chrome", url)
等待desktop.wait(10000)desktop.wait(10000)
截图desktop.screenshot()desktop.screenshot()
移动鼠标desktop.move_mouse(x, y)desktop.moveMouse(x, y)
单击 / 双击 / 右键left_click() / double_click() / right_click()leftClick() / doubleClick() / rightClick()
滚动desktop.scroll("down", amount)desktop.scroll("down", amount)
拖拽desktop.drag((x1, y1), (x2, y2))desktop.drag([x1, y1], [x2, y2])
输入文本desktop.write("...")desktop.write("...")
按键 / 组合键press("enter") / press(["ctrl", "c"])press("enter") / press(["ctrl", "c"])
当前窗口 IDdesktop.get_current_window_id()desktop.getCurrentWindowId()
开启 / 停止实时流stream.start() / stream.stop()stream.start() / stream.stop()
获取流地址stream.get_url(auth_key=...)stream.getUrl({ authKey })
销毁沙箱desktop.kill()desktop.kill()

使用限制

限制项说明
资源规格建议使用 4 vCPU、8192 MB 内存或更高规格
地域镜像、E2B_API_URLE2B_DOMAIN 必须使用同一地域
实时流同一沙箱同一时刻只能开启一个整桌面 Desktop stream;v0.0.39 版本暂不支持指定单个窗口
生命周期任务结束后应调用 kill(),避免桌面沙箱持续占用资源

相关文档