#!/bin/bash set -e export DISPLAY=:99 echo "=== Starting Research Workbench ===" # (1) Start Xvfb Xvfb :99 -screen 0 1280x720x24 -ac & sleep 1 echo "[OK] Xvfb display :99" # (2) Start x11vnc (suppress stderr) x11vnc -display :99 -forever -nopw -listen 0.0.0.0 -rfbport 5900 -shared 2>/dev/null & sleep 1 echo "[OK] x11vnc on :5900" # (3) Start noVNC via websockify websockify --web=/usr/share/novnc/ 6080 localhost:5900 & sleep 1 echo "[OK] noVNC on :6080" # (4) Start amplifierd and wait for it to be healthy cd /app amplifierd --port 8410 --bundle /app/bundle/bundle.md & AMPLIFIERD_PID=$! echo "Waiting for amplifierd..." for i in $(seq 1 30); do if curl -s http://localhost:8410/health > /dev/null 2>&1; then echo "[OK] amplifierd on :8410" break fi sleep 1 done # (5) Start FastAPI backend cd /app/backend uv run python -m uvicorn app:app --host 0.0.0.0 --port 8080 --log-level info & sleep 2 echo "[OK] FastAPI on :8080" echo "" echo "Research Workbench: http://localhost:8080" echo "Browser VNC: http://localhost:6080" # CMD passthrough or wait on amplifierd if [ $# -eq 0 ]; then wait $AMPLIFIERD_PID else exec "$@" fi