OnePlus Buds Z2 Don't Seamlesly Connect and Only Output From One Ear

Hi OpenSUSE community,

I’ve been an on-and off user of this distro for two years. I decided to come back to OpenSUSE recently because I wanted to use SLES but I realized that most of the software I want to use require newer versions of core dependencies to stay current. I am currently using slowroll on the newest snapshot. Everything except three things work the way I need them to. The list is as follows:

  1. Niri has a weird issue where I can’t just switch networks like other Linuxes.
  2. My OnePlus Buds Z and OnePlus Buds Z2 connect but only output from one ear.
  3. My normal user with root access doesn’t show up as root.

If I’m being honest, I can live with (1) and (3), but resolving (2) is important to me. I don’t have much to show here except for journal logs to prove that tins is happening and the qualitative assessment. Also, the Z2 buds refuse to connect sometimes.

Aug 05 21:15:08 localhost.localdomain dms[7486]:   WARN quickshell.bluetooth.device: Failed to connect to device BluetoothDevice(0x56428df773f0, path="/org/bluez/hci0/dev_E4_41_22_F9_6E_28"): "br-connection-page-timeout"
Aug 05 18:17:00 localhost.localdomain dms[7486]:   INFO qml: [DMSService:296] Connected (API v28, CLI 1.5.0+git4329.6de55932) - ["plugins","network","loginctl","freedesktop","gamma","bluetooth","browser","cups","brightness","wlroutput","evdev","clipboard","theme.auto","wallpaper","location","dbus","sysupdate"]
Aug 05 18:17:00 localhost.localdomain dms[7486]:   INFO qml: [DMSService:296] Connected (API v28, CLI 1.5.0+git4329.6de55932) - ["plugins","network","loginctl","freedesktop","gamma","bluetooth","browser","cups","brightness","wlroutput","evdev","clipboard","theme.auto","wallpaper","location","dbus","sysupdate"]
Aug 05 18:15:44 localhost.localdomain dms[7486]:   WARN quickshell.bluetooth.device: Failed to connect to device BluetoothDevice(0x56428ca11130, path="/org/bluez/hci0/dev_E4_41_22_F9_33_98"): "br-connection-page-timeout"
Aug 05 18:15:32 localhost.localdomain dms[7486]:   WARN quickshell.bluetooth.device: Failed to connect to device BluetoothDevice(0x56428ca11130, path="/org/bluez/hci0/dev_E4_41_22_F9_33_98"): "br-connection-page-timeout"
Aug 05 18:15:18 localhost.localdomain dms[7486]:   WARN quickshell.bluetooth.device: Failed to connect to device BluetoothDevice(0x56428ca11130, path="/org/bluez/hci0/dev_E4_41_22_F9_33_98"): "br-connection-page-timeout"

All this shows is a typical set of bluetooth logs that shows the device failing to connect.

That said, how do I get past this issue and get both ears on both ears working? I have verified that booth earphones work on my phone and another Linux distro (AlmaLinux).

Thanks in advance!

Can you check which Bluetooth audio profile is in use (A2DP vs HFP/HSP)?

With the earbud(s) connected, run
pactl list cards
and post the output.

Also, the versions of BlueZ, PipeWire, and WirePlumber in case this is a regression…
rpm -q bluez pipewire wireplumber

Something else to try is removing the existing Bluetooth pairing and pairing the earbuds again from scratch. Do this via bluetoothctl. List the known devices first with bluetoothctl devices, then do…

bluetoothctl
remove <device MAC address>

After that, reset the earbuds and pair them again.

pactl list cards
Here is the output for Buds Z:

