#!/bin/bash SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" PROJECT_ROOT="$SCRIPT_DIR/.." VM_DIR="$PROJECT_ROOT/.nogit/vm" SCREENSHOT_DIR="$PROJECT_ROOT/.nogit/screenshots" TIMESTAMPED_DIR="$SCREENSHOT_DIR/timestamped" MONITOR_SOCK="$VM_DIR/qemu-monitor.sock" TIMESTAMP=$(date +%Y%m%d-%H%M%S) # Check if QEMU is running if [ ! -S "$MONITOR_SOCK" ]; then echo "ERROR: QEMU not running (no monitor socket)" echo "Run 'pnpm run test' first to start the VM" exit 1 fi mkdir -p "$SCREENSHOT_DIR" mkdir -p "$TIMESTAMPED_DIR" echo "Taking screenshot..." PPM_FILE="$SCREENSHOT_DIR/temp.ppm" LATEST_FILE="$SCREENSHOT_DIR/latest.png" TIMESTAMPED_FILE="$TIMESTAMPED_DIR/ecoos-$TIMESTAMP.png" # Take screenshot (virtio-vga captures all outputs in one framebuffer) echo "screendump $PPM_FILE" | socat - UNIX-CONNECT:"$MONITOR_SOCK" > /dev/null 2>&1 sleep 0.5 if [ ! -f "$PPM_FILE" ]; then echo "ERROR: Failed to capture screenshot" exit 1 fi # Convert to PNG if command -v convert &> /dev/null; then convert "$PPM_FILE" "$LATEST_FILE" cp "$LATEST_FILE" "$TIMESTAMPED_FILE" rm "$PPM_FILE" echo "Screenshot saved: $LATEST_FILE" echo "Timestamped copy: $TIMESTAMPED_FILE" else mv "$PPM_FILE" "$SCREENSHOT_DIR/latest.ppm" cp "$SCREENSHOT_DIR/latest.ppm" "$TIMESTAMPED_DIR/ecoos-$TIMESTAMP.ppm" echo "Screenshot saved: $SCREENSHOT_DIR/latest.ppm" echo "(Install ImageMagick for PNG conversion)" fi # Keep only last 50 timestamped screenshots cd "$TIMESTAMPED_DIR" ls -t ecoos-*.png 2>/dev/null | tail -n +51 | xargs -r rm -f ls -t ecoos-*.ppm 2>/dev/null | tail -n +51 | xargs -r rm -f