Desktop 模板提供完整的 Linux 案頭環境,內建 Chrome,併兼容 e2b-desktop / @e2b/desktop SDK。您可以通過截圖感知案頭,通過滑鼠、鍵盤操作 GUI 應用,並通過即時資料流觀察執行過程。
與 browser 模板相比,Desktop 模板控制的是整套虛擬桌面,而不是只通過 CDP 控制瀏覽器。本頁介紹鏡像配置、模板構建和最小驗證;完整的滑鼠鍵盤操作、即時資料流和安全建議,請參見使用 Computer Use Sandbox。
功能特性
| 特性 | 說明 |
| 完整案頭 | 提供視窗管理器、終端和檔案管理工具 |
| G使用者介面自動化 | 通過截圖、滑鼠座標、鍵盤和視窗 API 操作案頭應用 |
| 瀏覽器 | 內建 Chrome,可通過應用啟動介面開啟指定 URL |
| 即時查看 | 通過 SDK 開啟整案頭即時資料流 |
| SDK 相容 | 支援 Python e2b-desktop 和 TypeScript @e2b/desktop |
預設配置
本文使用 v0.0.44 版本的北京地區鏡像:
| 配置項 | 預設值 | 說明 |
| 容器鏡像 | fc-e2b-registry.cn-beijing.cr.aliyuncs.com/runtime/desktop:v0.0.44 |
Desktop 官方鏡像,北京地區樣本 |
| CPU | 4 vCPU | 推薦起始規格 |
| 記憶體 | 8192 MB | 推薦起始規格 |
說明
構建模板時,鏡像倉庫地區應與雲沙箱接入地區保持一致。其他地區請將鏡像地址中的地區替換為對應地區,並保持版本為唯一標籤 v0.0.44;同時配置同地區的 E2B_API_URL 和 E2B_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.44"
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.44";
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
常用能力速查
| 能力 | Python | TypeScript |
| 建立沙箱 | 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"]) |
| 當前視窗 ID | desktop.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_URL 和 E2B_DOMAIN 必須使用同一地區 |
| 即時資料流 | 同一沙箱同一時刻只能開啟一個整案頭 Desktop stream;v0.0.44 版本暫不支援指定單個視窗 |
| 生命週期 | 任務結束後應調用 kill(),避免案頭沙箱持續佔用資源 |