Skip to content

Instantly share code, notes, and snippets.

What would you like to do?
Setting up a Bluetooth Speaker from the command line on a raspberry Pi Zero W

The setup of a bluetooth speaker on a Pi Zero W is pretty touchy.

Please get in touch via Twitter @actuino or if you've got comments or improvements to this quick draft.

First checks

  • Use a solid power source
  • check the speaker works on another hardware (android phone f.i.)
  • make sure you've updated your Raspbian, install and run rpi-update just in case.

In case of compatibility doubt

  • Use a raspbian Pixel, run sudo apt-get update then sudo apt-get dist-upgrade and reboot.
  • use the graphical widget to pair and connect your speaker. You may have to try twice or more.

What to install?

pi-bluetooth and bluez are already installed on recent Raspbian.


sudo apt-get install pulseaudio pulseaudio-module-bluetooth

(without this module, you get messages like "bluetoothd[5556]: a2dp-sink profile connect failed for 00:1D:43:6D:03:26: Protocol not available")

Extra steps

Add your pi user to the bluetooth group

sudo usermod -G bluetooth -a pi

sudo reboot

Start a pulseaudio server

pulseaudio --start

If it complains about not being able to spawn a local server, run

pax11publish -r; /usr/bin/pulseaudio --start

Pair and connect

run bluetoothctl

use "help" if you want more details about the available commands. The first time, you'll have to run the following:

  • power on
  • agent on
  • scan on
  • wait for the device to be discovered, note it's address (you can then use tab for auto-completion)
  • pair <dev>
  • trust <dev>
  • connect <dev> wait for the confirmation, then
  • quit

test : aplay something.wav

edit /etc/pulse/ , add

# automatically switch to newly-connected devices
load-module module-switch-on-connect

edit /etc/bluetooth/main.conf, at the end of the file, add AutoEnable in the existing Policy section :


After a reboot

You may need to:

  • pulseaudio --start

(This last step was not useful for me):

  • bluetoothctl -a then wait and quit when (auto) connected

Still have to sort out

  • Sometimes, the BT speaker disconnects itself, but it's still viewed as "connected" from the Pi. From this point, nothing will fix it exept a Pi reboot.

This comment has been minimized.

Copy link

james4388 commented Nov 15, 2018

Thanks for the guide


This comment has been minimized.

Copy link

ritiek commented May 29, 2019

I wasn't able to control the volume with my phone. Following this guide fixed it for me hadess/CHIP-bluetooth-speaker#8 (comment):

I've just fixed the problem by upgrading to latest bluez version (5.43-1 at this moment) and modifying bluetooth.service.

Step 1. Upgrading BlueZ


apt-get update
apt-get install bluez-tools pulseaudio-module-bluetooth

and continue to Step 2.

Several users have reported that this is not necessary, but if you want to upgrade BlueZ to testing (unstable) version, use this instructions:
Upgrading BlueZ to testing (unstable) version

Step 2. Edit bluetooth.service


nano /lib/systemd/system/bluetooth.service

and add --plugin=a2dp as an argument to bluetoothd, like

ExecStart=/usr/lib/bluetooth/bluetoothd --plugin=a2dp


systemctl daemon-reload
systemctl restart bluetooth

to apply changes. Now volume control from bluetooth devices should work (tested on iPhone iOS 10.0).


If you couldn't connect to CHIP after upgrading, verify that bluetooth adapter is powered on:
Run bt-adapter --info.
If you see Powered: 0, you can re-enable it using bt-adapter --set Powered 1.


This comment has been minimized.

Copy link

joemaffei commented Feb 25, 2020

Thank you for the guide! It worked like a charm.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.