Introduction to BlueZ

The BlueZ package contains the Bluetooth protocol stack for Linux.



Development versions of BLFS may not build or run some packages properly if dependencies have been updated since the most recent stable versions of the book.

Package Information

Additional Downloads

BlueZ Dependencies


dbus-1.14.6, GLib-2.76.3, and libical-3.0.16


docutils-0.20.1 (to generate man pages)

User Notes:

Kernel Configuration

If you are building this package to use bluetooth devices (rather than as a build dependency), enable the following options in the kernel configuration, also the options in the Cryptographic API section if you intend to run the tests, and recompile the kernel if necessary:

General Setup --->
  [ /*] Configure standard kernel features (expert users)   [CONFIG_EXPERT]
    (Note: if CONFIG_EXPERT is disabled, the following options will be
           hidden and enabled implicitly.  We DO NOT recommend to enable
           CONFIG_EXPERT unless you are really an expert user.)
    [*] Enable timerfd() system call                        [CONFIG_TIMERFD]
    [*] Enable eventfd() system call                        [CONFIG_EVENTFD]

[*] Networking support --->                [CONFIG_NET]
  <*/M> Bluetooth subsystem support --->   [CONFIG_BT]
    <*/M> RFCOMM protocol support          [CONFIG_BT_RFCOMM]
    [*]   RFCOMM TTY support               [CONFIG_BT_RFCOMM_TTY]
    <*/M> BNEP protocol support            [CONFIG_BT_BNEP]
    [*]   Multicast filter support         [CONFIG_BT_BNEP_MC_FILTER]
    [*]   Protocol filter support          [CONFIG_BT_BNEP_PROTO_FILTER]
    <*/M> HIDP protocol support            [CONFIG_BT_HIDP]
        Bluetooth device drivers --->
          (Select the appropriate drivers for your Bluetooth hardware)

   <*/M> RF switch subsystem support ----  [CONFIG_RFKILL]

-*- Cryptographic API --->
   Crypto core or helper --- >
      <*/M> User-space cryptographic algorithm configuration   [CONFIG_CRYPTO_USER]
   Block ciphers --->
      <*/M> AES (Advanced Encryption Standard)                 [CONFIG_CRYPTO_AES]
   AEAD (authenticated encryption with associated data) ciphers --->
      <*/M> CCM (Counter with Cipher Block Chaining-MAC)       [CONFIG_CRYPTO_CCM]
   Hashes, digests, and MACs --->
      <*/M> CMAC (Cipher-based MAC)                            [CONFIG_CRYPTO_CMAC]
   Userspace interface --->
      <*/M> Hash algorithms                                    [CONFIG_CRYPTO_USER_API_HASH]
      <*/M> Symmetric key cipher algorithms                    [CONFIG_CRYPTO_USER_API_SKCIPHER]
      <*/M> AEAD cipher algorithms                             [CONFIG_CRYPTO_USER_API_AEAD]

Installation of BlueZ

Now, make some changes needed for SystemV systems:

patch -Np1 -i ../bluez-5.66-obexd_without_systemd-1.patch

Install BlueZ by running the following commands:

./configure --prefix=/usr         \
            --sysconfdir=/etc     \
            --localstatedir=/var  \
            --enable-library      \
            --disable-manpages    \
            --disable-systemd     &&

To test the results, issue: make check.

Now, as the root user:

make install &&
ln -svf ../libexec/bluetooth/bluetoothd /usr/sbin

Install the main configuration file as the root user:

install -v -dm755 /etc/bluetooth &&
install -v -m644 src/main.conf /etc/bluetooth/main.conf

If desired, install the API documentation as the root user:

install -v -dm755 /usr/share/doc/bluez-5.66 &&
install -v -m644 doc/*.txt /usr/share/doc/bluez-5.66

Command Explanations

--disable-manpages: This switch disables generating the manual pages because of the reliance on 'rst2man' in docutils. Remove this switch if you have docutils-0.20.1 installed and wish to generate the manual pages.

--enable-library: This switch enables building the BlueZ 4 compatibility library which is required by some applications.

--disable-systemd: This switch is needed because systemd is not part of LFS/BLFS. If you are using systemd, remove this switch.

ln -svf ../libexec/bluetooth/bluetoothd /usr/sbin: This command makes access to the bluetooth daemon more convenient.

Configuring BlueZ

Configuration Files

/etc/bluetooth/main.conf is installed automatically during the install. Additionally, there are three supplementary configuration files. /etc/sysconfig/bluetooth is installed as a part of the boot script below. In addition, you optionally can install the following, as the root user:

cat > /etc/bluetooth/rfcomm.conf << "EOF"
# Start rfcomm.conf
# Set up the RFCOMM configuration of the Bluetooth subsystem in the Linux kernel.
# Use one line per command
# See the rfcomm man page for options

# End of rfcomm.conf
cat > /etc/bluetooth/uart.conf << "EOF"
# Start uart.conf
# Attach serial devices via UART HCI to BlueZ stack
# Use one line per device
# See the hciattach man page for options

# End of uart.conf

Boot Script

To automatically start the bluetoothd daemon when the system is rebooted, install the /etc/rc.d/init.d/bluetooth bootscript from the blfs-bootscripts-20230101 package.

make install-bluetooth


Installed Programs: bluemoon, bluetoothctl, bluetoothd (symlink), btattach, btmon, hex2hcd, l2ping, l2test, mpris-proxy, and rctest
Installed Library:
Installed Directories: /etc/bluetooth, /usr/{include,libexec}/bluetooth, and /usr/share/doc/bluez-5.66

Short Descriptions


is a Bluemoon configuration utility


is the interactive Bluetooth control program


is the Bluetooth daemon


provides access to the Bluetooth subsystem monitor infrastructure for reading HCI traces


is used to convert a file needed by Broadcom devices to hcd (Broadcom bluetooth firmware) format


is used to send a L2CAP echo request to the Bluetooth MAC address given in dotted hex notation


is a L2CAP testing program


is used to test RFCOMM communications on the Bluetooth stack

contains the BlueZ 4 API functions