#!/bin/sh # audio-bridge entrypoint # Starts DBus (system + session), BlueZ, WirePlumber, then PipeWire. # PA clients (librespot, mopidy) connect via pipewire-pulse bridge on TCP localhost:4713. set -e mkdir -p /run/dbus /run/user/0 chmod 0755 /run/dbus chmod 0700 /run/user/0 # Clean up stale pid files from previous container runs (host volume persists). rm -f /run/dbus/dbus.pid /run/user/0/dbus.pid # System DBus (needed by bluetoothd, wireplumber) dbus-daemon --system --fork sleep 0.5 # Session DBus (needed by PipeWire for portal/jackdbus-detect modules). # Use XDG_RUNTIME_DIR=/run/user/0 so dbus-launch puts socket there. export XDG_RUNTIME_DIR=/run/user/0 dbus-daemon --session --address=unix:path=/run/user/0/bus --fork sleep 0.3 # BlueZ (Bluetooth stack). --compat = legacy mode for older audio devices. # Disabled if no /sys/class/bluetooth — wireplumber will skip BT modules. if [ -d /sys/class/bluetooth ]; then /usr/lib/bluetooth/bluetoothd --compat --nodetach & sleep 0.5 echo "[audio-bridge] bluetoothd started" else echo "[audio-bridge] no bluetooth hardware — skipping bluetoothd" fi # WirePlumber first (manages PipeWire session/policy, loads BT modules on demand) wireplumber & sleep 1 # PipeWire last. pipewire-pulse auto-loads PA bridge so clients connect via TCP 4713. exec pipewire