Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
bc250-console
A custom Bazzite GNOME (bootc) image for the AMD BC-250, built as a kid-friendly couch gaming console with remote parent administration. Recipes build with BlueBuild; the installer ISO comes from bootc-image-builder; installed consoles update over-the-air from this Gitea's container registry.
Image: git.lazypugs.com/ckoch/bc250-console-gnome:latest
Recipe: recipes/bc250-console-gnome.yml
What it adds on top of bazzite-gnome:stable
| Area | Change |
|---|---|
| GPU | cyan-skillfish-governor-smu (BC-250 DVFS governor, from the filippor COPR), enabled |
| Memory | ttm.pages_limit / ttm.page_pool_size kargs so the GPU can use the full 16 GB shared GDDR6 |
| Remote admin | openssh-server (enabled); Sunshine auto-serves the kid's session to Moonlight; tailscaled enabled. (RDP via bc250-remote-setup exists but is blocked by a mutter/GFX1013 crash) |
| Console behavior | All suspend paths masked, no screen lock/dim, GNOME animations off — always on, always reachable |
| Kid experience | Steam Big Picture autostarts for the kid account only |
| Apps | First-boot flatpaks: ProtonUp-Qt, Heroic, RetroDECK, Prism Launcher (Minecraft), Chromium, Moonlight — Steam, Firefox, auto-updates already in the Bazzite base |
| Cloud gaming | GeForce NOW via a Chromium web-app shortcut (the native GFN app requires Vulkan video decode the BC-250 physically lacks — error 0xC0F11312). Moonlight client included for streaming from a home Sunshine host. Streams CPU-decode; keep to 1080p |
| Fixes | hhd.service masked (crash-loops on BC-250) |
| Docs | Parent manual baked at /usr/share/doc/bc250-console/OPERATIONS.md |
Accounts
Build with build-console.sh + your console.env to
bake real usernames, passwords, and display names directly into the ISO
(see BUILD-CONSOLE.md). Without it, the ISO bakes the placeholder users
from iso-config.toml: parent (admin/wheel) and kid
(standard), passwords to change on first login.
The kid's account can be renamed post-install (see OPERATIONS.md) — the
Big Picture autostart follows CONSOLE_KID_USER in /etc/bc250-console.conf.
⚠️ The installer wipes the first disk with no prompts. Don't boot it on a machine whose disk you care about.
Documentation
BUILD-CONSOLE.md— build the image, generate the ISO, publish OTA updates (verified podman and docker paths, with workarounds)OPERATIONS.md— day-2 admin: connecting, installing games remotely, updates/rollback, GPU tuning, health checksWIRING.md— PSU/mains wiring, J1000 pinout, power-switch design (AC rocker + AUTO_PWRON), fans, first power-onBIOS-FLASH.md— backup + flash the modded firmware via the J4004 header, then the VRAM/IOMMU settings (ROMs are local-only, not in this repo)
Hardware prerequisites (on the board, not in the image)
Modded BIOS (see mothenjoyer69/bc250-documentation), then BIOS settings: 512 MB dynamic VRAM, IOMMU disabled, auto power-on.
Known issues (found the hard way on real hardware)
All of these are worked around in this image; listed here for searchability and until fixed upstream.
- GNOME Remote Desktop (RDP/VNC) crashes the whole session on this GPU:
gnome-shellSIGSEGV inmeta_cursor_renderer_get_cursorviameta_screen_cast_monitor_stream_src_set_cursor_metadata(mutter 50.3, cyan-skillfish/GFX1013) the moment a client connects and requests cursor-metadata frames.MUTTER_DEBUG_DISABLE_HW_CURSORS=1does not help. Workaround: Sunshine + Moonlight instead (baked). Upstream report to GNOME/mutter: pending. - Sunshine crash-loops (SIGSEGV, exit 139) probing the Vulkan H.264
encoder on a GPU with no video-encode hardware, instead of falling
through to the next encoder. Workaround:
encoder = softwareseeded before first start (baked). Upstream report to LizardByte: pending. - GeForce NOW's native Linux app cannot run — error
0xC0F11312: the client hard-requires Vulkan video-decode extensions and the BC-250's silicon has no VCN block at all. Unfixable at the driver level. Workaround: GFN via Chromium web app (baked shortcut). - BlueBuild
default-flatpaks@v1notify: truebreaks on multi-user systems: the post-install notification runssudo -uwith all human users newline-joined into one name, failing the whole install service. Workaround:notify: false. Upstream report: pending. - Bazzite's
bazzite-steam-bpmshows "ERROR: code=0; This is strange..." at login when Steam lingers from a previous session: awaitpidrace on already-gone PIDs plus anif !clobbering$?. Workaround: this image ships its own quit-and-wait wrapper. - Cosmetic:
amdgpulogs a wall ofhpd(rx)/dal_irqerrors at every boot on BC-250 — the display core probes IRQ sources this cut-down chip lacks. Harmless; every BC-250 does this.
Roadmap / hoped-for work
- File the four upstream bug reports above (coredumps and stack traces are in hand).
- In-home game streaming: Sunshine host VM (R730, RTX 3050 passthrough) serving the baked Moonlight client — self-hosted "GeForce NOW" at LAN latency. Fortnite stays on real GFN (Epic's anti-cheat policy).
- Thermal soak validation and GPU governor ceiling tuning (see OPERATIONS.md) once long gaming sessions accumulate.
- Retry GNOME RDP after a fixed mutter ships; retry native GFN if NVIDIA adds a software-decode fallback.
- Explicit non-goal: the experimental 40-CU unlock — this console stays on the stable 24-CU configuration.
Credits
Forked from 62fixolab/Latest-Bazzite-AMD-BC-250-Patched-Images, which builds on vietsman's patched images and filippor/cyan-skillfish-governor, on top of ublue-os/bazzite. The 40-CU experimental tooling from upstream is intentionally not included — this image stays on the stable 24-CU configuration.