# Steam-TV-Box package list (live-build .list.chroot format: one package per line). # # This machine is a LOCAL gaming box first and a media station second: real GPU, real # CPU, games run here rather than being streamed in. That is the difference from # hosts/thin-client, which runs Steam *Link* (a client for a PC somewhere else) and # needs no graphics performance at all. # # Because of that, this image is built against Debian trixie rather than the household # default — see the debian_release note in tools/build-steam-tv-box-iso.sh. Mesa 22.3 # (bookworm) predates most of the driver work that current titles rely on, and a # gaming box on an old Mesa is the one thing here that cannot be fixed later by # rebuilding a config file. # # NOT in this list and installed by hooks instead: # steam-installer, steam-devices -> 0300-steam.hook.chroot (needs `dpkg # --add-architecture i386` + `apt-get update` first, and live-build installs # package lists BEFORE it runs hooks, so it cannot be done from here) # the i386 halves of the graphics stack -> same hook, same reason # Spotify, Prism Launcher -> 0400-flatpak-apps.hook.chroot (Flathub) # --- Wayland compositor / session --- sway swayidle swaybg # Steam, Prism Launcher's Minecraft windows and most native games are X11 clients, so # Xwayland is load-bearing here rather than a nicety. xwayland greetd foot # --- Remote view/control (same wayvnc-with-a-mandatory-password posture as the thin # client; it is for administering the box, not for playing over) --- wayvnc # --- Graphics: the amd64 half. The i386 half is installed by 0300-steam.hook.chroot # after multiarch is enabled, and 32-bit games/Proton runtimes genuinely still # need it in 2026. --- mesa-vulkan-drivers mesa-va-drivers mesa-vdpau-drivers libgl1-mesa-dri libglx-mesa0 libvulkan1 # vulkaninfo/vkcube — the fastest way to answer "is this box actually accelerated?" # from the maintenance shell before blaming a game. vulkan-tools # glxinfo, for the same question on the GL side. mesa-utils libva-drm2 vainfo # --- Gaming runtime bits --- # Lets a game ask the system for the performance governor while it runs and hand it # back afterwards, instead of pinning this box to "performance" around the clock. gamemode # On-screen FPS/frametime overlay, opt-in per launch (MANGOHUD=1). Diagnostics, not # decoration: it is how you tell a CPU-bound stutter from a GPU-bound one. mangohud # Controller support. Steam's own controller stack covers Steam games; these cover # everything outside it (Prism/Minecraft, emulators, the browser). joystick evtest bluez bluetooth # Steam's runtime and many native titles link against these directly. libsdl2-2.0-0 libopenal1 # Proton/Wine prerequisites that apt will otherwise pull only as recommends. cabextract p7zip-full # Xbox/PlayStation pad firmware, plus the general non-free firmware blobs a real GPU # needs. Requires the contrib + non-free + non-free-firmware archive areas, which # tools/build-steam-tv-box-iso.sh passes to `lb config`. firmware-linux firmware-amd-graphics firmware-realtek firmware-iwlwifi firmware-misc-nonfree # --- Browser / media (the "same media functions as the other monitor clients" half) --- firefox-esr mpv mpv-mpris libmpv2 playerctl # wev prints the keysym for each key press — how to find out what a given TV remote's # buttons actually send. Same reasoning as the thin client's. wev # --- Audio --- pipewire pipewire-pulse pipewire-alsa wireplumber alsa-utils # 32-bit games play through pipewire-pulse's ALSA/Pulse shim; libpulse0:i386 comes with # the i386 batch in 0300-steam.hook.chroot. # --- Flatpak apps: Spotify and Prism Launcher (0400-flatpak-apps.hook.chroot) --- flatpak # Portals — Flatpak apps use these for file pickers and screen sharing under Wayland. # Without them Prism's "choose a Java binary" dialog and Spotify's file dialogs come up # empty rather than failing loudly, which is a confusing way to lose an evening. xdg-desktop-portal xdg-desktop-portal-wlr xdg-desktop-portal-gtk # --- Java for Prism Launcher's own use --- # Prism can download its own JREs, but only if it has network at the time. Shipping # both the LTS and the current runtime means Minecraft launches offline too: 8 for # anything pre-1.17, 21 for current versions. openjdk-21-jre openjdk-8-jre # --- Agent runtime --- python3 python3-venv # trixie ships paho-mqtt 2.x; steamtv_agent is written against both the 1.x and 2.x # callback APIs (see make_client() in main.py), so apt's package is used as-is. python3-paho-mqtt procps # --- Networking --- network-manager # --- Out-of-band admin --- openssh-server sudo # --- Session plumbing --- # session-watcher parses `swaymsg -t subscribe` events with jq; the sway config's # workspace logic depends on it. jq # HDMI-CEC (cec-ctl) for turning the TV itself on and off — steamtv_agent/display_power.py. v4l-utils # media-player talks to a running mpv over its JSON IPC socket (mpv.conf's # input-ipc-server) so a second `media-player ` loads into the existing window # instead of opening a competing MPRIS player. socat # --- Misc --- ca-certificates curl openssl less vim-tiny git # NOTE: gamescope is NOT listed here on purpose. It is the right way to run Big # Picture on a TV (integer-scaled, its own framerate limiter, no compositor tearing), # but its availability in the target release was not verified from this environment — # 0300-steam.hook.chroot installs it if apt has it and steam-big-picture falls back to # plain Xwayland if it does not, so a missing gamescope costs polish rather than a # broken image. # NOTE: NVIDIA users — see 0300-steam.hook.chroot. The driver is not in this list # because it must not be installed on an AMD/Intel box, and which one this is comes # from `gpu_vendor` in CoreSystemConfig.json.