title: Ubuntu 16.04 Bluetooth Headphones - Failed to change profile to a2dp_sink
body: <p>I have Bluetooth headphones Sony WH-1000XM3 and Ubuntu 16.04.
  I have successfully Paired the device but cannot change profile to a2dp.
  No matter what I did it keeps failing with the message "Failed to change profile to a2dp_sink".</p>
  
  <p>I have tried:</p>
  
  <ul>
  <li><a href="https://askubuntu.com/questions/934381/bluetooth-speaker-not-doing-a2dp-ubuntu-gnome-17-04">https://askubuntu.com/questions/934381/bluetooth-speaker-not-doing-a2dp-ubuntu-gnome-17-04</a></li>
  <li><a href="https://askubuntu.com/questions/775523/after-updating-to-16-04-bluetooth-audio-a2dp-mode-stopped-working">https://askubuntu.com/questions/775523/after-updating-to-16-04-bluetooth-audio-a2dp-mode-stopped-working</a></li>
  <li><a href="https://freedompenguin.com/articles/how-to/ubuntu-bluetooth-headphones-fix/" rel="nofollow noreferrer">https://freedompenguin.com/articles/how-to/ubuntu-bluetooth-headphones-fix/</a></li>
  </ul>
  
  <p>Nothing works.
  Please Help.</p>
  
  <p>Some info:</p>
  
  <ul>
  <li>bluez 5.37-0ubuntu5.1</li>
  <li>pulseaudio 1:8.0-0ubuntu3.10</li>
  </ul>
  
  <p><strong>/etc/bluetooth/audio.conf</strong></p>
  
  <pre><code># Configuration file for the audio service
  # This section contains options which are not specific to any
  # particular interface
  [General]
  Enable=Gateway,Source
  
  # Switch to master role for incoming connections (defaults to true)
  Master=true
  
  # If we want to disable support for specific services
  # Defaults to supporting all implemented services
  #Disable=Gateway,Source,Socket
  Disable=Socket,Headset
  
  # SCO routing. Either PCM or HCI (in which case audio is routed to/from ALSA)
  # Defaults to HCI
  #SCORouting=HCI
  
  # Automatically connect both A2DP and HFP/HSP profiles for incoming
  # connections. Some headsets that support both profiles will only connect the
  # other one automatically so the default setting of true is usually a good
  # idea.
  AutoConnect=true
  
  # Headset interface specific options (i.e. options which affect how the audio
  # service interacts with remote headset devices)
  [Headset]
  
  # Set to true to support HFP, false means only HSP is supported
  # Defaults to true
  HFP=true
  
  # Maximum number of connected HSP/HFP devices per adapter. Defaults to 1
  MaxConnected=2
  
  # Set to true to enable use of fast connectable mode (faster page scanning)
  # for HFP when incoming call starts. Default settings are restored after
  # call is answered or rejected. Page scan interval is much shorter and page
  # scan type changed to interlaced. Such allows faster connection initiated
  # by a headset.
  FastConnectable=true
  
  # Just an example of potential config options for the other interfaces
  #[A2DP]
  #SBCSources=1
  #MPEG12Sources=0
  </code></pre>
  
  <p><strong>/etc/pulse/default.pa</strong> </p>
  
  <pre><code>#!/usr/bin/pulseaudio -nF
  #
  # This file is part of PulseAudio.
  #
  # PulseAudio is free software; you can redistribute it and/or modify it
  # under the terms of the GNU Lesser General Public License as published by
  # the Free Software Foundation; either version 2 of the License, or
  # (at your option) any later version.
  #
  # PulseAudio is distributed in the hope that it will be useful, but
  # WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  # General Public License for more details.
  #
  # You should have received a copy of the GNU Lesser General Public License
  # along with PulseAudio; if not, see &lt;http://www.gnu.org/licenses/&gt;.
  
  # This startup script is used only if PulseAudio is started per-user
  # (i.e. not in system mode)
  
  .nofail
  
  ### Load something into the sample cache
  #load-sample-lazy x11-bell /usr/share/sounds/freedesktop/stereo/bell.oga
  #load-sample-lazy pulse-hotplug /usr/share/sounds/freedesktop/stereo/device-added.oga
  #load-sample-lazy pulse-coldplug /usr/share/sounds/freedesktop/stereo/device-added.oga
  #load-sample-lazy pulse-access
  
  
  
  /usr/share/sounds/freedesktop/stereo/message.oga
  
  .fail
  
  ### Automatically restore the volume of streams and devices
  load-module module-device-restore
  load-module module-stream-restore
  load-module module-card-restore
  
  ### Automatically augment property information from .desktop files
  ### stored in /usr/share/application
  load-module module-augment-properties
  
  ### Should be after module-*-restore but before module-*-detect
  load-module module-switch-on-port-available
  
  ### Load audio drivers statically
  ### (it's probably better to not load these drivers manually, but instead
  ### use module-udev-detect -- see below -- for doing this automatically)
  #load-module module-alsa-sink
  #load-module module-alsa-source device=hw:1,0
  #load-module module-oss device="/dev/dsp" sink_name=output source_name=input
  #load-module module-oss-mmap device="/dev/dsp" sink_name=output source_name=input
  #load-module module-null-sink
  #load-module module-pipe-sink
  
  ### Automatically load driver modules depending on the hardware available Matt remove tsched below
  .ifexists module-udev-detect.so
  load-module module-udev-detect tsched=0
  .else
  ### Use the static hardware detection module (for systems that lack udev support)
  load-module module-detect
  .endif
  
  ### Automatically connect sink and source if JACK server is present
  .ifexists module-jackdbus-detect.so
  .nofail
  load-module module-jackdbus-detect channels=2
  .fail
  .endif
  
  ### Automatically load driver modules for Bluetooth hardware
  .ifexists module-bluetooth-policy.so
  load-module module-bluetooth-policy
  .endif
  
  .ifexists module-bluetooth-discover.so
  #load-module module-bluetooth-discover
  .endif
  
  ### Load several protocols
  .ifexists module-esound-protocol-unix.so
  load-module module-esound-protocol-unix
  .endif
  load-module module-native-protocol-unix
  
  ### Network access (may be configured with paprefs, so leave this commented
  ### here if you plan to use paprefs)
  #load-module module-esound-protocol-tcp
  #load-module module-native-protocol-tcp
  #load-module module-zeroconf-publish
  
  ### Load the RTP receiver module (also configured via paprefs, see above)
  #load-module module-rtp-recv
  
  ### Load the RTP sender module (also configured via paprefs, see above)
  #load-module module-null-sink sink_name=rtp format=s16be channels=2 rate=44100 sink_properties="device.description='RTP Multicast Sink'"
  #load-module module-rtp-send source=rtp.monitor
  
  ### Load additional modules from GConf settings. This can be configured with the paprefs tool.
  ### Please keep in mind that the modules configured by paprefs might conflict with manually
  ### loaded modules.
  .ifexists module-gconf.so
  .nofail
  load-module module-gconf
  .fail
  .endif
  
  ### Automatically restore the default sink/source when changed by the user
  ### during runtime
  ### NOTE: This should be loaded as early as possible so that subsequent modules
  ### that look up the default sink/source get the right value
  load-module module-default-device-restore
  
  ### Automatically move streams to the default sink if the sink they are
  ### connected to dies, similar for sources
  load-module module-rescue-streams
  
  ### Make sure we always have a sink around, even if it is a null sink.
  load-module module-always-sink
  
  ### Honour intended role device property
  load-module module-intended-roles
  
  ### Automatically suspend sinks/sources that become idle for too long
  # Disable below if problems Matt
  load-module module-suspend-on-idle timeout=30
  
  ### If autoexit on idle is enabled we want to make sure we only quit
  ### when no local session needs us anymore.
  .ifexists module-console-kit.so
  load-module module-console-kit
  .endif
  .ifexists module-systemd-login.so
  load-module module-systemd-login
  .endif
  
  ### Enable positioned event sounds
  load-module module-position-event-sounds
  
  ### Cork music/video streams when a phone stream is active
  #load-module module-role-cork
  
  ### Modules to allow autoloading of filters (such as echo cancellation)
  ### on demand. module-filter-heuristics tries to determine what filters
  ### make sense, and module-filter-apply does the heavy-lifting of
  ### loading modules and rerouting streams.
  load-module module-filter-heuristics
  load-module module-filter-apply
  
  # X11 modules should not be started from default.pa so that one daemon
  # can be shared by multiple sessions.
  
  ### Load X11 bell module
  #load-module module-x11-bell sample=x11-bell
  
  ### Register ourselves in the X11 session manager
  #load-module module-x11-xsmp
  
  ### Publish connection data in the X11 root window
  #.ifexists module-x11-publish.so
  #.nofail
  #load-module module-x11-publish
  #.fail
  #.endif
  
  ### Make some devices default
  #set-default-sink output
  #set-default-source input
  
  # automatically switch to newly-connected devices
  load-module module-switch-on-connect
  </code></pre>
  
  <p><strong>/usr/bin/start-pulseaudio-x11</strong></p>
  
  <pre><code>#!/bin/sh
  
  # This file is part of PulseAudio.
  #
  # PulseAudio is free software; you can redistribute it and/or modify
  # it under the terms of the GNU Lesser General Public License as published by
  # the Free Software Foundation; either version 2 of the License, or
  # (at your option) any later version.
  #
  # PulseAudio is distributed in the hope that it will be useful, but
  # WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  # General Public License for more details.
  #
  # You should have received a copy of the GNU Lesser General Public License
  # along with PulseAudio; if not, see &lt;http://www.gnu.org/licenses/&gt;.
  
  set -e
  
  if [ x"$DISPLAY" != x ] ; then
  
      /usr/bin/pactl load-module module-x11-publish "display=$DISPLAY" &gt; /dev/null
      /usr/bin/pactl load-module module-x11-bell "display=$DISPLAY" "sample=bell.ogg" &gt; /dev/null
      /usr/bin/pactl load-module module-x11-cork-request "display=$DISPLAY" &gt; /dev/null
  
      if [ x"$KDE_FULL_SESSION" = x"true" ]; then
         /usr/bin/pactl load-module module-device-manager "do_routing=1" &gt; /dev/null
      fi
  
      if [ x"$SESSION_MANAGER" != x ] ; then
          /usr/bin/pactl load-module module-x11-xsmp "display=$DISPLAY session_manager=$SESSION_MANAGER" &gt; /dev/null
          /usr/bin/pactl load-module module-bluetooth-discover
      fi
  fi
  </code></pre>
  
  <p><strong>/etc/bluetooth/main.conf</strong></p>
  
  <pre><code># Configuration file for the audio service
  # This section contains options which are not specific to any
  # particular interface
  [General]
  Enable=Gateway,Source
  
  # Switch to master role for incoming connections (defaults to true)
  Master=true
  
  # If we want to disable support for specific services
  # Defaults to supporting all implemented services
  #Disable=Gateway,Source,Socket
  Disable=Socket
  
  # SCO routing. Either PCM or HCI (in which case audio is routed to/from ALSA)
  # Defaults to HCI
  #SCORouting=HCI
  
  # Automatically connect both A2DP and HFP/HSP profiles for incoming
  # connections. Some headsets that support both profiles will only connect the
  # other one automatically so the default setting of true is usually a good
  # idea.
  AutoConnect=true
  
  # Headset interface specific options (i.e. options which affect how the audio
  # service interacts with remote headset devices)
  [Headset]
  
  # Set to true to support HFP, false means only HSP is supported
  # Defaults to true
  HFP=true
  
  # Maximum number of connected HSP/HFP devices per adapter. Defaults to 1
  MaxConnected=2
  
  # Set to true to enable use of fast connectable mode (faster page scanning)
  # for HFP when incoming call starts. Default settings are restored after
  # call is answered or rejected. Page scan interval is much shorter and page
  # scan type changed to interlaced. Such allows faster connection initiated
  # by a headset.
  FastConnectable=true
  
  # Just an example of potential config options for the other interfaces
  #[A2DP]
  #SBCSources=1
  #MPEG12Sources=0
  </code></pre>
  
  <p><strong>/etc/bluetooth/input.conf</strong></p>
  
  <pre><code># Configuration file for the input service
  
  # This section contains options which are not specific to any
  # particular interface
  [General]
  
  # Set idle timeout (in minutes) before the connection will
  # be disconnect (defaults to 0 for no timeout)
  IdleTimeout=0
  
  # Enable HID protocol handling in userspace input profile
  # Defaults to false (HIDP handled in HIDP kernel module)
  #UserspaceHID=true
  </code></pre>