Playback moves to Kodi (standalone on GBM/KMS -- the smooth, hardware-decoded LibreELEC path). mediapi becomes a thin remote: it browses media and controls Kodi over its JSON-RPC HTTP API. This drops every mpv/DRM/X-mirror problem (DRM-master exclusivity, gpu-next "export failed" wedges, X-mirror A/V desync, software-decode choppiness) -- none of which had a working single config. - new mediapi/kodi.py (stdlib JSON-RPC client); player.py rewritten to poll and drive Kodi (Player.Open/PlayPause/Seek, Application.SetVolume, Player.GetProperties), same public interface + keep-playing auto-advance - config.py: KODI_* settings replace MPV_SOCKET; __init__ + api_routes updated - delete mpv_ipc.py, the mpv/X units, start-mpv/session scripts - new systemd/mediapi-kodi.service.template (standalone Kodi on tty1) + scripts/configure-kodi.py (headlessly enable Kodi's JSON-RPC web server) - install.sh now bootstraps a BARE Pi OS Lite end to end: apt base packages, installs uv, installs Kodi, enables its web API, configures the AP, installs + starts services (only git need be preinstalled). Auto-seeds .env from the example on first run. - README + .env.example updated for the Kodi architecture Dual HDMI is handled in hardware (external splitter off one port); no software mirror -- see git history for why that can't work smoothly on this Pi. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
25 lines
828 B
Text
25 lines
828 B
Text
[Unit]
|
|
Description=Kodi media center (standalone, GBM/KMS -- the actual player)
|
|
# Needs the DRM/HDMI + sound devices present; takes over the console VT.
|
|
After=local-fs.target systemd-udev-settle.service sound.target
|
|
Wants=systemd-udev-settle.service
|
|
Conflicts=getty@tty1.service
|
|
|
|
[Service]
|
|
User=${MEDIAPI_USER}
|
|
# Kodi on GBM needs: video+render (GPU/DRM), input (remotes/keyboard), audio
|
|
# (HDMI/ALSA), tty (own the VT). PAMName=login gives it a real session so it
|
|
# can take the seat's devices.
|
|
SupplementaryGroups=video render input audio tty dialout
|
|
PAMName=login
|
|
TTYPath=/dev/tty1
|
|
StandardInput=tty
|
|
StandardOutput=journal
|
|
StandardError=journal
|
|
# kodi-standalone launches Kodi and relaunches it if it exits from the UI.
|
|
ExecStart=/usr/bin/kodi-standalone
|
|
Restart=on-failure
|
|
RestartSec=5
|
|
|
|
[Install]
|
|
WantedBy=multi-user.target
|