1

I'm trying to make my RPi3 to be a bluetooth sink.

My problem is that when I'm trying to connect my Windows 7 Laptop to my RPi Bluetooth sink, it is displayed like that :

Bluetooth Issue

Sorry, it's in french.

It allows to create 3 connections :

  • one for the Rpi to be connected as a microphone
  • one for the Rpi to connected as headphone (option that I only want)
  • one the Rpi to be a audio file server

The info :

$ sudo bluetoothctl
[bluetooth]# show
Controller B8:27:EB:XX:XX:XX
        Name: Gertrude
        Alias: Gertrude
        Class: 0x20041c
        Powered: yes
        Discoverable: yes
        Pairable: yes
        UUID: Headset AG                (00001112-0000-1000-8000-00805f9b34fb)
        UUID: Generic Attribute Profile (00001801-0000-1000-8000-00805f9b34fb)
        UUID: A/V Remote Control        (0000110e-0000-1000-8000-00805f9b34fb)
        UUID: Generic Access Profile    (00001800-0000-1000-8000-00805f9b34fb)
        UUID: PnP Information           (00001200-0000-1000-8000-00805f9b34fb)
        UUID: A/V Remote Control Target (0000110c-0000-1000-8000-00805f9b34fb)
        UUID: Audio Sink                (0000110b-0000-1000-8000-00805f9b34fb)
        UUID: Audio Source              (0000110a-0000-1000-8000-00805f9b34fb)
        Modalias: usb:v1D6Bp0246d052B
        Discovering: no

The Bluetooth config file:

$ cat /etc/bluetooth/main.conf
[General]

# Default adapter name
# Defaults to 'BlueZ X.YZ'
#Name = BlueZ

# Default device class. Only the major and minor device class bits are
Name =
# considered. Defaults to '0x000000'.
#Class = 0x000100
Class = 0x20041c

# How long to stay in discoverable mode before going back to non-discoverable
# The value is in seconds. Default is 180, i.e. 3 minutes.
# 0 = disable timer, i.e. stay discoverable forever
DiscoverableTimeout = 0

# How long to stay in pairable mode before going back to non-discoverable
# The value is in seconds. Default is 0.
# 0 = disable timer, i.e. stay pairable forever
#PairableTimeout = 0

# Automatic connection for bonded devices driven by platform/user events.
# If a platform plugin uses this mechanism, automatic connections will be
# enabled during the interval defined below. Initially, this feature
# intends to be used to establish connections to ATT channels. Default is 60.
#AutoConnectTimeout = 60

# Use vendor id source (assigner), vendor, product and version information for
# DID profile support. The values are separated by ":" and assigner, VID, PID
# and version.
# Possible vendor id source values: bluetooth, usb (defaults to usb)
#DeviceID = bluetooth:1234:5678:abcd

# Do reverse service discovery for previously unknown devices that connect to
# us. This option is really only needed for qualification since the BITE tester
# doesn't like us doing reverse SDP for some test cases (though there could in
# theory be other useful purposes for this too). Defaults to 'true'.
#ReverseServiceDiscovery = true

# Enable name resolving after inquiry. Set it to 'false' if you don't need
# remote devices name and want shorter discovery cycle. Defaults to 'true'.
#NameResolving = true

# Enable runtime persistency of debug link keys. Default is false which
# makes debug link keys valid only for the duration of the connection
# that they were created for.
#DebugKeys = false

# Restricts all controllers to the specified transport. Default value
# is "dual", i.e. both BR/EDR and LE enabled (when supported by the HW).
# Possible values: "dual", "bredr", "le"
#ControllerMode = dual

# Enables Multi Profile Specification support. This allows to specify if
# system supports only Multiple Profiles Single Device (MPSD) configuration
# or both Multiple Profiles Single Device (MPSD) and Multiple Profiles Multiple
# Devices (MPMD) configurations.
# Possible values: "off", "single", "multiple"
#MultiProfile = off

# Permanently enables the Fast Connectable setting for adapters that
# support it. When enabled other devices can connect faster to us,
# however the tradeoff is increased power consumptions. This feature
# will fully work only on kernel version 4.1 and newer. Defaults to
# 'false'.
#FastConnectable = false

# Default privacy setting.
# Enables use of private address.
# Possible values: "off", "device", "network"
# "network" option not supported currently
# Defaults to "off"
# Privacy = off

[Policy]
#
# The ReconnectUUIDs defines the set of remote services that should try
# to be reconnected to in case of a link loss (link supervision
# timeout). The policy plugin should contain a sane set of values by
# default, but this list can be overridden here. By setting the list to
# empty the reconnection feature gets disabled.
#ReconnectUUIDs=00001112-0000-1000-8000-00805f9b34fb,0000111f-0000-1000-8000-00805f9b34fb,0000110a-0000-1000-8000-00805f9b34fb

# ReconnectAttempts define the number of attempts to reconnect after a link
# lost. Setting the value to 0 disables reconnecting feature.
#ReconnectAttempts=7

# ReconnectIntervals define the set of intervals in seconds to use in between
# attempts.
# If the number of attempts defined in ReconnectAttempts is bigger than the
# set of intervals the last interval is repeated until the last attempt.
#ReconnectIntervals=1,2,4,8,16,32,64

# AutoEnable defines option to enable all controllers when they are found.
# This includes adapters present on start as well as adapters that are plugged
# in later on. Defaults to 'false'.
AutoEnable=true

I have changed the Bluetooth class thanks to : http://bluetooth-pentest.narod.ru/software/bluetooth_class_of_device-service_generator.html, remove and add again the "Windows Bluetooth device", but it has no effect.

So I noticed that the bluetoothctl / show command shows UUID capabilities, corresponding to some features that I don't want.

0000110a-0000-1000-8000-00805f9b34fb : Audio Source
00001800-0000-1000-8000-00805f9b34fb : Generic Access
00001801-0000-1000-8000-00805f9b34fb : Generic Attribute

But I have absolutely no idea how to disabled these features.

Any ideas?

  • With bluetooth connectivity you have to look in the logs to see why it's failing - wiki.ubuntu.com/DebuggingBluetooth. – slm Jul 20 '18 at 17:10
  • 1
    There is no failing. When bluetoothd daemon initializes, it sets up some features that I don't want. – DioZ Jul 21 '18 at 13:11
1

I finally found a work around.

This feature is called Service Discovery, and there is a protocol in order to play with Bluetooth services : SDP.

Raspbian distribution provides the sdptool utility, but, Bluetooth daemon (BlueZ5) is not compatible with SDP by default.

Solution

Edit the bluetooth.service file in order to add the --compat or -C option in the command line.

The update systemd to get sdptool utility working:

$ sudo systemctl daemon-reload

For displaying the Bluetooth features of the RPi:

$ sudo sdptool browse local

Look into https://www.bluetooth.com/specifications/assigned-numbers/service-discovery in order to find the correspondences of unwilling features, and delete them with:

$ sudo sdptool del 0xYYYYYY

For my case, I had to delete "Audio Source" (0x110a) and "Headset Audio Gateway" (0x1112) services.

  • Nice work, way to stick to it! – slm Jul 21 '18 at 14:25

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.