54 lines
1.6 KiB
Bash
Executable File
54 lines
1.6 KiB
Bash
Executable File
#!/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
|