Перейти к содержимому

Рабочий стол в браузере

Шаблон запускает лёгкий рабочий стол 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 после него.