Skip to content

AirPlay

Your odio node appears as an AirPlay 2 receiver on your local network via shairport-sync. No configuration needed on the client side.

  1. On your iPhone, iPad, or Mac, open Control Center or the AirPlay menu in any app.
  2. Select your odio node from the list of available speakers.
  3. Audio streams to the Pi.

Works with any app — Apple Music, Spotify, YouTube, podcasts, system audio.

AirPlay sessions appear as MPRIS players in the odio application and Home Assistant. You can see what’s playing and control playback from the UI.

In Snapcast mode, AirPlay audio is distributed to all rooms via Snapserver — see Snapcast setup.

Desktop integration (PulseAudio / PipeWire)

Section titled “Desktop integration (PulseAudio / PipeWire)”

On a Linux desktop, PulseAudio natively discovers AirPlay receivers on the network via its RAOP module. The odio node appears as a remote audio output in your sound settings, no extra software needed.

PipeWire’s PulseAudio compatibility layer handles RAOP discovery automatically. Install the RAOP discover module:

Terminal window
# Fedora
sudo dnf install pipewire-module-raop-discover
# Debian / Ubuntu
sudo apt install pipewire-pulse

Add to your PipeWire-pulse config (~/.config/pipewire/pipewire-pulse.conf.d/raop.conf):

context.modules = [
{ name = libpipewire-module-raop-discover }
]

Restart PipeWire:

Terminal window
systemctl --user restart pipewire-pulse

Load the RAOP discover module:

load-module module-raop-discover

Restart PulseAudio:

Terminal window
systemctl --user restart pulseaudio

The odio node appears as an AirPlay sink in your sound settings or pavucontrol.

shairport-sync runs as a systemd user service, outputting audio to PulseAudio. It registers itself on D-Bus as an MPRIS player, which is how the odio API picks it up and exposes playback controls. The installer handles all of this — D-Bus policies, PulseAudio backend configuration, and service setup.