Input from Bluetooth Device Recently Failed

I have been using a bluetooth headset (Soundcore Life Q20) for several months, and it was working perfectly.
Last Friday (January 30) I did a zypper dup (first time for one week). After that, I am not getting any input from my headset. (Output still works perfectly.)

I tried pairing my headset with my phone, and audio works both ways.

Any ideas how to track down why it is not working on Tumbleweed any more, and fix it?

Please check your current desktop sound profile settings and that mic is not muted. You can also use pavucontrol for this. We can dig in further if that checks out ok.

pavucontrol shows it is not muted. Toggling mute on and back off does not help.

With the BT headset connected, check what is reported by pactl list sources short and also share the results from pactl list cards.

@Ken23Holloway Are you using Gnome? There were hiccups, even gnome-shell crashes, related to BT and sound and related patches have just been published.
For instance bug 1257062
If that is the case, maybe a zypper dup saves further debugging.

1 Like

Good catch. Hopefully it is just that. :slight_smile:

No, I am using KDE / Plasma.

KHolloway@Ken-System76:~>pactl list sources short
56      alsa_output.pci-0000_00_1f.3.analog-stereo.monitor      PipeWire        s32le 2ch 48000Hz       RUNNING
57      alsa_input.pci-0000_00_1f.3.analog-stereo       PipeWire        s32le 2ch 48000Hz       SUSPENDED
1138    bluez_input.88:0E:85:A7:EB:C2   PipeWire        float32le 1ch 48000Hz   SUSPENDED
1141    bluez_output.88:0E:85:A7:EB:C2.monitor  PipeWire        float32le 2ch 48000Hz   RUNNING
KHolloway@Ken-System76:~>pactl list cards
Card #49
        Name: alsa_card.pci-0000_00_1f.3
        Driver: alsa
        Owner Module: n/a
        Properties:
                device.enum.api = "udev"
                device.api = "alsa"
                media.class = "Audio/Device"
                api.alsa.path = "hw:0"
                api.alsa.card = "0"
                api.alsa.card.name = "HDA Intel PCH"
                api.alsa.card.longname = "HDA Intel PCH at 0x80890000 irq 222"
                device.plugged.usec = "20540948"
                device.bus_path = "pci-0000:00:1f.3"
                sysfs.path = "/devices/pci0000:00/0000:00:1f.3/sound/card0"
                device.bus = "pci"
                device.subsystem = "sound"
                device.vendor.id = "0x8086"
                device.vendor.name = "Intel Corporation"
                device.product.id = "0x51c8"
                device.product.name = "Alder Lake PCH-P High Definition Audio Controller"
                device.form_factor = "internal"
                device.name = "alsa_card.pci-0000_00_1f.3"
                device.description = "Built-in Audio"
                device.nick = "HDA Intel PCH"
                device.icon_name = "audio-card-analog-pci"
                api.alsa.use-acp = "true"
                api.acp.auto-profile = "false"
                api.acp.auto-port = "false"
                api.dbus.ReserveDevice1.Priority = "-20"
                api.alsa.split-enable = "true"
                api.dbus.ReserveDevice1 = "Audio0"
                spa.object.id = "2"
                factory.id = "15"
                client.id = "47"
                object.id = "49"
                object.serial = "49"
                object.path = "alsa:acp:PCH"
                alsa.card = "0"
                alsa.card_name = "HDA Intel PCH"
                alsa.long_card_name = "HDA Intel PCH at 0x80890000 irq 222"
                alsa.driver_name = "snd_hda_intel"
                alsa.mixer_name = "Realtek ALC256"
                alsa.components = "HDA:10ec0256,1558867c,00100002 HDA:8086281c,80860101,00100000"
                alsa.id = "PCH"
                device.string = "0"
        Profiles:
                off: Off (sinks: 0, sources: 0, priority: 0, available: yes)
                output:analog-stereo+input:analog-stereo: Analog Stereo Duplex (sinks: 1, sources: 1, priority: 6565, available: yes)
                output:analog-stereo: Analog Stereo Output (sinks: 1, sources: 0, priority: 6500, available: yes)
                output:hdmi-stereo+input:analog-stereo: Digital Stereo (HDMI) Output + Analog Stereo Input (sinks: 1, sources: 1, priority: 5965, available: no)
                output:hdmi-stereo: Digital Stereo (HDMI) Output (sinks: 1, sources: 0, priority: 5900, available: no)
                output:hdmi-stereo-extra1+input:analog-stereo: Digital Stereo (HDMI 2) Output + Analog Stereo Input (sinks: 1, sources: 1, priority: 5765, available: no)
                output:hdmi-stereo-extra2+input:analog-stereo: Digital Stereo (HDMI 3) Output + Analog Stereo Input (sinks: 1, sources: 1, priority: 5765, available: no)
                output:hdmi-stereo-extra3+input:analog-stereo: Digital Stereo (HDMI 4) Output + Analog Stereo Input (sinks: 1, sources: 1, priority: 5765, available: no)
                output:hdmi-stereo-extra1: Digital Stereo (HDMI 2) Output (sinks: 1, sources: 0, priority: 5700, available: no)
                output:hdmi-stereo-extra2: Digital Stereo (HDMI 3) Output (sinks: 1, sources: 0, priority: 5700, available: no)
                output:hdmi-stereo-extra3: Digital Stereo (HDMI 4) Output (sinks: 1, sources: 0, priority: 5700, available: no)
                output:hdmi-surround+input:analog-stereo: Digital Surround 5.1 (HDMI) Output + Analog Stereo Input (sinks: 1, sources: 1, priority: 865, available: no)
                output:hdmi-surround71+input:analog-stereo: Digital Surround 7.1 (HDMI) Output + Analog Stereo Input (sinks: 1, sources: 1, priority: 865, available: no)
                output:hdmi-surround: Digital Surround 5.1 (HDMI) Output (sinks: 1, sources: 0, priority: 800, available: no)
                output:hdmi-surround71: Digital Surround 7.1 (HDMI) Output (sinks: 1, sources: 0, priority: 800, available: no)
                output:hdmi-surround-extra1+input:analog-stereo: Digital Surround 5.1 (HDMI 2) Output + Analog Stereo Input (sinks: 1, sources: 1, priority: 665, available: no)
                output:hdmi-surround71-extra1+input:analog-stereo: Digital Surround 7.1 (HDMI 2) Output + Analog Stereo Input (sinks: 1, sources: 1, priority: 665, available: no)
                output:hdmi-surround-extra2+input:analog-stereo: Digital Surround 5.1 (HDMI 3) Output + Analog Stereo Input (sinks: 1, sources: 1, priority: 665, available: no)
                output:hdmi-surround71-extra2+input:analog-stereo: Digital Surround 7.1 (HDMI 3) Output + Analog Stereo Input (sinks: 1, sources: 1, priority: 665, available: no)
                output:hdmi-surround-extra3+input:analog-stereo: Digital Surround 5.1 (HDMI 4) Output + Analog Stereo Input (sinks: 1, sources: 1, priority: 665, available: no)
                output:hdmi-surround71-extra3+input:analog-stereo: Digital Surround 7.1 (HDMI 4) Output + Analog Stereo Input (sinks: 1, sources: 1, priority: 665, available: no)
                output:hdmi-surround-extra1: Digital Surround 5.1 (HDMI 2) Output (sinks: 1, sources: 0, priority: 600, available: no)
                output:hdmi-surround71-extra1: Digital Surround 7.1 (HDMI 2) Output (sinks: 1, sources: 0, priority: 600, available: no)
                output:hdmi-surround-extra2: Digital Surround 5.1 (HDMI 3) Output (sinks: 1, sources: 0, priority: 600, available: no)
                output:hdmi-surround71-extra2: Digital Surround 7.1 (HDMI 3) Output (sinks: 1, sources: 0, priority: 600, available: no)
                output:hdmi-surround-extra3: Digital Surround 5.1 (HDMI 4) Output (sinks: 1, sources: 0, priority: 600, available: no)
                output:hdmi-surround71-extra3: Digital Surround 7.1 (HDMI 4) Output (sinks: 1, sources: 0, priority: 600, available: no)
                input:analog-stereo: Analog Stereo Input (sinks: 0, sources: 1, priority: 65, available: yes)
                pro-audio: Pro Audio (sinks: 5, sources: 1, priority: 1, available: yes)
        Active Profile: output:analog-stereo+input:analog-stereo
        Ports:
                analog-input-front-mic: Front Microphone (type: Mic, priority: 8500, latency offset: 0 usec, availability group: Legacy 1, available)
                        Properties:
                                port.type = "mic"
                                port.availability-group = "Legacy 1"
                                device.icon_name = "audio-input-microphone"
                                card.profile.port = "0"
                        Part of profile(s): input:analog-stereo, output:analog-stereo+input:analog-stereo, output:hdmi-stereo+input:analog-stereo, output:hdmi-surround+input:analog-stereo, output:hdmi-surround71+input:analog-stereo, output:hdmi-stereo-extra1+input:analog-stereo, output:hdmi-surround-extra1+input:analog-stereo, output:hdmi-surround71-extra1+input:analog-stereo, output:hdmi-stereo-extra2+input:analog-stereo, output:hdmi-surround-extra2+input:analog-stereo, output:hdmi-surround71-extra2+input:analog-stereo, output:hdmi-stereo-extra3+input:analog-stereo, output:hdmi-surround-extra3+input:analog-stereo, output:hdmi-surround71-extra3+input:analog-stereo
                analog-input-internal-mic: Internal Microphone (type: Mic, priority: 8900, latency offset: 0 usec, availability group: Legacy 2, not available)
                        Properties:
                                port.type = "mic"
                                port.availability-group = "Legacy 2"
                                device.icon_name = "audio-input-microphone"
                                card.profile.port = "1"
                        Part of profile(s): input:analog-stereo, output:analog-stereo+input:analog-stereo, output:hdmi-stereo+input:analog-stereo, output:hdmi-surround+input:analog-stereo, output:hdmi-surround71+input:analog-stereo, output:hdmi-stereo-extra1+input:analog-stereo, output:hdmi-surround-extra1+input:analog-stereo, output:hdmi-surround71-extra1+input:analog-stereo, output:hdmi-stereo-extra2+input:analog-stereo, output:hdmi-surround-extra2+input:analog-stereo, output:hdmi-surround71-extra2+input:analog-stereo, output:hdmi-stereo-extra3+input:analog-stereo, output:hdmi-surround-extra3+input:analog-stereo, output:hdmi-surround71-extra3+input:analog-stereo
                analog-input-headset-mic: Headset Microphone (type: Headset, priority: 8800, latency offset: 0 usec, availability group: Legacy 3, not available)
                        Properties:
                                port.type = "headset"
                                port.availability-group = "Legacy 3"
                                device.icon_name = "audio-input-microphone"
                                card.profile.port = "2"
                        Part of profile(s): input:analog-stereo, output:analog-stereo+input:analog-stereo, output:hdmi-stereo+input:analog-stereo, output:hdmi-surround+input:analog-stereo, output:hdmi-surround71+input:analog-stereo, output:hdmi-stereo-extra1+input:analog-stereo, output:hdmi-surround-extra1+input:analog-stereo, output:hdmi-surround71-extra1+input:analog-stereo, output:hdmi-stereo-extra2+input:analog-stereo, output:hdmi-surround-extra2+input:analog-stereo, output:hdmi-surround71-extra2+input:analog-stereo, output:hdmi-stereo-extra3+input:analog-stereo, output:hdmi-surround-extra3+input:analog-stereo, output:hdmi-surround71-extra3+input:analog-stereo
                analog-output-speaker: Speakers (type: Speaker, priority: 10000, latency offset: 0 usec, availability group: Legacy 4, availability unknown)
                        Properties:
                                port.type = "speaker"
                                port.availability-group = "Legacy 4"
                                device.icon_name = "audio-speakers"
                                card.profile.port = "3"
                        Part of profile(s): output:analog-stereo, output:analog-stereo+input:analog-stereo
                analog-output-headphones: Headphones (type: Headphones, priority: 9900, latency offset: 0 usec, availability group: Legacy 3, not available)
                        Properties:
                                port.type = "headphones"
                                port.availability-group = "Legacy 3"
                                device.icon_name = "audio-headphones"
                                card.profile.port = "4"
                        Part of profile(s): output:analog-stereo, output:analog-stereo+input:analog-stereo
                hdmi-output-0: HDMI / DisplayPort (type: HDMI, priority: 5900, latency offset: 0 usec, availability group: Legacy 5, not available)
                        Properties:
                                port.type = "hdmi"
                                port.availability-group = "Legacy 5"
                                device.icon_name = "video-display"
                                card.profile.port = "5"
                        Part of profile(s): output:hdmi-stereo, output:hdmi-stereo+input:analog-stereo, output:hdmi-surround, output:hdmi-surround+input:analog-stereo, output:hdmi-surround71, output:hdmi-surround71+input:analog-stereo
                hdmi-output-1: HDMI / DisplayPort 2 (type: HDMI, priority: 5800, latency offset: 0 usec, availability group: Legacy 6, not available)
                        Properties:
                                port.type = "hdmi"
                                port.availability-group = "Legacy 6"
                                device.icon_name = "video-display"
                                card.profile.port = "6"
                        Part of profile(s): output:hdmi-stereo-extra1, output:hdmi-stereo-extra1+input:analog-stereo, output:hdmi-surround-extra1, output:hdmi-surround-extra1+input:analog-stereo, output:hdmi-surround71-extra1, output:hdmi-surround71-extra1+input:analog-stereo
                hdmi-output-2: HDMI / DisplayPort 3 (type: HDMI, priority: 5700, latency offset: 0 usec, availability group: Legacy 7, not available)
                        Properties:
                                port.type = "hdmi"
                                port.availability-group = "Legacy 7"
                                device.icon_name = "video-display"
                                card.profile.port = "7"
                        Part of profile(s): output:hdmi-stereo-extra2, output:hdmi-stereo-extra2+input:analog-stereo, output:hdmi-surround-extra2, output:hdmi-surround-extra2+input:analog-stereo, output:hdmi-surround71-extra2, output:hdmi-surround71-extra2+input:analog-stereo
                hdmi-output-3: HDMI / DisplayPort 4 (type: HDMI, priority: 5600, latency offset: 0 usec, availability group: Legacy 8, not available)
                        Properties:
                                port.type = "hdmi"
                                port.availability-group = "Legacy 8"
                                device.icon_name = "video-display"
                                card.profile.port = "8"
                        Part of profile(s): output:hdmi-stereo-extra3, output:hdmi-stereo-extra3+input:analog-stereo, output:hdmi-surround-extra3, output:hdmi-surround-extra3+input:analog-stereo, output:hdmi-surround71-extra3, output:hdmi-surround71-extra3+input:analog-stereo

