medias 0.3.4

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. For PipeWire, set `MEDIAS_AO=pipewire` before
the command. 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.