Рабочий стол в браузере
Шаблон запускает лёгкий рабочий стол Openbox на виртуальном дисплее. noVNC открывает доступ к нему из браузера через порт 6080.
mjs
import { Sandbox, Template, waitForURL } from "@abox-dev/sdk";
const templateName = process.env.TEMPLATE_NAME ?? "browser-desktop";
const template = Template({ fileContextPath: "." })
.fromUbuntuImage("24.04")
.aptInstall([
"novnc",
"openbox",
"scrot",
"websockify",
"x11vnc",
"xdotool",
"xterm",
"xvfb",
])
.copy("start-desktop.sh", "/usr/local/bin/start-desktop", {
mode: 0o755,
user: "root",
})
.setStartCmd(
"/usr/local/bin/start-desktop",
waitForURL("http://localhost:6080/vnc.html"),
);
await Template.build(template, templateName, {
cpuCount: 2,
memoryMB: 2_048,
});
const sandbox = await Sandbox.create(templateName);
try {
const response = await sandbox.commands.run(
"curl --silent --head http://localhost:6080/vnc.html | head -n 1",
);
console.log(response.stdout);
} finally {
await sandbox.kill();
}Файл start-desktop.sh должен лежать рядом с исходным файлом примера. Скрипт запускает Xvfb, Openbox, x11vnc и веб-прокси noVNC. Проверка готовности ждёт vnc.html, поэтому клиент уже доступен после запуска песочницы. В образ также входят xdotool для управления клавиатурой и указателем, scrot для снимков экрана и лёгкий терминал xterm.
Чтобы открыть рабочий стол снаружи песочницы, добавьте https:// перед результатом sandbox.getHost(6080) в JavaScript или sandbox.get_host(6080) в Python и путь /vnc.html после него.