update
This commit is contained in:
@@ -4,6 +4,7 @@ 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)
|
||||
|
||||
@@ -15,57 +16,38 @@ if [ ! -S "$MONITOR_SOCK" ]; then
|
||||
fi
|
||||
|
||||
mkdir -p "$SCREENSHOT_DIR"
|
||||
mkdir -p "$TIMESTAMPED_DIR"
|
||||
|
||||
# Screenshot all displays (video0, video1, video2)
|
||||
DISPLAYS="video0 video1 video2"
|
||||
SCREENSHOTS=()
|
||||
echo "Taking screenshot..."
|
||||
|
||||
echo "Taking screenshots of all displays..."
|
||||
PPM_FILE="$SCREENSHOT_DIR/temp.ppm"
|
||||
LATEST_FILE="$SCREENSHOT_DIR/latest.png"
|
||||
TIMESTAMPED_FILE="$TIMESTAMPED_DIR/ecoos-$TIMESTAMP.png"
|
||||
|
||||
for DISPLAY in $DISPLAYS; do
|
||||
PPM_FILE="$SCREENSHOT_DIR/ecoos-$TIMESTAMP-$DISPLAY.ppm"
|
||||
PNG_FILE="$SCREENSHOT_DIR/ecoos-$TIMESTAMP-$DISPLAY.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
|
||||
|
||||
# Take screenshot of this display
|
||||
echo "screendump $PPM_FILE $DISPLAY" | socat - UNIX-CONNECT:"$MONITOR_SOCK" 2>/dev/null
|
||||
sleep 0.5
|
||||
|
||||
if [ -f "$PPM_FILE" ]; then
|
||||
# Convert to PNG if imagemagick is available
|
||||
if command -v convert &> /dev/null; then
|
||||
convert "$PPM_FILE" "$PNG_FILE"
|
||||
rm "$PPM_FILE"
|
||||
SCREENSHOTS+=("$PNG_FILE")
|
||||
echo " $DISPLAY: $PNG_FILE"
|
||||
else
|
||||
SCREENSHOTS+=("$PPM_FILE")
|
||||
echo " $DISPLAY: $PPM_FILE"
|
||||
fi
|
||||
else
|
||||
echo " $DISPLAY: (no output or not connected)"
|
||||
fi
|
||||
done
|
||||
|
||||
# Create a combined image if we have multiple screenshots and imagemagick
|
||||
if command -v convert &> /dev/null && [ ${#SCREENSHOTS[@]} -gt 1 ]; then
|
||||
COMBINED_FILE="$SCREENSHOT_DIR/ecoos-$TIMESTAMP-combined.png"
|
||||
LATEST_FILE="$SCREENSHOT_DIR/latest.png"
|
||||
|
||||
# Combine images horizontally
|
||||
convert "${SCREENSHOTS[@]}" +append "$COMBINED_FILE"
|
||||
cp "$COMBINED_FILE" "$LATEST_FILE"
|
||||
|
||||
echo ""
|
||||
echo "Combined screenshot: $COMBINED_FILE"
|
||||
echo "Also saved as: $LATEST_FILE"
|
||||
elif [ ${#SCREENSHOTS[@]} -eq 1 ]; then
|
||||
LATEST_FILE="$SCREENSHOT_DIR/latest.png"
|
||||
cp "${SCREENSHOTS[0]}" "$LATEST_FILE"
|
||||
echo ""
|
||||
echo "Also saved as: $LATEST_FILE"
|
||||
if [ ! -f "$PPM_FILE" ]; then
|
||||
echo "ERROR: Failed to capture screenshot"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Keep only last 20 screenshot sets (excluding latest.png)
|
||||
cd "$SCREENSHOT_DIR"
|
||||
ls -t ecoos-*-combined.png 2>/dev/null | tail -n +21 | xargs -r rm -f
|
||||
ls -t ecoos-*-video*.png 2>/dev/null | tail -n +61 | xargs -r rm -f
|
||||
# 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
|
||||
|
||||
Reference in New Issue
Block a user