Installation — LXC (Proxmox & OpenWrt)
import { Aside, Steps } from ‘@astrojs/starlight/components’;
Why LXC?
Section titled “Why LXC?”LXC is the native non-Docker option for appliance-style hosts such as Proxmox VE and OpenWrt. The bridge runs inside the container, while the host Bluetooth stack is exposed over D-Bus and PulseAudio runs inside the container.
| Platform | Bluetooth | Audio | Install path |
|---|---|---|---|
| Proxmox VE | Host bluetoothd via D-Bus bridge | PulseAudio inside the container | proxmox-create.sh |
| OpenWrt / TurrisOS | Host bluetoothd via D-Bus bridge | PulseAudio inside the container | openwrt/create.sh |
Proxmox VE
Section titled “Proxmox VE”Quick install
Section titled “Quick install”On the Proxmox host:
bash <(curl -fsSL https://raw.githubusercontent.com/trudenboy/sendspin-bt-bridge/main/lxc/proxmox-create.sh)Manual path
Section titled “Manual path”-
Create a privileged Ubuntu 24.04 LXC container.
-
Run the in-container installer:
Terminal window bash <(curl -fsSL https://raw.githubusercontent.com/trudenboy/sendspin-bt-bridge/main/lxc/install.sh) -
Append the required D-Bus / device rules to
/etc/pve/lxc/<CTID>.confon the Proxmox host. -
Restart the container.
The detailed Proxmox walkthrough remains in lxc/README.md.
OpenWrt / TurrisOS
Section titled “OpenWrt / TurrisOS”Quick install
Section titled “Quick install”On the OpenWrt host:
wget -qO- https://raw.githubusercontent.com/trudenboy/sendspin-bt-bridge/main/lxc/openwrt/create.sh | shThe full OpenWrt-specific guide remains in lxc/openwrt/README.md.
Pairing a speaker
Section titled “Pairing a speaker”Pair from inside the container with btctl (a wrapper that talks to the host Bluetooth daemon through the D-Bus bridge):
btctlpower onscan onpair AA:BB:CC:DD:EE:FFtrust AA:BB:CC:DD:EE:FFconnect AA:BB:CC:DD:EE:FFexitPort planning in LXC deployments
Section titled “Port planning in LXC deployments”After the first boot, configure ports in /config/config.json (or in the web UI, then restart the service):
{ "WEB_PORT": 8080, "BASE_LISTEN_PORT": 8928, "BLUETOOTH_DEVICES": [ { "mac": "AA:BB:CC:DD:EE:FF", "player_name": "Living Room Speaker", "listen_port": 8935, "listen_host": "192.168.1.50" } ]}WEB_PORTcontrols the direct web UI/API listener for the container.BASE_LISTEN_PORTsets the default Sendspin listener block for devices without explicitlisten_port.listen_portoverrides the player port for one device.listen_hostchanges the advertised host/IP for the player; it does not change the bind address.
Multiple LXC bridges on one host
Section titled “Multiple LXC bridges on one host”If you run multiple bridge containers on one Proxmox or OpenWrt host:
- give each container a unique
WEB_PORT - give each container a unique
BASE_LISTEN_PORT - keep each Bluetooth speaker assigned to only one running bridge
Service management
Section titled “Service management”systemctl status sendspin-clientsystemctl restart sendspin-clientjournalctl -u sendspin-client -fUpdating
Section titled “Updating”bash <(curl -fsSL https://raw.githubusercontent.com/trudenboy/sendspin-bt-bridge/main/lxc/upgrade.sh)