···3030- [Getting started](#getting-started)
3131- [Renderer selection](#renderer-selection)
3232- [UPnP MediaRenderer — casting *to* fin](#upnp-mediarenderer--casting-to-fin)
3333+- [MPRIS — desktop media controls](#mpris--desktop-media-controls)
3334- [All settings](#all-settings)
3435- [Multiple servers](#multiple-servers)
3536- [Sub-commands](#sub-commands)
···7475 in the Now Playing bar with a `⇊ UPnP` badge. On by default; opt out with
7576 `--no-media-renderer` or `media_renderer.enabled = false`
7677 (see [UPnP MediaRenderer](#upnp-mediarenderer--casting-to-fin)).
7878+- **MPRIS** (Linux & the BSDs) — while the TUI runs, fin registers on the
7979+ D-Bus session bus as `org.mpris.MediaPlayer2.fin`, so media keys,
8080+ GNOME/KDE applets, waybar, and `playerctl` control playback — whichever
8181+ renderer is active, Chromecast and UPnP included
8282+ (see [MPRIS](#mpris--desktop-media-controls)).
7783- **Playback modes** — shuffle, repeat-off/all/one, [ReplayGain](#replaygain)
7884 (track / album), [crossfade](#crossfade) between adjacent tracks
7985 (traditional cosine curves *or* additive DJ-mixed), and a
···294300Playback pushed by a control point is **not scrobbled** — the item ids are
295301foreign to your media server, so session reports/scrobbles are skipped for
296302cast-in tracks.
303303+304304+## MPRIS — desktop media controls
305305+306306+On **Linux and the BSDs**, fin registers itself on the D-Bus session bus as
307307+`org.mpris.MediaPlayer2.fin` while the TUI runs. That's the standard
308308+desktop media-player interface, so it works with whatever already speaks
309309+MPRIS:
310310+311311+- **hardware media keys** (play/pause/next/previous) — even when the
312312+ terminal isn't focused,
313313+- **desktop applets** — GNOME's calendar-dropdown media widget, KDE's
314314+ Media Player plasmoid and lock-screen controls,
315315+- **bars** — waybar's `mpris` module and friends,
316316+- **`playerctl`** for scripting:
317317+318318+```bash
319319+playerctl -p fin play-pause
320320+playerctl -p fin next
321321+playerctl -p fin metadata # title, artist, duration, cover art
322322+playerctl -p fin position 30 # absolute seek (seconds)
323323+playerctl -p fin volume 0.5
324324+playerctl -p fin shuffle On
325325+playerctl -p fin loop Playlist # = repeat all
326326+```
327327+328328+MPRIS drives whatever renderer is currently active — switch to a
329329+Chromecast or UPnP device in the TUI and your media keys transparently
330330+control the cast session. Track metadata (title, artist, duration, cover
331331+art) is pushed to the desktop as it changes.
332332+333333+There's nothing to configure and no system dependency to install (the
334334+D-Bus protocol is spoken natively — no `libdbus`). On a headless box with
335335+no session bus, fin simply logs a warning and carries on. A second fin
336336+instance registers as `org.mpris.MediaPlayer2.fin.instance<pid>`, per the
337337+MPRIS spec.
297338298339## All settings
299340