A guide for connecting Sony WF-1000XM5 wireless earbuds on Linux (Ubuntu/PipeWire/WirePlumber/BlueZ). Covers common issues including pairing failures, missing audio sink, wrong audio profile, and dual Bluetooth adapter conflicts.
Symptoms:
bluetoothctl pairreturnsFailed to pair: org.bluez.Error.ConnectionAttemptFailed- GNOME Bluetooth settings shows "Setting up ... failed: Timeout was reached"
- Device appears in scan but refuses to pair
Causes:
- Stale pairing data on the headphones or the PC
- MediaTek MT7925 Bluetooth adapter has a known driver bug on kernel < 6.17
- BlueZ has a known pairing incompatibility with Sony XM5 headphones (bluez#1020)
Fix:
Reset the headphones' pairing list:
- Place both earbuds in the charging case, open the lid
- Touch and hold the sensor on both earbuds simultaneously for ~10 seconds
- Wait for the indicator lights to flash, then close the case
- Take them out — they will enter pairing mode automatically
Remove old pairing on the PC and re-pair:
bluetoothctl remove <MAC_ADDRESS>
bluetoothctl scan on
# Wait for "WF-1000XM5" to appear
bluetoothctl trust <MAC_ADDRESS>
bluetoothctl pair <MAC_ADDRESS>
bluetoothctl connect <MAC_ADDRESS>Symptoms:
bluetoothctl infoshowsConnected: yesbutServicesResolved: falsewpctl statusshows no Bluetooth sink- No WF-1000XM5 entry under Audio Sinks
Cause: The low-level Bluetooth connection exists but audio profiles (A2DP, HFP) never initialized.
Fix:
Disconnect and reconnect:
bluetoothctl disconnect <MAC_ADDRESS>
sleep 3
bluetoothctl connect <MAC_ADDRESS>If that doesn't work, restart WirePlumber after connecting:
systemctl --user restart wireplumberVerify audio transport was created — you should see Endpoint and Transport lines in the connect output:
[NEW] Endpoint /org/bluez/hci0/dev_XX_XX_XX_XX_XX_XX/sep1
[NEW] Transport /org/bluez/hci0/dev_XX_XX_XX_XX_XX_XX/sep1/fd0
Symptoms:
- Audio sounds like a phone call (very low quality) or no sound at all
wpctl inspect <SINK_ID>showsapi.bluez5.profile = "headset-head-unit"andapi.bluez5.codec = "cvsd"
Cause: WirePlumber selected the HFP (Hands-Free Profile) instead of A2DP (high quality media playback).
Fix:
Find the device ID and switch to A2DP:
# Find the WF-1000XM5 device ID in WirePlumber
wpctl status
# Look for WF-1000XM5 under Devices, note the ID (e.g., 41)
# List available profiles
pw-cli enum-params <DEVICE_ID> EnumProfile
# Look for "a2dp-sink" and note its index (e.g., 5)
# Switch to A2DP
wpctl set-profile <DEVICE_ID> <A2DP_INDEX>Make A2DP the default (so it persists across reconnects):
Edit ~/.local/state/wireplumber/default-profile and change:
bluez_card.<MAC_WITH_UNDERSCORES>=headset-head-unit-cvsd
to:
bluez_card.<MAC_WITH_UNDERSCORES>=a2dp-sink
Then restart WirePlumber:
systemctl --user restart wireplumberSymptoms:
hciconfigshows two adapters (hci0 and hci1)- Pairing works on one adapter but GNOME Settings shows the other
- Headphones keep disconnecting or failing to connect
Cause:
Two Bluetooth adapters are active. GNOME Settings may be using a different adapter than bluetoothctl. The bluetoothctl select command can behave unexpectedly with multiple adapters.
Diagnosis:
hciconfig -a # List all adapters
bluetoothctl list # Show adapters and which is [default]Fix — disable the unwanted adapter:
Option A: Soft-block with rfkill (temporary, until reboot):
# Identify which hci# to block
rfkill list
rfkill block <ID>Option B: Unbind via udev rule (permanent):
Create /etc/udev/rules.d/99-disable-onboard-bt.rules:
# Disable onboard Bluetooth adapter (adjust idVendor/idProduct for your hardware)
SUBSYSTEM=="usb", DRIVER=="btusb", ATTRS{idVendor}=="0e8d", ATTRS{idProduct}=="0717", RUN+="/bin/sh -c 'echo %k > /sys/bus/usb/drivers/btusb/unbind'"
Then reload:
sudo udevadm control --reload-rulesWarning: If your Bluetooth and WiFi share the same USB device (common with combo chips like MediaTek MT7925), do NOT disable the entire USB device — only unbind
btusb. The udev rule above does this correctly.
The MT7925 (USB ID 0e8d:0717) has a known btusb driver bug on Linux kernels before 6.17.
Symptoms:
HW/SW Version: 0x00000000in kernel logsFailed to set mode: Failed (0x03)in bluetoothd logs- Device setup takes 18+ seconds
- All pairing attempts fail
Status: Fix is merged upstream, expected in kernel 6.17.
Workaround for kernel 6.14:
sudo apt install git dkms
git clone https://github.com/jeremyb31/bluetooth-6.14.git
sudo dkms add ./bluetooth-6.14
sudo dkms install btusb/4.3
sudo rebootTo remove after upgrading to kernel 6.17+:
sudo dkms uninstall btusb/4.3
sudo dkms remove btusb/4.3 --all# Scan for devices
bluetoothctl scan on
# Pair, trust, and connect
bluetoothctl trust <MAC>
bluetoothctl pair <MAC>
bluetoothctl connect <MAC>
# Check connection details
bluetoothctl info <MAC>
# Check audio sinks
wpctl status
# Switch to A2DP profile
wpctl set-profile <DEVICE_ID> <A2DP_PROFILE_INDEX>
# Set volume
wpctl set-volume <SINK_ID> 0.7
wpctl set-mute <SINK_ID> 0
# Restart audio stack
systemctl --user restart wireplumber- Ubuntu 24.04 (Noble)
- Kernel 6.14
- PipeWire 1.0.5
- WirePlumber 0.4.17
- BlueZ 5.x
- Sony WF-1000XM5 (firmware current as of 2026)
- External USB Bluetooth adapter: TP-Link (Realtek, BT 5.1)
- Onboard: MediaTek MT7925 (BT 5.4) — has known driver issues
- BlueZ issue #1020 — Sony WF/WH-1000XM5 pairing failures
- MT7925 btusb DKMS patch
- Ubuntu Discourse — Bluetooth issues with 6.14 kernel
MIT