Zorin OS Bluetooth Call-Mode Issue (OnePlus Buds 3)
Summary
I am reporting a reproducible Bluetooth audio/call-mode issue on Zorin OS (Ubuntu Jammy base) with OnePlus Buds 3.
A2DP playback works
During calls (Google Meet), mic + audio via HFP/HSP is unreliable (device/profile availability and connection failures)
This blocks daily call workflow and appears related to profile switching / HFP negotiation rather than simple pairing.
Environment
Distro: Zorin OS (Jammy-based)
Ubuntu codename: jammy
Kernel: 6.8.0-90-generic
Headset: OnePlus Buds 3
Audio stack: PipeWire + WirePlumber (wireplumber 0.4.8, pipewire 1.0.7)
BlueZ: 5.64
bluetooth.service: active/running
Expected behavior
Stable headset call mode in Google Meet
mic + output available together
predictable profile switching
no repeated connect/switch failures
Actual behavior
Observed errors during troubleshooting/pair attempts:
org.bluez.Error.NotReady
Device ... not available
org.bluez.Error.AuthenticationRejected
org.bluez.Error.Failed br-connection-refused
Also observed stale PipeWire default node references to an old Buds MAC at one point, suggesting residual routing/profile state.
Reproduction (high-level)
Pair/connect OnePlus Buds 3
Verify normal playback profile works
Start Google Meet and use BT headset for mic + output
Observe unreliable call profile behavior (errors above)
Why this looks like stack/policy issue
A2DP path is more stable than duplex call path
Failures cluster around profile negotiation/switching
Similar reports exist from other Zorin users with different headsets
Community references (Zorin Forum)
SONY auto-switching to headset/handsfree on Zorin 18
Hello,
I have been using my SONY WH-1000XM3 Bluetooth headphones with Zorin 17 for some months now. After much experimenting with the setups I did manage to get the headphones into a mode that had high quality stereo audio and NO microphone (I am not sure how). Once Zorin enables the microphone on these SONY headphones the audio goes to MONO and very low quality like a 1990s PC. So, I very much want to stop the microphone and hands-free modes from being used.
I recently took the plunge again a…
PulseAudio/PipeWire services and Bluetooth audio quality
Hi fellows.
My question is not a call for urgent help and the answer probably is lying somewhere in the depths of this forum, so forgive me if it is repeated, but this is simpler for me.
First of all the interesting issue is that I have two audio services: Pulseaudio and Pipewire. Both are active and running (at the same time?) and audio output is controlled by Pulseaudio.
Here are my checks of it:
gintautas@Gintautas-ThinkPad-Edge-E531:~$ systemctl --user status pipewire
● pipewire.service …
Audio help - handsfree
I recently installed Zorin OS 18 Core, but when I tried to use my JBL Tour One M2, it didn’t work as expected. Im using in bluetooth mode.
When I use the headset in the "Headset" mode, everything is fine — the sound works perfectly.
The issue happens when I switch to "Hands-Free" mode to use both audio and the microphone.
Unable to switch Bluetooth profile to HFP in Zorin OS 17
Hello everyone! Long time lurker and finally my first post...a cry for help.
I have a pair of Sony WH-100XM5 headphones connected via Bluetooth. They connect and work to the A2DP profile as expected. However when I try to switch to HFP, it does not work. I also tried using Blueman and it fails with the error: "Failed to change profile to handsfree_head_unit"
This previously worked in Zorin OS 16 for me using the settings and the Quick Settings Audio Panel Gnome Extension.
Any ideas/suggestion…
Community references (Reddit r/zorinos)
BT connects but does not appear in wpctl / no audio
https://www.reddit.com/r/zorinos/comments/1qd8y7n/solved_bluetooth_headphone_connects_but_does_not/
Difficult connect + stutter + disconnect
https://www.reddit.com/r/zorinos/comments/1qxc2zh/bluetooth_headphones_difficult_to_connect_insane/
Audio quality degraded on Bluetooth headset
https://www.reddit.com/r/zorinos/comments/1pa8uet/audio_quality_in_my_bluetooth_headset/
Upstream references
WirePlumber Bluetooth configuration
WirePlumber well-known settings
PipeWire Bluetooth devices overview
Requested help
Confirm whether this is a known issue/regression on Jammy-era Zorin + PipeWire/WirePlumber + some BT headsets
Recommend the supported policy/backend path for stable HFP/HSP call mode
I can provide full logs if needed:
journalctl -b -u bluetooth
journalctl --user -b -u wireplumber -u pipewire -u pipewire-pulse
bluetoothctl transcript during pair/switch/call start
Impact
High impact: frequent Google Meet calls require reliable Bluetooth mic + output.
Using Brave A.I. search via Mojeek for Ubuntu 22.04 gives:
" PipeWire HFP Profile Configuration for Google Meet on Ubuntu 22.04
To resolve HFP (Hands-Free Profile) issues with Bluetooth headsets in Google Meet on Ubuntu 22.04 using PipeWire, follow these steps:
Ensure PipeWire and WirePlumber are installed and active :
sudo apt install pipewire-media-session wireplumber
systemctl --user enable --now wireplumber
WirePlumber (version 0.4.8+) enables automatic profile switching between A2DP and HFP when microphone access is needed.
Verify PipeWire is running : Run pactl info and confirm the server string shows "PulseAudio (on PipeWire)" .
Enable WebRTC PipeWire Capturer in Chrome/Chromium : Navigate to chrome://flags/#enable-webrtc-pipewire-capturer and set "WebRTC PipeWire support" to "Enabled" . This is essential for screen sharing and microphone access in web apps like Google Meet.
Manually switch to HFP profile if needed : Use pavucontrol (install via sudo apt install pavucontrol ) to:
Connect your Bluetooth headset.
In the Configuration tab, manually select "Headset Head Unit (HFP)" .
Switch the input source to the headset mic in Google Meet.
Troubleshooting :
If HFP is not visible, remove ofono if installed: sudo apt remove ofono , stop the service, and restart PipeWire.
Some users report needing to restart the browser after enabling the flag, but a full reboot is not required.
If the profile reverts to A2DP after reconnecting, consider using a udev rule or script to enforce HFP on connection.
Note : Ubuntu 22.04 includes PipeWire by default, but proper configuration is required for HFP to work reliably with web applications.
AI-generated answer. Please verify critical facts."
Having looked at the reference for creating a udev rule there is only mention of what one user did in manjaro and not a detailed step-by-step method on how to create such a rule.
Does Your System run in Wayland or X11? You can check that with echo $XDG_SESSION_TYPE
What Browser do You use? Is it installed as Flatpak or .deb?
X11, default browser is brave installed as a .deb
but this problem is not just a browser problem.
I did a fix. I had shifted to mSBC earlier as well, but it was configurable, which would lead to problems and was not stable/reliable. Now I have done the following, which seems to make the mic stable, since that is my primary objective with calls, but the audio quality still takes a hit.
(written by AI)
OnePlus Buds 3 Mic Fix on Zorin (Brief)
What was done
Removed the custom WirePlumber Bluetooth override that was causing unstable behavior:
backed up ~/.config/wireplumber/bluetooth.lua.d to ~/.config/wireplumber/bluetooth.lua.d.bak-20260215-1652
Cleared stale WirePlumber runtime state under ~/.local/state/wireplumber/ so old profile/default routing choices would not override fresh policy.
Restarted user audio services and portals:
pipewire, pipewire-pulse, wireplumber
xdg-desktop-portal, xdg-desktop-portal-gnome, xdg-desktop-portal-gtk
Reconnected OnePlus Buds 3 and set the Bluetooth card to call mode (headset-head-unit-msbc).
Verified final state:
active profile = headset-head-unit-msbc
default sink/source = Buds headset nodes
mic capture test succeeded from system default source.
Why it worked
The custom Bluetooth policy was conflicting with this Jammy-era WirePlumber/BlueZ behavior and intermittently caused:
missing HFP profiles,
fallback to A2DP-only,
and sometimes no bluez audio device exported at all.
Returning to stock WirePlumber policy restored consistent profile discovery, then locking the active profile to mSBC stabilized mic + output.
Trade-offs made
Prioritized reliability of calls over high-fidelity music:
headset-head-unit-msbc gives stable mic + output, but audio quality is still call-grade compared with A2DP.
Reduced customization to increase stability:
removed advanced custom policy logic that attempted to force behavior automatically.
Kept profile flexibility available:
A2DP profiles are still available if manually selected later, but default stable mode is call profile.
Practical impact
Better consistency for Meet/Zoom/Teams mic detection and usage.
Fewer profile surprises during active sessions.
If a browser briefly reports no mic, a full browser restart usually rebinds to the now-stable PipeWire source.