Web Bluetooth on Linux
First, you should type bluetoothd --version
in the terminal,
and see which version of Bluez you have - then follow the
correct set of instructions below:
Bluez 5.42 and later: Ubuntu 16.10 and newer
This is by far the most likely - pretty much every Linux distribution from the past 5 years has up to date Bluetooth LE support.
Bluetooth should work out of the box - try following the Web Bluetooth getting started instructions and see if it works.
You can also try running sudo hcitool lescan
- if you see MAC addresses being displayed, this
means your PC is able to see Bluetooth LE devices via Bluetooth, which is a great sign.
Bluez 5.41
Bluez 5.41 comes installed by default on a few systems now and does work, however you still need to enable the Experimental flags. Edit the Bluetooth config and add the experimental flag there:
sudo nano /lib/systemd/system/bluetooth.service
And update the line:
ExecStart=/usr/lib/bluetooth/bluetoothd
so it reads:
ExecStart=/usr/lib/bluetooth/bluetoothd --experimental
Save and exit. Then reload Bluez.
sudo systemctl daemon-reload
sudo systemctl restart bluetooth
(Originally from Adafruit)
Install latest Bluez from Debian
Please use with caution - pretty much every Linux distribution from the past 5 years now has up to date Bluetooth LE support. If Bluetooth isn't working for you, your version of Bluez is extremely unlikely to be the issue.
This advice originally came from here. You can also compile from source as well (see below), but this method is very easy if you have Debian, Ubuntu ot Linux Mint.
Look in the Debian package repository or the latest version of Bluez:
- Go to http://ftp.debian.org/debian/pool/main/b/bluez/
- Look a filename of the form
bluez_*_amd64.deb
(or whatever your platform is) and download it. As of writing this isbluez_5.47-1+b1_amd64.deb
- Bluez needs a later version of libreadline too, so look in http://ftp.debian.org/debian/pool/main/r/readline/
- Find a file of the form
libreadline*_amd64.deb
and download it. As of writing it islibreadline7_7.0-3_amd64.deb
- Install
libreadline
withsudo dpkg -i libreadline7_7.0-3_amd64.deb
- Install
bluez
withsudo dpkg -i bluez_5.47-1+b1_amd64.deb
- Restart
bluetoothd
withsudo /etc/init.d/bluetooth restart
And you're done!
Installing latest Bluez from Source (Bluez before 5.41)
Please use with caution - pretty much every Linux distribution from the past 5 years now has up to date Bluetooth LE support. If Bluetooth isn't working for you, your version of Bluez is extremely unlikely to be the issue.
Note: Alan Assis worked this out and documented it here. All I've done is tweak it slightly to use a newer bluez
Note 2: Ubuntu 16.10 comes with bluez
5.41 already, but the experimental interface flag is needed for this version. This means you'll have to build it again with the appropriate flag.
As of writing, Ubuntu 16.04 comes with version 5.37 of bluez
, the Bluetooth tools.
While this provides some Bluetooth functionality, it's not very good at exposing it.
As a result, for Web Bluetooth on Chrome to work, you need to update your bluez
version to a newer version, which exposes functionality in a way that Chrome can
access without needing special permissions.
# Install the dependecies:
sudo apt-get -y install automake autotools-dev bison check clang flex lcov libcap-ng-dev libdbus-glib-1-dev libdw-dev libglib2.0-dev libical-dev libreadline-dev libtool libudev-dev
# create temp directory
mkdir tmp
cd tmp
# Download new bluez
wget http://www.kernel.org/pub/linux/bluetooth/bluez-5.45.tar.xz
# Extract it:
tar xvf bluez-5.45.tar.xz
# Configure and compile it:
cd bluez-5.45
./configure --prefix=/usr \
--mandir=/usr/share/man \
--sysconfdir=/etc \
--localstatedir=/var \
--enable-library \
--disable-systemd \
--disable-android
make
# install everything
sudo make install
# Stop existing bluetooth and start a new one
sudo /etc/init.d/bluetooth stop
sudo /usr/libexec/bluetooth/bluetoothd
Now you can test Web Bluetooth out in Chrome (make sure you enable it in chrome://flags first!). Maybe give the Web IDE a go: https://www.espruino.com/ide
If that all works, we want to make sure it runs properly after a reboot.
Ctrl-C to stop the existing bluetoothd.
# Replace the old bluetoothd with the new one:
sudo cp /usr/libexec/bluetooth/bluetoothd /usr/lib/bluetooth/bluetoothd
Now you can re-start the service and you're good to go!
sudo /etc/init.d/bluetooth start
This page is auto-generated from GitHub. If you see any mistakes or have suggestions, please let us know.