Card #1133
        Name: bluez_card.88_0E_85_A7_EB_C2
        Driver: module-bluez5-device.c
        Owner Module: n/a
        Properties:
                device.api = "bluez5"
                device.bus = "bluetooth"
                media.class = "Audio/Device"
                device.name = "bluez_card.88_0E_85_A7_EB_C2"
                device.description = "soundcore Life Q20"
                device.alias = "soundcore Life Q20"
                device.form_factor = "headset"
                device.icon_name = "audio-headset-bluetooth"
                device.string = "88:0E:85:A7:EB:C2"
                api.bluez5.icon = "audio-headset"
                api.bluez5.path = "/org/bluez/hci0/dev_88_0E_85_A7_EB_C2"
                api.bluez5.address = "88:0E:85:A7:EB:C2"
                api.bluez5.device = ""
                api.bluez5.class = "0x240404"
                api.bluez5.connection = "connected"
                bluez5.profile = "off"
                spa.object.id = "1"
                factory.id = "15"
                client.id = "47"
                object.id = "122"
                object.serial = "1133"
        Profiles:
                off: Off (sinks: 0, sources: 0, priority: 0, available: yes)
                a2dp-sink-sbc: High Fidelity Playback (A2DP Sink, codec SBC) (sinks: 1, sources: 1, priority: 132, available: yes)
                a2dp-sink-sbc_xq: High Fidelity Playback (A2DP Sink, codec SBC-XQ) (sinks: 1, sources: 1, priority: 131, available: yes)
                a2dp-sink: High Fidelity Playback (A2DP Sink, codec AAC) (sinks: 1, sources: 1, 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): a2dp-sink-sbc, a2dp-sink-sbc_xq, a2dp-sink, 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
