#!/usr/bin/env sh set -eu ELECTRON="$1" APP_ENTRY="src/main.js" SCREEN="1280x800" for d in 99 98 97 96 95; do if ! xdpyinfo -display ":$d" >/dev/null 2>&1; then DISP="$d" break fi done [ -n "${DISP:-}" ] || { echo "No free DISPLAY found" >&2 exit 1 } echo "Using DISPLAY=:$DISP" cleanup() { kill "$ELECTRON_PID" "$OPENBOX_PID" "$XEPHYR_PID" 2>/dev/null || true } trap cleanup EXIT INT TERM Xephyr ":$DISP" -screen "$SCREEN" -resizeable -ac & XEPHYR_PID=$! sleep 1 DISPLAY=":$DISP" openbox & OPENBOX_PID=$! sleep 0.5 DISPLAY=":$DISP" "${ELECTRON}" "$APP_ENTRY" & ELECTRON_PID=$! DISPLAY=":$DISP" xsetroot -solid "#009999" while :; do if ! kill -0 "$ELECTRON_PID" 2>/dev/null; then echo "Electron exited — killing Xephyr" kill "$XEPHYR_PID" 2>/dev/null || true break fi if ! kill -0 "$XEPHYR_PID" 2>/dev/null; then echo "Xephyr exited — killing Electron" kill "$ELECTRON_PID" 2>/dev/null || true break fi sleep 0.5 done wait "$ELECTRON_PID" 2>/dev/null || true wait "$XEPHYR_PID" 2>/dev/null || true