Skip to content

Desktop Example (Ubuntu Desktop with VNC)

Sandbox with Ubuntu Desktop and VNC access.

Template Definition:

typescript
// template.ts
import { Template, waitForPort } from 'e2b'

export const template = Template()
  .fromUbuntuImage('22.04')
  // Desktop environment and system utilities
  .runCmd([
    'yes | unminimize',
    'apt-get update',
    'apt-get install -y \
      xserver-xorg xorg x11-xserver-utils xvfb x11-utils xauth \
      xfce4 xfce4-goodies util-linux sudo curl git wget python3-pip \
      xdotool scrot ffmpeg x11vnc net-tools netcat x11-apps \
      libreoffice xpdf gedit xpaint tint2 galculator pcmanfm',
    'apt-get clean',
    'rm -rf /var/lib/apt/lists/*',
  ])
  // Streaming server setup
  .runCmd([
    'git clone --branch e2b-desktop https://github.com/e2b-dev/noVNC.git /opt/noVNC',
    'ln -s /opt/noVNC/vnc.html /opt/noVNC/index.html',
    'git clone --branch v0.12.0 https://github.com/novnc/websockify /opt/noVNC/utils/websockify',
  ])
  // Set default terminal
  .runCmd(
    'ln -sf /usr/bin/xfce4-terminal.wrapper /etc/alternatives/x-terminal-emulator'
  )
  .copy('start_command.sh', '/start_command.sh')
  .runCmd('chmod +x /start_command.sh')
  .setStartCmd('/start_command.sh', waitForPort(6080))

Start Command Script (start_command.sh):

bash
#!/bin/bash

# Set display
export DISPLAY=${DISPLAY:-:0}

# Start Xvfb
Xvfb $DISPLAY -ac -screen 0 1024x768x24 -nolisten tcp &
sleep 2

# Start XFCE session
startxfce4 &
sleep 5

# Start VNC server
x11vnc -bg -display $DISPLAY -forever -wait 50 -shared -rfbport 5900 -nopw \
    -noxdamage -noxfixes -nowf -noscr -ping 1 -repeat -speeds lan &
sleep 2

# Start noVNC server
cd /opt/noVNC/utils && ./novnc_proxy --vnc localhost:5900 --listen 6080 --web /opt/noVNC --heartbeat 30 &
sleep 2

Build Configuration:

typescript
// build.ts
import { Template, defaultBuildLogger } from 'e2b'
import { template as desktopTemplate } from './template'

await Template.build(desktopTemplate, {
  alias: 'desktop',
  cpuCount: 8,
  memoryMB: 8192,
  onBuildLogs: defaultBuildLogger(),
})

Key Components:

  • Desktop Environment: XFCE4 with goodies
  • VNC Server: x11vnc on port 5900
  • noVNC Server: Web-based VNC client on port 6080
  • Display: Xvfb virtual framebuffer (1024x768x24)
  • Applications: LibreOffice, PDF viewer, text editor, file manager, calculator

E2B Documentation • Generated from e2b.dev/docs