KHolloway@Ken-System76:~>

Strange thing I just noticed. I am using Zoom to test. (Let me know if there is something better to test with.) If I have the Zoom Settings > Audio open when I connect the bluetooth, it seems to work - until I close settings, then it breaks again.

I would check with a simple local recorder, like a webcam/snapshot recorder (don’t know what is default on Plasma) or sound apps like Audacity or SonicVisualizer if you are familiar with one of those.

1 Like

I tested with “arecord” - same results: if Zoom Audio Settings dialog is open when bluetooth connect, input works; if Zoom Audio Settings dialog is not open, or is later closed, input does not work.

In the system journal, I found the following entries:

When I open the Zoom Audio Settings:

Feb 04 19:54:17 Ken-System76 kded6[3580]: Registering ":1.134/StatusNotifierItem" to system tray

When I then connect bluetooth:

Feb 04 19:54:33 Ken-System76 pipewire-pulse[3698]: mod.protocol-pulse: client 0x55960054e990 [PulseAudio Volume Control]: ERROR command:104 (SEND_OBJECT_MESSAGE) tag:902 error:3 (Invalid argument)
Feb 04 19:54:33 Ken-System76 pipewire-pulse[3698]: mod.protocol-pulse: client 0x55960054e990 [PulseAudio Volume Control]: ERROR command:104 (SEND_OBJECT_MESSAGE) tag:903 error:3 (Invalid argument)
Feb 04 19:54:33 Ken-System76 kernel: input: soundcore Life Q20 (AVRCP) as /devices/virtual/input/input39
Feb 04 19:54:33 Ken-System76 kded6[3580]: Service  ":1.134" unregistered
Feb 04 19:54:33 Ken-System76 kded6[3580]: Registering ":1.135/StatusNotifierItem" to system tray
Feb 04 19:54:33 Ken-System76 systemd-logind[2364]: Watching system buttons on /dev/input/event19 (soundcore Life Q20 (AVRCP))

