Our arcade cabinet and the lab gaming stations all run Batocera Linux, and for a long time every machine carried the same pile of manual tweaks: copied game folders, hand-edited configs, a theme dropped into the right directory. We finally did what we should have done from the start and turned the whole setup into a proper distribution: GameEdu Projects, a Batocera-based build with its own package repositories, utility packages, theme and branding.
Why we chose Batocera
The retro-gaming OS space is crowded, and we tried most of it before settling:
| Distro | Base | Focus | Why not for the lab |
|---|---|---|---|
| RetroPie | Raspberry Pi OS | Retro suite for the Pi | x86 machines are an afterthought, setup stays manual |
| Recalbox | Custom Linux | Retro appliance | more closed than its sibling, slower to add systems |
| Lakka | LibreELEC | Pure RetroArch OS | no couch-friendly frontend for kids |
| Lutris | Any desktop Linux | Game manager and launcher | expects a full desktop underneath, not an appliance |
| EmuDeck | SteamOS | Emulation installer for the Deck | an installer, not an OS we can flash |
| ChimeraOS | Arch | Console-style Steam machine | retro systems are an add-on, not the core |
| Bazzite | Fedora Atomic | SteamOS-like for PCs and handhelds | PC gaming first, retro bolted on via EmuDeck |
| SteamOS 3 | Arch | Valve's console OS | Steam first, and it targets Valve-blessed hardware |
The modern SteamOS wave, Bazzite and friends, is genuinely impressive, but it answers a different question: PC gaming on the couch. For a fleet of retro stations, Batocera ended up the only system that treats both x86 boxes and Raspberry Pis as first-class citizens, boots straight into EmulationStation, updates as a single image, and stays easy to rebrand and repackage. Exactly the foundation a custom distribution needs.
Why our own distro?
Stock Batocera is excellent, but it is built for one person's living room. A lab full of machines needs the same image everywhere: the same games, the same controller mappings, the same network setup, and no surprises after a reflash. Baking everything into a distro means a new machine is ready the moment the flash finishes, and an update is one command instead of an afternoon of copying files around.
Our own package repos
The heart of the build is a set of pacman-style package repositories: batocera-public-games for freeware and open-source titles, batocera-ported-games for native Linux ports, and batocera-private-games for licensed content that stays inside the lab. Every game ships as a package with its metadata and artwork in .PKGINFO, so installs, updates and removals work like any other package manager. The game library on this site is generated from the very same repositories, so the website and the machines can never drift apart.
| Repository | What ships in it | Visibility |
|---|---|---|
batocera-public-games | freeware, open-source classics and source ports | public |
batocera-ported-games | native Linux ports of boxed titles | public |
batocera-private-games | licensed content for the lab machines | lab only |
Utility packages
Next to the games live the utility packages: a WireGuard profile that connects each box to the lab network (see our VPN guide), a connector for our self-hosted RetroAchievements server so unlocks and leaderboards keep working without the public internet, kiosk-mode defaults that keep students out of system settings, and automatic save-state policies so a session can continue exactly where it stopped.
| Package | What it does |
|---|---|
gameedu-vpn | WireGuard profile that joins the box to the lab network |
gameedu-ra-connect | points achievements and leaderboards at our self-hosted RetroAchievements server |
gameedu-kiosk | locks system settings for student sessions |
gameedu-savestates | automatic save-state policy so sessions continue where they stopped |
gameedu-theme | the EmulationStation theme |
gameedu-splash | boot splash and per-system load screens |
Themes
The EmulationStation theme matches the look of this site: dark panels, neon cyan accents and the GameEdu logo, with per-platform views that surface the same cover art the website uses. It is one theme package, versioned and updated like everything else in the build.
Splash images
And then the small things that make a build feel finished: a custom boot splash, per-system splash screens shown while a game loads, and matching controller diagrams. They ship as one package too, so rebranding the whole fleet for an event takes minutes, not an evening with a USB stick.
GameEdu Projects now powers the arcade cabinet and the station fleet. If you want to build something similar, start with our Batocera flashing guide and the story of making the arcade cabinet.