Monorepo for Aesthetic.Computer aesthetic.computer

FedAC Kiosk USB — Boot Report#

Date: 2025-02-24 USB: 14.5G (toss piece, EROFS lzma, Fedora 43 live)


Current Status: Black Screen in Firefox#

Firefox boots and runs (F10 opens bookmarks, cursor visible), but all page content is black — including a plain HTML diagnostic page.

Root Cause: firefox.cfg Color Override#

// These two lines together = black text on black background
defaultPref("browser.display.background_color", "#000000");
defaultPref("browser.display.document_color_use", 2);
// document_color_use=2 means "ALWAYS override page colors with user colors"
// We set background to black but never set foreground → defaults to black
// Result: ALL page content invisible (black on black)

Browser chrome (bookmarks, toolbar) still renders because it uses its own color scheme — only web page content is affected by document_color_use.

Fix#

Remove document_color_use = 2 (let pages use their own CSS colors). Keep the black background for flash prevention but don't override page foreground colors.

If Still Black After Fix#

Escalation path:

  1. Add LIBGL_ALWAYS_SOFTWARE=1 to kiosk-session.sh (force software GL rendering)
  2. Add gfx.webrender.force-disabled=true to firefox.cfg (disable WebRender)
  3. Simplify firefox.cfg to absolute minimum (rule out autoconfig parsing errors)
  4. Enable SSH on kiosk for remote debugging via port 9222

Boot Chain (All Working)#

UEFI POST
└─ GRUB (timeout=0, no Plymouth)
   └─ Kernel 6.17.1-300.fc43.x86_64 (loglevel=7)
      └─ initrd (dracut + dmsquash-live)
         └─ mounts EROFS (lzma, 2.1GB) via overlayfs
            └─ systemd → multi-user.target
               └─ getty@tty1 autologin → liveuser
                  └─ .bash_profile → kiosk-session.sh
                     └─ cage (Wayland kiosk compositor) ✅
                        └─ Firefox --fullscreen ✅
                           └─ file:///...piece.html → BLACK ❌

USB Layout#

sda1 (400MB FAT32 "BOOT")
├── EFI/BOOT/grub.cfg
└── loader/{linux, initrd}

sda2 (ext4 "FEDAC-LIVE")
├── LiveOS/squashfs.img  (2.1GB EROFS lzma)
└── logs/                (persistent, empty — log services not firing)

Key EROFS Files#

Path Purpose
/usr/local/bin/kiosk-session.sh cage + Firefox launch
/usr/local/share/kiosk/piece.html toss bundle (599KB)
/usr/local/share/kiosk/diag.html diagnostic page
/usr/lib64/firefox/distribution/policies.json Firefox admin policies
/usr/lib64/firefox/firefox.cfg Firefox autoconfig prefs
/usr/lib64/firefox/defaults/pref/autoconfig.js Loads firefox.cfg
/etc/systemd/system/getty@tty1.service.d/autologin.conf liveuser autologin
/home/liveuser/.bash_profile Runs kiosk-session.sh on tty1
/usr/bin/cage Wayland kiosk compositor

Current kiosk-session.sh#

#!/bin/bash
export XDG_SESSION_TYPE=wayland
export XDG_RUNTIME_DIR="/run/user/$(id -u)"
export MOZ_ENABLE_WAYLAND=1
exec > /tmp/kiosk.log 2>&1
exec cage -- \
  firefox --fullscreen --no-remote \
  --remote-debugging-port=9222 \
  --profile /home/liveuser/.mozilla/firefox/kiosk \
  file:///usr/local/share/kiosk/piece.html

Resolved Issues#

Issue Cause Fix
Boot shuts down GRUB gfxmode=auto + terminal_output gfxterm Switched to terminal_output console
Plymouth holds VT Masked plymouth-quit.service Unmasked + drop-in with --retain-splash
HTTPServer crash __new__ bypassed BaseServer.__init__ PreBoundHTTPServer subclass
Firefox loads wrong URL policies.json hardcoded http://127.0.0.1:8080 Changed to file:///
PALS logo missing Watermark in rootfs Plymouth, but initrd shows Fedora logo Needs initrd rebuild (deferred)
Log services empty kiosk-log-dump at shutdown.target — may not fire on crash Needs early debug service

Roadmap#

Immediate#

  • Fix document_color_use black-on-black issue
  • Verify piece.html renders in Firefox on kiosk
  • Enable SSH on kiosk for remote debugging

Short Term#

  • Re-enable Plymouth with PALS logo
  • Pre-warm Firefox profile (startup cache)
  • Fix log dump services (early boot + shutdown)
  • Switch EROFS to zstd compression (faster decompression)

Long Term#

  • initrd framebuffer hook (PALS logo before Plymouth)
  • Custom minimal initrd (strip unused dracut modules)
  • Piece server in Rust (replace Python, <10ms startup)