When I then close the Zoom Audio Settings dialog:

Feb 04 19:54:33 Ken-System76 plasmashell[3740]: file:///usr/share/plasma/plasmoids/org.kde.plasma.bluetooth/contents/ui/FullRepresentation.qml:77:13: QML Toolbar: Binding loop detected for property "leftInset":
                                                qrc:/qt/qml/org/kde/plasma/extras/PlasmoidHeading.qml:34:5
Feb 04 19:54:48 Ken-System76 kded6[3580]: Service  ":1.135" unregistered
Feb 04 19:54:51 Ken-System76 bluetoothd[2337]: /org/bluez/hci0/dev_88_0E_85_A7_EB_C2/sep2/fd10: fd(44) ready

If I do NOT have the Zoom Audio Setting dialog open when I connect the bluetooth, I see:

Feb 04 19:55:25 Ken-System76 pipewire-pulse[3698]: mod.protocol-pulse: client 0x55960054e990 [PulseAudio Volume Control]: ERROR command:104 (SEND_OBJECT_MESSAGE) tag:989 error:3 (Invalid argument)
Feb 04 19:55:25 Ken-System76 kernel: Bluetooth: hci0: SCO packet for unknown connection handle 257
Feb 04 19:55:25 Ken-System76 kernel: input: soundcore Life Q20 (AVRCP) as /devices/virtual/input/input40
Feb 04 19:55:25 Ken-System76 systemd-logind[2364]: Watching system buttons on /dev/input/event19 (soundcore Life Q20 (AVRCP))
Feb 04 19:55:27 Ken-System76 bluetoothd[2337]: /org/bluez/hci0/dev_88_0E_85_A7_EB_C2/sep2/fd11: fd(44) ready
Feb 04 19:55:37 Ken-System76 plasmashell[3740]: file:///usr/share/plasma/plasmoids/org.kde.plasma.bluetooth/contents/ui/FullRepresentation.qml:77:13: QML Toolbar: Binding loop detected for property "leftInset":
                                                qrc:/qt/qml/org/kde/plasma/extras/PlasmoidHeading.qml:34:5

