medias 0.6.1

TV media player on bare DRM/KMS: Vulkan UI plane over libmpv video, for local files, UPnP/DLNA servers and YouTube, controlled by HDMI-CEC remote, evdev or terminal
# Optional separate-VT launcher

Normal SSH/Zellij startup uses the player directly, as before:

```sh
cargo build --release
./target/release/medias \
  --videos=Movies=/home/andy/tv/movies \
  --videos=Series=/home/andy/tv/series \
  --music=/home/andy/Music
```

This command does not require sudo for VT setup. It uses the caller's existing
DRM and input device permissions. The player owns a VT only when started from
a real Linux console; pseudo-terminals retain direct KMS operation.

Use the optional launcher when a separate managed VT is explicitly wanted:

```sh
./scripts/medias-vt \
  --videos=Movies=/home/andy/tv/movies \
  --videos=Series=/home/andy/tv/series \
  --music=/home/andy/Music
```

The launcher requires Python 3.11+, `sudo`, `openvt` (package `kbd`), and
`setpriv` (package `util-linux`). It uses `sudo` to allocate a free VT and switch
the HDMI display to it. Medias runs as the invoking user, with the same groups,
working directory, and environment, so the session's PipeWire (the default audio
output) stays reachable. Normal DRM, input, audio, and CEC device permissions still apply.

Use the TV remote or a keyboard connected to the Pi. Ctrl-C in the launching
SSH/Zellij pane requests shutdown. Closing that pane also requests shutdown;
detaching Zellij keeps the session running. The launcher waits for medias cleanup
and `openvt` to return to the previous VT. It does not forcibly kill the player.

Logs append to `$XDG_STATE_HOME/medias/console.log`, or
`~/.local/state/medias/console.log` when `XDG_STATE_HOME` is unset. Use
`--log /path/to/log` to change it, or `--binary /path/to/medias` to select another
build. Other arguments are passed directly to medias.

Both launch paths use the existing DRM/KMS display backend. Neither creates a
desktop window. Real-console startup retains active-VT checks and restoration.

Hardware-free launcher checks:

```sh
python3 -m unittest discover -s scripts -v
```

These tests run fake media processes and use temporary Unix sockets. They do not
invoke `sudo` or `openvt`, access GPUs, or switch VTs.