// 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/*',
])
// noVNC and websockify for browser-based VNC access
.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))