Copy
Ask AI
// 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.sh
Copy
Ask AI
#!/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
Copy
Ask AI
// 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(),
})