Hopefully that means something to someone?

So, does anyone have any ideas on this?

To be clear, this is not a Zoom problem. Audio input does not work for any application - unless I first open the Zoom Audio settings dialog (not sure why that “fixes” it, and not sure where to go from here…)

The pactl output show the wrong profile selected. A2DP doesn’t support mic input. The HSP/HFP profile is needed. You can do that via your desktop sound settings or via pactl….

pactl set-card-profile bluez_card.88_0E_85_A7_EB_C2 headset-head-unit

That command sets it to profile “Headset Head Unit (HSP/HFP, codec MSBC)”, which does not seem to work. But

pactl set-card-profile bluez_card.88_0E_85_A7_EB_C2 headset-head-unit-cvsd

sets it to “Headset Head Unit (HSP/HFP, codec CVSD)”, which does seem to work.

But then the problem is that the output seems to be mono (when I use the “Test” button, “Front Left” is heard on both sides, but “Front Right” is not heard at all). I did “Show Channels”, and it shows Right at Volume 0. Changing it to Volume 40% (matching Left) did not make any difference.

Changing the Playback profile to any of the “High Fidelity” makes both channels of output work, but also changes the microphone, which breaks it.

Is there a way to have a different profile for input and output?

I nearly suggested trying that option as well.

When you switch to headset-head-unit (HSP/HFP), Bluetooth bandwidth is shared between mic + audio. Bluetooth does not support stereo playback and mic at the same time. A technical limitation unfortunately.

After a brief search online, apparently BT LE Audio introduces better efficiency, new LC3 codec, support for multi-stream audio support. It would require a suitable BT adapter to support if of course. The TW Bluez stack should be new enough. I’m in uncharted territory here though.

Thank you. This information was very helpful.

I think I understand more of what is happening now. It appears that something is automatically switching the profile at times - probably things that want to use the microphone switch to the “Headset Head Unit” profile, and then mostly switch back to “High Fidelity Playback” when they are done.

It seems like something got it stuck on “High Fidelity Playback”, so the microphone would not work. It almost seems like me manually switching it once got it un-stuck. I will need to do more testing, but I think it is back to working like before.

Also, I think this explains why, for about a year now, after exiting a meeting, occasionally the audio (for music) sounded really bad. I guess it was getting stuck on “Headset Head Unit” (or Teams or Zoom was not letting go of the microphone).

Now that I have a better idea what is going on, I think I can “fix” it when needed (without resorting to reboot).

Glad to have be been of help. If you ever want investigate what is holding the mic,
pactl list source-outputs
That will show which application currently owns the microphone.

You can also use wpctl status and examine sources or streams.