From 489d7c645b29ff58a2e622ab9fde3951272d576c Mon Sep 17 00:00:00 2001 From: Tueem Date: Mon, 6 Jul 2026 19:33:25 +0200 Subject: [PATCH] feat(audio): add audio server --- audio-manager/Dockerfile | 26 ++++++++++++++++++++++++++ audio-manager/start.sh | 27 +++++++++++++++++++++++++++ docker-compose.yml | 18 ++++++++++++++++++ kiosk/Dockerfile | 2 ++ 4 files changed, 73 insertions(+) create mode 100644 audio-manager/Dockerfile create mode 100644 audio-manager/start.sh diff --git a/audio-manager/Dockerfile b/audio-manager/Dockerfile new file mode 100644 index 0000000..1b60f34 --- /dev/null +++ b/audio-manager/Dockerfile @@ -0,0 +1,26 @@ +FROM node:18-bookworm-slim + +# Install PipeWire, WirePlumber, PulseAudio compat, ALSA, and D-Bus +RUN apt-get update && apt-get install -y \ + pipewire \ + pipewire-pulse \ + pipewire-alsa \ + wireplumber \ + dbus-x11 \ + git \ + && rm -rf /var/lib/apt/lists/* + +WORKDIR /app + +# Clone and build the PipeWire Web Remote interface +RUN git clone https://github.com/oudeis01/pipewire-web-remote.git . \ + && npm install \ + && npm run build + +COPY start.sh /start.sh +RUN chmod +x /start.sh + +# The Web UI defaults to 8080 +EXPOSE 8080 + +CMD ["/start.sh"] diff --git a/audio-manager/start.sh b/audio-manager/start.sh new file mode 100644 index 0000000..13fec60 --- /dev/null +++ b/audio-manager/start.sh @@ -0,0 +1,27 @@ +#!/bin/bash + +# Setup directories for PipeWire and PulseAudio sockets +export XDG_RUNTIME_DIR=/tmp +mkdir -p /tmp/pulse +mkdir -p /tmp/pipewire-0 + +# Initialize local DBus session (required by PipeWire/WirePlumber) +export DBUS_SESSION_BUS_ADDRESS=$(dbus-daemon --session --print-address --fork) + +echo "Starting PipeWire..." +pipewire & +sleep 1 + +echo "Starting WirePlumber session manager..." +wireplumber & +sleep 1 + +echo "Starting PipeWire-Pulse compatibility layer..." +pipewire-pulse & +sleep 1 + +# Ensure the PulseAudio socket is accessible to other containers +chmod -R 777 /tmp/pulse || true + +echo "Starting PipeWire Web Remote..." +exec npm start diff --git a/docker-compose.yml b/docker-compose.yml index 7660997..e588df8 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -16,15 +16,28 @@ services: environment: - DISPLAY=:0 + audio-manager: + build: ./audio-manager + restart: always + privileged: true # Required for proper ALSA/Hardware audio access in some setups + ports: + - "8080:8080" + volumes: + - pulse-socket:/tmp/pulse + devices: + - "/dev/snd:/dev/snd" + kiosk-1: build: ./kiosk restart: always depends_on: - display-manager + - audio-manager ports: - "5011:5011" volumes: - x11-socket:/tmp/.X11-unix + - pulse-socket:/tmp/pulse devices: - "/dev/dri:/dev/dri" environment: @@ -34,16 +47,19 @@ services: - LAUNCH_URL=https://github.com - KIOSK=1 - GPU=1 + - PULSE_SERVER=unix:/tmp/pulse/native kiosk-2: build: ./kiosk restart: always depends_on: - display-manager + - audio-manager ports: - "5012:5012" volumes: - x11-socket:/tmp/.X11-unix + - pulse-socket:/tmp/pulse devices: - "/dev/dri:/dev/dri" environment: @@ -53,6 +69,8 @@ services: - LAUNCH_URL=https://google.com - KIOSK=1 - GPU=1 + - PULSE_SERVER=unix:/tmp/pulse/native volumes: x11-socket: + pulse-socket: diff --git a/kiosk/Dockerfile b/kiosk/Dockerfile index 78ad295..dc6d066 100644 --- a/kiosk/Dockerfile +++ b/kiosk/Dockerfile @@ -7,6 +7,8 @@ RUN apt-get update && apt-get install -y \ scrot \ jq \ curl \ + libpulse0 \ + alsa-utils \ && rm -rf /var/lib/apt/lists/* WORKDIR /app