23
April
2026
Enabling the Bluetooth profile instead of the "HFP Headset" (headphone/microphone) profile to the "A2DP" profile (for listening to high quality sound)
14:19

Enabling the Bluetooth profile instead of the "HFP Headset" (headphone/microphone) profile to the "A2DP" profile (for listening to high quality sound)

23 April 2026 14:19

Enable A2DP profile for music in Linux OS in Bluetooth system, instead of HSP/HFP for speech.

Introduction

The article explained how to enable high-quality sound in the A2DP profile only for listening to high-quality music or Internet radio stations.

In Linux OS, the Bluetooth system uses the HSP/HFP profile by default (CSVD codec, mono, data rate 8/12/16 Kbps for voice communication) - to transmit sound to headphones and from a microphone for video conferencing (bidirectional profile - reception and transmission).

Much better Bluetooth audio is provided by a unidirectional (receive only) A2DP profile with an SBC codec for stereo music playback, with a bit rate of 345 Kbps.

Basic Bluetooth profiles:

  • HSP - Headset Profile, sound 300 Hz - 3000 Hz, mono.
  • HFP - Hands free Profile, sound 300 Hz - 3000 Hz, mono.
  • A2DP - Audio / Video Remote Control Profile 20 Hz - 16000 Hz, stereo.

In Linux OS it is sometimes not possible graphically (using blueman-manager) enable A2DP high quality audio profile in Bluetooth.

There can be two problems:
1) The headset profile HSP/HFP (role "Communication") is present, and the profile A2DP no(or disappears),
2) There is an A2DP profile, but won't turn on.

Problem: no A2DP profile (you can only select the HFP/HSP profile)

This problem is present in PipeWire when using a headset with a microphone, i.e. The Headset profile (HSP) is turned on automatically, and the profile for high quality A2DP disappears when connecting a PC to a Bluetooth headset.
Solution: see section 1 - PipeWire.

When PulseAudio you can disable the automatic selection of the HSP/HSP "headphone with microphone" option, but the A2DP profile cannot be selected in the list.
Solution: see section 2 - PulseAudio.

How to check if PipeWire or PulseAudio is used

pactl info

or

inxi -Ax

1. Enable A2DP High Quality Audio Profile in PipeWire

Edit located in the folder /usr/share/pipewire/ file pipewire-pulse.conf

sudo nano /usr/share/pipewire/pipewire-pulse.conf

In it, remove the comment mark in the lines:

  • { path = "pactl" args = "load-module module-always-sink" }
  • { cmd = "load-module" args = "module-always-sink" flags = [ ] }

As below:

context.exec = [
    { path = "pactl"        args = "load-module module-always-sink" }
 #{ path = "pactl" args = "upload-sample my-sample.wav my-sample" }
 #{ path = "/usr/bin/sh" args = "~/.config/pipewire/default.pw" }
]

# Extra commands can be executed here.
# load-module : loads a module with args and flags
#     args = " " 
#      ( flags = [ nofail ] )
pulse.cmd = [
    { cmd = "load-module" args = "module-always-sink" flags = [ ] }
    { cmd = "load-module" args = "module-switch-on-connect" }
 #{ cmd = "load-module" args = "module-gsettings" flags = [ nofail ] }
]

Save the file and exit the text editor: Ctrl+O, Ctrl+X

Restart the service:

systemctl --user restart pipewire-pulse.service

In Bluetooth -"Devices" disconnect from the headset and connect again.

Select A2DP profile with SBC codec:

pipewire_profile

2. Enabling the profile for high quality A2DP audio in PulseAudio

If you are using a sound server PulseAudio, then in blueman-manager after connecting to the device in the menu by right-clicking the mouse "Profiles" three profiles are visible:"HFP","A2DP" and "off".

If not possible right click select high quality profile A2DP
sink
(error "_Failed to change profile to a2dpsink"), you need perform actions:

  1. You need to remove the conflicting package bluez-alsa-utils, unused packages and restart Bluetooth

sudo apt remove bluez-alsa-utils
sudo apt purge

  1. Open the Bluetooth configuration file for editing

sudo nano /etc/bluetooth/main.conf

  1. In the main.conf file
  • assign the "MultiProfile" parameter the value "multiple"

In the configuration file now:

MultiProfile = multiple

multiple

Save the file Ctrl+O, Ctrl+X.

Multiple allows the system to support the “Multiple profiles on one device” configuration.

  1. Restarted Bluetooth service

sudo systemctl restart bluetooth

Turned on Bluetooth. Connected to the device BT001 using the Bluetooth applet on the system tray:

  • in the menu "Devices"- button Find
  • right-click on the found headset - select the menu item "Connect".
  1. Selected the A2DP profile with the right mouse button to obtain high quality sound.

    *"Sound Profiles" - "High quality audio playback (A2DP)".
    bluetooth_hq

In PulseAudio - Bluetooth icon - Double click - Headphones - Right mouse button -"Sound Profile" you can change sound profiles with the right mouse button: A2DP high-quality audio receiver or HFP transceiver.

In the volume control you can now select the audio output to Bluetooth headphones.
anim

This instruction has been tested with a Bluetooth adapter TP-LINK UB400 USB 2.0 and BT headset Essager and Linux Mint 21.3.2 "Victoria" and Linux Mint 22.3 "Zena".

 

Test MP3 files to customize audio playback

The difference between the CSVB and SBC codecs is clearly audible. I recommend checking using test files, for example:

VoiceBot.su - Acoustics sound test (multilingual site Russian, English, French, Italian, Spanish, Portuguese, Japanese, Polish, Bulgarian),
TheTestData.com - Sample MP3 (MPEG-1 Audio Layer 3) Audio file download Online.


Sources:


Date of last change: 04/29/2026