Skip to main content
Version: Stable 3.x

How to setup a PulseAudio output inside containers

This tutorials walks you though the steps required to setup a PulseAudio output when running LibreTime inside containers.

info

1. Create a PulseAudio server socket

First you need to create a PulseAudio connection socket on the host:

pactl load-module module-native-protocol-unix socket=$(pwd)/pulse.socket

To persist the socket after a reboot, you can save the socket configuration to a file:

mkdir -p ~/.config/pulse
cp /etc/pulse/default.pa ~/.config/pulse/default.pa
echo "load-module module-native-protocol-unix socket=$(pwd)/pulse.socket" | tee -a ~/.config/pulse/default.pa
info

See man default.pa for more details on how to persist a PulseAudio configuration.

danger

Make sure that the PulseAudio connection socket is owned by the same user running inside the container. By default the user inside the container will be 1000:1000, so you should be fine if your host user also has the uid 1000.

2. Configure the PulseAudio client

Next, you need to configure the PulseAudio client inside the liquidsoap container. Save the following configuration file to pulse.client.conf:

pulse.client.conf
default-server = unix:/tmp/pulse.socket

# Prevent a server running in the container
autospawn = no
daemon-binary = /bin/true

# Prevent the use of shared memory
enable-shm = false

Configure the liquidsoap service in your docker compose file using the following settings:

docker-compose.yml
services:
liquidsoap:
volumes:
- ./pulse.socket:/tmp/pulse.socket # Mount the PulseAudio server socket
- ./pulse.client.conf:/etc/pulse/client.conf # Mount the PulseAudio client configuration

3. Configure LibreTime with the new PulseAudio output

Finally, you need to configure LibreTime to output to the PulseAudio client, add the following to your configuration file:

config.yml
stream:
outputs:
system:
- enabled: true
kind: pulseaudio

You can now start/restart LibreTime, and check the logs for any errors.

docker-compose down
docker-compose up -d

docker-compose logs -f liquidsoap