3.6 KiB
On-Speaker Spotify Boot Primer for Bose SoundTouch
Self-contained boot-time Spotify primer that runs directly on the speaker. No Spotify credentials on the device — it fetches a fresh token from a Bose-SoundTouch server at boot. No jq, no rootfs modification — just files on persistent storage.
How It Works
Bose SoundTouch speakers run embedded Linux with a persistent writable volume
at /mnt/nv. The init script shelby_local (S97) has a built-in hook:
[ -x /mnt/nv/rc.local ] && /mnt/nv/rc.local
This runs before SoundTouch itself (S99), so we background a primer script that waits for the Spotify Connect ZeroConf endpoint (port 8200) to come up, fetches a fresh Spotify token from the service, and primes the speaker — all within ~30 seconds of boot.
File Layout
/mnt/nv/
rc.local boot hook (S97 checks this)
.profile PATH setup for interactive SSH
bin/
spotify-boot-primer main script
BoseApp-Persistence/1/
spotify-primer.conf service credentials (mode 600)
Sources.xml, Presets.xml, ... existing speaker data
Scripts live in /mnt/nv/bin/ (added to PATH via .profile), config lives
alongside the speaker's own persistence files in /mnt/nv/BoseApp-Persistence/1/.
Speaker Environment
Tested on SoundTouch 20. Other SoundTouch models likely similar.
| Item | Detail |
|---|---|
| OS | Linux 3.14.43+ ARM (hostname spotty) |
| Root FS | Read-only ubifs (can be remounted rw) |
| Persistent storage | /mnt/nv — writable ubifs, ~24M free |
| curl | 7.50.3 with OpenSSL (HTTPS works) |
| bash/grep/sed/awk | Available via busybox |
| jq | Not available (not needed) |
| Init | SysV, runlevel 5 |
| Production mode | Yes — cron is disabled |
Prerequisites
- SSH access to the speaker:
ssh -o HostKeyAlgorithms=+ssh-rsa -o PubkeyAcceptedAlgorithms=+ssh-rsa root@SPEAKER_IP - A running Bose-SoundTouch server with:
- A linked Spotify account (via the management API OAuth flow)
- The
GET /mgmt/spotify/tokenendpoint (returns{accessToken, username}) - Management API credentials (HTTP Basic Auth)
Installation
SSH into the speaker and run:
# 1. Create bin directory
mkdir -p /mnt/nv/bin
# 2. Create the config file with your service connection info
cat > /mnt/nv/BoseApp-Persistence/1/spotify-primer.conf << 'EOF'
SOUNDTOUCH_URL=https://soundtouch.example.com
SOUNDTOUCH_USER=admin
SOUNDTOUCH_PASS=secret
EOF
chmod 600 /mnt/nv/BoseApp-Persistence/1/spotify-primer.conf
# 3. Copy spotify-boot-primer to the speaker
# From your local machine:
# cat scripts/spotify/spotify-boot-primer | ssh root@SPEAKER_IP "cat > /mnt/nv/bin/spotify-boot-primer"
chmod +x /mnt/nv/bin/spotify-boot-primer
# 4. Create the boot hook
cat > /mnt/nv/rc.local << 'EOF'
#!/bin/bash
/mnt/nv/bin/spotify-boot-primer &
EOF
chmod +x /mnt/nv/rc.local
# 5. Set up PATH for interactive SSH sessions (optional but convenient)
cat > /mnt/nv/.profile << 'EOF'
export PATH="/mnt/nv/bin:$PATH"
EOF
Testing
# Manual test (speaker must be running):
/mnt/nv/bin/spotify-boot-primer
# Check logs:
logread | grep spotify-primer
# Full test — reboot the speaker:
reboot
# Wait ~30s, then SSH back in and check:
logread | grep spotify-primer
curl -s "http://localhost:8200/zc?action=getInfo" | grep activeUser
Related
- Bose-SoundTouch — Comprehensive Go toolkit with migration automation