Question: Currently, whenever I reconnect my Bluetooth headset to Ubuntu 22.04, it defaults to the A2DP Sink profile. I then use pavucontrol to manually switch to HFP every time. How do I get this to stick so I don't have to keep changing it?

I've tried the solutions in [Change Bluetooth Headphones default audio mode (A2DP Sink vs HSP/HFP)](https://askubuntu.com/questions/1141226/change-bluetooth-headphones-default-audio-mode-a2dp-sink-vs-hsp-hfp) and none seem to work.

Answer: 
Have the same problem.
A simple command-line-workaround is to set the sink manually after the connect:

Set an alias in your ".profile" or ".bashrc" and simply use "hs" on the command-line after bluetooth-connect

```
alias hs='pacmd set-card-profile bluez_card.your_device handsfree_head_unit'

```

You can find your device with:

```
pacmd list

```

And the name will be something like this:

```
name: <bluez_card.AB_CD_EF_12_34_56>

```

After your Bluetooth headset is connected do:

```
hs

```

You can add a headphones setting easily too. For example:

```
    alias hp='pacmd set-card-profile bluez_card.your_device a2dp_sink'

```

I'm still looking for an automatic solution, too.
I had a similar issue. My headset supports only audio with A2DP and needs to switch to HFP in order for my mic to work.

I switched from pulse audio to pipewire. "Pipewire (WirePlumber >= 0.4.8) [...] supports automatic Bluetooth profile switching (e.g. switching from A2DP to HSP/HFP when an application needs microphone access)."

This was a great solution for my use case. My laptop no longer uses the internal mic when joining MS Teams calls but automatically switches to my headset with HFP.

I am also running Ubuntu 22.04 and [installed Pipewire manually](https://gist.github.com/the-spyke/2de98b22ff4f978ebf0650c90e82027e).

> 
> Install
> 
> 
> Install codecs for LDAC (SBC is included out of the box):
> 
> 
> $ sudo apt install libldacbt-{abr,enc}2
> 
> 
> Install remaining PipeWire packages and WirePlumber as the session
> manager:
> 
> 
> $ sudo apt install \ libspa-0.2-bluetooth \  
> 
> pipewire-audio-client-libraries \ pipewire-media-session- \  
> 
> wireplumber
> 
> 
> 
> ```
> Notice '-' at the end of 'pipewire-media-session'. This is to remove it in the same command, because 'wireplumber' will be used
> 
> ```
> 
> instead.
> 
> 
> Start WirePlumber for your user:
> 
> 
> $ systemctl --user --now enable wireplumber.service
> 
> 
> Configure ALSA
> 
> 
> Single step. Copy the config file from the PipeWire examples into your
> ALSA configuration directory:
> 
> 
> $ sudo cp
> /usr/share/doc/pipewire/examples/alsa.conf.d/99-pipewire-default.conf
> /etc/alsa/conf.d/
> 
> 
> PulseAudio
> 
> 
> Everything was done automatically by pipewire-pulse package, which
> should have been installed by wireplumber package as recommended. If
> not, install it yourself. Bluetooth
> 
> 
> Just remove this package and Bluetooth will be handled by PipeWire:
> 
> 
> $ sudo apt remove pulseaudio-module-bluetooth
> 
> 
> Done
> 
> 
> Reboot and check if it works by running:
> 
> 
> $ LANG=C pactl info | grep '^Server Name'
> 
> 
> 

This is only a workaround and doesn't answer your question directly.