Media Services

Posted on 4 2026

The source material this series draws on describes the Linux DLNA situation as “far from perfect” and then presents three empty section headings. It was written in 2014. The situation has improved substantially since then, and the modern approach to media on a self-hosted network looks quite different from the DLNA-centric model it was building toward.

This page covers the practical media stack for a Kubuntu desktop connected to a self-hosted network: local playback tools, Jellyfin for self-hosted media streaming, DLNA for UPnP device compatibility, and PipeWire for network audio.

Local media playback

VLC

VLC remains the definitive media player for Linux. It plays virtually every format without requiring codec installation, handles network streams natively, and is actively maintained.

sudo apt install vlc

VLC handles local files, network streams, and DLNA/UPnP sources through its View > Playlist > Local Network discovery. For playing media from the NAS via SMB mount or direct stream URL, VLC is the reliable default.

Haruna

Haruna is a KDE-native video player built on libmpv. For a Kubuntu desktop it integrates more naturally with the KDE environment than VLC, uses the KDE file picker, respects KDE themes, and handles keyboard shortcuts in a way that feels consistent with the rest of the desktop.

sudo apt install haruna

Haruna is the better choice for day-to-day video playback on Kubuntu. VLC is worth keeping for format compatibility and network stream edge cases.

Elisa

Elisa is KDE’s music player. It integrates with the KDE media framework, supports local music libraries, and connects to online radio streams. For a self-hosted setup it reads music from wherever the library lives, including NAS mounts.

sudo apt install elisa

Configure the music collection paths in Elisa’s settings to include the NAS music directory, if it is mounted locally.

Gwenview

Gwenview is the KDE image viewer. It handles local photos and basic photo management, and integrates with Dolphin for quick preview. For more serious photo organisation, Digikam is the KDE-native alternative and supports connecting to remote photo libraries.

sudo apt install gwenview

Self-hosted media streaming with Jellyfin

The more capable approach for a self-hosted network is Jellyfin running on the NAS or server, with the desktop accessing it via a browser or dedicated client. Jellyfin organises video, music, photos, and books into a browsable library with metadata, artwork, and watch state tracking.

The Jellyfin server setup is covered in the NAS and server sections of this series. On the desktop, access it three ways:

Browser

The Jellyfin web interface works in Brave. Navigate to your Jellyfin instance:

https://jellyfin.yourdomain.net

The web interface handles most media types natively. For formats that require transcoding, Jellyfin handles it server-side and streams a compatible format to the browser.

Jellyfin Media Player

The dedicated desktop client provides a better playback experience than the browser, particularly for video, since it uses MPV for local decoding rather than relying on browser codec support.

# Download the latest AppImage from GitHub releases
wget https://github.com/jellyfin/jellyfin-media-player/releases/latest/download/jellyfinmediaplayer-*.AppImage \
    -O ~/Applications/jellyfinmediaplayer.AppImage
chmod +x ~/Applications/jellyfinmediaplayer.AppImage

Or install via Flatpak if Flatpak is configured:

flatpak install flathub com.github.iwalton3.jellyfin-media-player

On first launch, point it at your Jellyfin server URL and log in.

Kodi with Jellyfin

If you prefer Kodi’s interface for a living room or media centre setup, the Jellyfin for Kodi add-on connects Kodi to your Jellyfin library while using Kodi’s playback engine and interface.

sudo apt install kodi

Install the Jellyfin repository add-on from within Kodi, then install the Jellyfin for Kodi plugin. This gives full library sync with artwork, watched state, and resume positions synced back to the Jellyfin server.

DLNA and UPnP

DLNA remains relevant for compatibility with TVs, AV receivers, network media players, and other UPnP devices that predate app-based streaming. If you have any such devices on the network, running a DLNA server on the desktop or NAS lets them browse and play your media library.

Rygel

Rygel is the GNOME/freedesktop DLNA media server, the tool referenced in the original source material. It is still actively maintained and works on Kubuntu despite being a GNOME application.

sudo apt install rygel

Configure Rygel at ~/.config/rygel.conf:

[general]
interface=
port=0
enable-transcoding=true
log-level=default

[Tracker3]
enabled=true

[MediaExport]
enabled=true
uris=/home/yourusername/Videos;/home/yourusername/Music;/home/yourusername/Pictures

[GstLaunch]
enabled=false

Replace the paths with wherever your media actually lives, including NAS mount points.

Start Rygel:

rygel &

Rygel advertises itself on the local network via UPnP. DLNA devices on the same network will discover it automatically. To start Rygel automatically at login, add it to KDE Autostart: System Settings > Autostart > Add Application.

Controlling DLNA renderers

If you have DLNA-compatible devices you want to push media to from the desktop, Gnome-mpv (now Celluloid) and VLC both support DLNA renderer control. In VLC, go to Playback > Renderer to see available DLNA/Chromecast renderers on the network.

For more capable UPnP control point functionality, install Frenzik (formerly djmount) or use the network browsing built into VLC’s playlist view.

Network audio with PipeWire

The source material references PulseAudio for network audio, noting it “doesn’t work out of the box.” PulseAudio has been replaced by PipeWire on Kubuntu 24.04, which handles network audio considerably better.

PipeWire is installed and running by default on Kubuntu 24.04. No installation is needed.

Streaming audio to a network receiver

PipeWire supports PulseAudio’s RTP streaming protocol for sending audio to network receivers. To stream audio from the desktop to another PipeWire or PulseAudio instance on the network:

Install the network audio module:

sudo apt install pipewire-audio

Load the RTP sender module:

pactl load-module module-rtp-send destination=224.0.0.56 port=9875

This sends audio to the multicast address, which any PipeWire or PulseAudio instance on the network configured to receive from that address will pick up.

Snapcast for synchronised multi-room audio

For proper multi-room audio where music plays in sync across multiple devices and locations, Snapcast is the right tool. The Snapcast server runs on the NAS, the Snapcast client runs on each device including the desktop.

Install the client:

sudo apt install snapclient

Configure it to connect to the Snapcast server on the NAS:

sudo tee /etc/default/snapclient << 'EOF'
SNAPCLIENT_OPTS="-h nas.yourdomain.net"
EOF

sudo systemctl enable --now snapclient

The Snapcast server setup is covered in the NAS section of this series.

Flatpak and media applications

Some media applications are best installed via Flatpak to get the latest version without waiting for Ubuntu package updates. If you prefer using Flatpak for media applications:

sudo apt install flatpak
flatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo

Applications worth considering via Flatpak: Jellyfin Media Player, Spotube (open source Spotify client), Freetube (YouTube client), and Shortwave (internet radio).

The self-hosted media stack has matured considerably since 2014. Jellyfin running on a NAS, accessed from the desktop via a dedicated client or browser, is a significantly better solution than the DLNA-centric approach the source material was building toward. DLNA remains useful for legacy device compatibility but is not the primary model for a modern self-hosted media setup.