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 james4388 commented Nov 15, 2018

Thanks for the guide


This comment has been minimized.

Copy link

@ritiek 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 joemaffei commented Feb 25, 2020

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


This comment has been minimized.

Copy link

@FatTony404 FatTony404 commented Jun 4, 2020

worked for me too. nice guide, thanks a lot!


This comment has been minimized.

Copy link

@OttoNL OttoNL commented Aug 2, 2020

Couldn't get it to work sadly. Followed all the steps, Configuration all seemed to work just fine, no trouble finding or pairing to my Ikea Eneby 20. When I tried to use the aplay command to play one of my .wav files it started playing on my HiFi (via HDMI).

I made sure I didn't force audio to play through HDMI in raspi-config, but it's set to Auto. I then right-clicked the volume control in the bottom right and noticed audio was being sent to HDMI. I clicked 'Eneby 20' and I could see that it switched to that, tried again and no audio from the speaker (or my HiFi).

Rebooted the Pi a couple times, it automatically connected to the speaker, audio settings remaimed, but still no Audio. Not sure where to start troubleshooting.

By the way, when it's working should it work with any software? Could I use Chromium or a Volumio to send audio to the speaker? Because if I can only play audio from the commandline using aplay it wouldn't really fit my needs.


This comment has been minimized.

Copy link

@okgagen okgagen commented Oct 28, 2020

I use omxplayer to play sound files on bluetooth speaker.


To response to this comment above, "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."

I reset my bluebooth connection with these commands when I am not able to play sound files to bluebooth speaker (even it shows connected):
$ sudo rfkill block bluetooth
$ sudo rfkill unblock bluetooth
$ sudo systemctl restart bluetooth



This comment has been minimized.

Copy link

@nebhead nebhead commented Oct 31, 2020

@OttoNL I also had the same problem and wasn't able to play audio, but did have some luck by doing the following:

First I had to install the package bluealsa by doing this:
sudo apt install bluealsa

You'll also need to create and edit the following file with your device id:

nano ~/.asoundrc

Add these lines (replace the device id with your connected device):

defaults.bluealsa.interface "hci0"
defaults.bluealsa.device "00:00:00:00:00:00"
defaults.bluealsa.profile "a2dp"
defaults.bluealsa.delay 10000

Then, do a reboot, and ensure that you are connected to your device.

Test by running:
aplay -D bluealsa yourfile.wav


This comment has been minimized.

Copy link

@TimoBoiii TimoBoiii commented Apr 15, 2021

The whole setting up was without a problem except the aplay something.wav it says command not found i tried even typing Play something.wav but it did the same thing. So now i have the whole thing set up but have no clue how to actually play music on it. I would appreciate if anyone could help me with this issue. Im kinda new to raspberry pi linux and all and i don't know what to do. If somebody explained to me i would really appreciate it Thanks.


This comment has been minimized.

Copy link

@striderssoftware striderssoftware commented Jun 13, 2021

To send USB Mic Input to the bluetooth device:
aplay < arecord --device hw:1,0 -c1 -d 0 -r 48100 -f S16_LE -V mono


This comment has been minimized.

Copy link

@striderssoftware striderssoftware commented Jun 13, 2021

Sorry my mistake, here is the command to send USB MIC input to the connected bluetooth device:
arecord --device hw:1,0 -c1 -d 0 -r 48100 -f S16_LE -V mono | aplay


This comment has been minimized.

Copy link

@sirhopcount sirhopcount commented Jun 25, 2021

By default the audio played over my HDMI, I "fixed" this by disabling it in /boot/config.txt

# Enable audio (loads snd_bcm2835)

If anybody knows a better way of doing this please let me know.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment