# Thin-client package list (live-build .list.chroot format: one package per line). # Phase 11, docs/project-plan.md. # --- Wayland compositor / session --- sway swaylock swayidle swaybg xwayland greetd foot # --- Remote view/control (the chosen replacement for RDP — see project-plan §2) --- wayvnc # --- Browser / media --- firefox-esr mpv # mpv-mpris is packaged in Debian bookworm (mpv-mpris 0.9-x). VERIFY with # `apt-cache policy mpv-mpris` against your mirror before the first real build; if it # is missing, it has to be built from source in a hook and needs mpv + libmpv-dev. mpv-mpris libmpv2 playerctl # --- Audio --- pipewire pipewire-pulse wireplumber alsa-utils # --- Steam Link comes from Flathub, not apt (see 0400-flatpak-steamlink.hook.chroot) --- flatpak # --- Agent runtime --- python3 python3-venv # Debian bookworm ships paho-mqtt 1.6.x. thinclient_agent is written to work against # both the 1.x and 2.x callback APIs, so this package is used as-is rather than pip'd. python3-paho-mqtt procps # --- Networking --- # NetworkManager over iwd+systemd-networkd: these boxes are wired-preferred but some # rooms will be WiFi-only, and NM handles both from one tool (nmcli/nmtui) that a human # can drive over wayvnc or SSH without editing per-interface unit files. network-manager # --- Out-of-band admin (wayvnc is the primary remote channel; SSH is the fallback # for when the compositor itself is what's broken) --- openssh-server sudo # --- Now-playing widget (0800-eww-widget.hook.chroot tries apt, falls back to a # documented placeholder if not packaged; foot is already listed above for the # maintenance-shell keybind, fullscreen-watcher.sh's tree query just needs jq) --- eww jq # --- Outbound RDP/VNC client (thinclient_agent/remote_desktop.py) — one app for both # protocols instead of xfreerdp + a separate VNC viewer --- remmina remmina-plugin-rdp remmina-plugin-vnc # --- HA mobile-app browser remote (thinclient_agent/input_control.py) — Wayland input # injection; NOT xdotool, which is X11-only --- ydotool # --- Camera gesture control (1100-gesture-control.hook.chroot, OPT-IN per image) --- # Deliberately NOT python3-opencv: mediapipe declares opencv-contrib-python as a # dependency and pip installs its own copy into the venv regardless, so apt's OpenCV # would just be a second unused one. What IS needed from apt is the set of shared # libraries those manylinux wheels dlopen at runtime — the wheels bundle none of these. libgl1 libglib2.0-0 # sounddevice is a hard dependency of mediapipe and loads PortAudio at import time even # though only its audio tasks use it. libportaudio2 # For finding the right /dev/video* to put in gesture-config.json: `v4l2-ctl --list-devices`. v4l-utils # --- Idle-timeout gallery slideshow (configs/idle-gallery/) — mount.cifs for the # read-only SMB share; the slideshow player itself is mpv, already listed above --- cifs-utils # --- Firmware for real hardware (needs contrib + non-free-firmware archive areas, # which build-thin-client-iso.sh passes to `lb config`) --- firmware-linux firmware-iwlwifi firmware-realtek firmware-misc-nonfree # --- Build/runtime deps for the pip-installed voice satellite venv --- python3-dev build-essential libopenblas0 git # --- Misc --- ca-certificates curl openssl less vim-tiny # NOTE: wyoming-satellite and openwakeword are Python packages, NOT Debian packages. # They are installed into a venv under /opt by 0600-voice-satellite.hook.chroot # (PEP 668 makes a bare `pip3 install` into the system interpreter fail on bookworm). # NOTE: spotifyd/librespot are not in bookworm main either — see # 0500-spotify-connect.hook.chroot. # NOTE: mediapipe is not a Debian package at all (no python3-mediapipe in bookworm or # trixie); it is PyPI-only and goes into its own venv, see 1100-gesture-control.hook.chroot.