$ show guysoft/FullPageOS
This repository contains a build system for FullPageOS, a Raspberry Pi distribution that boots directly into a full-screen Chromium browser kiosk displaying a configurable webpage. The build process uses CustomPiOS to modify a Raspbian base image, installing Chromium, lighttpd (with FullPageDashboard), x11vnc for VNC access, and a set of scripts that manage the browser startup, URL resolution (with serial number substitution), page refresh, and crash recovery. The resulting OS image is designed for digital signage or single-purpose web displays. The repo includes a comprehensive testing framework with end-to-end tests that run in QEMU, verifying Chromium launch, lighttpd service, emoji rendering, and translation disabling via screenshot pixel analysis. The CI pipeline builds images for armhf and arm64 and runs the e2e tests automatically. While the core build scripts are functional and well-structured, they are tightly coupled to the CustomPiOS ecosystem and not independently reusable. The testing components, particularly the screenshot analysis and headless Chromium rendering tests, exhibit higher craftsmanship and could be adapted for other kiosk image validation efforts.
The LLM identified 3 files worth highlighting for reuse:
Demonstrates a reusable pattern for validating color emoji rendering in a headless Chromium environment. It renders an HTML test page featuring a cloud emoji, captures a screenshot, and performs pixel-level analysis to ensure the emoji is drawn with sufficient chromatic pixels. The script is self-contained, uses standard tools (imagemagick, awk, scp), and can be adapted to any kiosk or Chromium-based setup to verify font rendering and color accuracy.
Provides a robust method for capturing a screenshot from a running X display and detecting whether meaningful content (the dashboard) has painted. It uses xwd for capture, convert for conversion, and calculates image standard deviation to differentiate a blank desktop from the actual kiosk UI. The script includes retry logic, diagnostics, and a stable-paint threshold mechanism, making it a reusable component for any e2e test framework that needs to confirm visual output before further testing.
Uses guestfish to apply patching to a qcow2 Raspberry Pi image before e2e testing. It removes conflicting X11 configs, disables services not needed in QEMU (swap, wlan devices), masks DRI device units, and configures autologin. This script is fairly decoupled from FullPageOS specifics (only a few path references) and can be reused as a template for preparing any Raspberry Pi OS image for QEMU-based testing, demonstrating a clean pattern for automated image manipulation.