Card #151
	Name: bluez_card.E4_41_22_4F_E1_78
	Driver: module-bluez5-device.c
	Owner Module: n/a
	Properties:
		device.api = "bluez5"
		device.bus = "bluetooth"
		media.class = "Audio/Device"
		device.name = "bluez_card.E4_41_22_4F_E1_78"
		device.description = "OnePlus Buds Z"
		device.alias = "OnePlus Buds Z"
		device.form_factor = "headset"
		device.icon_name = "audio-headset-bluetooth"
		device.string = "E4:41:22:4F:E1:78"
		api.bluez5.icon = "audio-headset"
		api.bluez5.path = "/org/bluez/hci0/dev_E4_41_22_4F_E1_78"
		api.bluez5.address = "E4:41:22:4F:E1:78"
		api.bluez5.device = ""
		api.bluez5.class = "0x240404"
		api.bluez5.connection = "connected"
		bluez5.profile = "off"
		spa.object.id = "1"
		factory.id = "15"
		client.id = "42"
		object.id = "81"
		object.serial = "151"
	Profiles:
		off: Off (sinks: 0, sources: 0, priority: 0, available: yes)
		a2dp-sink-sbc: High Fidelity Playback (A2DP Sink, codec SBC) (sinks: 1, sources: 0, priority: 132, available: yes)
		a2dp-sink-sbc_xq: High Fidelity Playback (A2DP Sink, codec SBC-XQ) (sinks: 1, sources: 0, priority: 131, available: yes)
		a2dp-sink: High Fidelity Playback (A2DP Sink, codec AAC) (sinks: 1, sources: 0, priority: 133, available: yes)
		headset-head-unit-cvsd: Headset Head Unit (HSP/HFP, codec CVSD) (sinks: 1, sources: 1, priority: 5, available: yes)
		headset-head-unit: Headset Head Unit (HSP/HFP, codec MSBC) (sinks: 1, sources: 1, priority: 6, available: yes)
	Active Profile: a2dp-sink
	Ports:
		headset-input: Handsfree (type: Headset, priority: 0, latency offset: 0 usec, available)
			Properties:
				port.type = "headset"
			Part of profile(s): headset-head-unit-cvsd, headset-head-unit
		headset-output: Headphones (type: Headset, priority: 0, latency offset: 0 usec, available)
			Properties:
				port.type = "headset"
				device.icon_name = "audio-headphones-bluetooth"
			Part of profile(s): a2dp-sink-sbc, a2dp-sink-sbc_xq, a2dp-sink
		headset-hf-output: Handsfree (type: Headset, priority: 0, latency offset: 0 usec, available)
			Properties:
				port.type = "headset"
				device.icon_name = "audio-headset-bluetooth"
			Part of profile(s): headset-head-unit-cvsd, headset-head-unit

Here is the output for Buds Z2

Card #127
	Name: bluez_card.E4_41_22_F9_33_98
	Driver: module-bluez5-device.c
	Owner Module: n/a
	Properties:
		device.api = "bluez5"
		device.bus = "bluetooth"
		media.class = "Audio/Device"
		device.name = "bluez_card.E4_41_22_F9_33_98"
		device.description = "OnePlus Buds Z2"
		device.alias = "OnePlus Buds Z2"
		device.form_factor = "headset"
		device.icon_name = "audio-headset-bluetooth"
		device.string = "E4:41:22:F9:33:98"
		api.bluez5.icon = "audio-headset"
		api.bluez5.path = "/org/bluez/hci0/dev_E4_41_22_F9_33_98"
		api.bluez5.address = "E4:41:22:F9:33:98"
		api.bluez5.device = ""
		api.bluez5.class = "0x240404"
		api.bluez5.connection = "connected"
		bluez5.profile = "off"
		spa.object.id = "2"
		factory.id = "15"
		client.id = "42"
		object.id = "79"
		object.serial = "127"
	Profiles:
		off: Off (sinks: 0, sources: 0, priority: 0, available: yes)
		a2dp-sink-sbc: High Fidelity Playback (A2DP Sink, codec SBC) (sinks: 1, sources: 0, priority: 132, available: yes)
		a2dp-sink-sbc_xq: High Fidelity Playback (A2DP Sink, codec SBC-XQ) (sinks: 1, sources: 0, priority: 131, available: yes)
		a2dp-sink: High Fidelity Playback (A2DP Sink, codec AAC) (sinks: 1, sources: 0, priority: 133, available: yes)
		headset-head-unit-cvsd: Headset Head Unit (HSP/HFP, codec CVSD) (sinks: 1, sources: 1, priority: 5, available: yes)
		headset-head-unit: Headset Head Unit (HSP/HFP, codec MSBC) (sinks: 1, sources: 1, priority: 6, available: yes)
	Active Profile: a2dp-sink
	Ports:
		headset-input: Handsfree (type: Headset, priority: 0, latency offset: 0 usec, available)
			Properties:
				port.type = "headset"
			Part of profile(s): headset-head-unit-cvsd, headset-head-unit
		headset-output: Headphones (type: Headset, priority: 0, latency offset: 0 usec, available)
			Properties:
				port.type = "headset"
				device.icon_name = "audio-headphones-bluetooth"
			Part of profile(s): a2dp-sink-sbc, a2dp-sink-sbc_xq, a2dp-sink
		headset-hf-output: Handsfree (type: Headset, priority: 0, latency offset: 0 usec, available)
			Properties:
				port.type = "headset"
				device.icon_name = "audio-headset-bluetooth"
			Part of profile(s): headset-head-unit-cvsd, headset-head-unit

Here is the output for the packages.
rpm -q bluez pipewire wireplumber

bluez-5.82-2.3.x86_64
pipewire-1.6.8-1.0.2.1.sr20260707.x86_64
wireplumber-0.5.15-1.2.x86_64

Edit: I charged the Z2 buds and it appears that they both connect now. It’s crazy that the buds don’t seem to charge evenly. Both buds autoconnect now, as well.

That would explain it. If one earbud wasn’t sufficiently charged, it may not have been able to establish the TWS link with the other earbud, which would result in audio only coming from one side.

1 Like

I have to say that this is strange because I put them on the charger for about half an hour before I started using them.