Skip to content

[Linux] Ear-removal sets the card to "off", WirePlumber persists it, and AirPods reconnect with no output #798

Description

@fuad-daoud

App version

Observed on v1.0.0-rc1 (Qt client, linux/); the same code path is present on linux/rust @ 672e65a (read, not run).

Variant

Rust rewrite (linux-rust branch)

Distro and version

Arch Linux (kernel 6.18 LTS) — PipeWire 1.6.9, WirePlumber 0.5.17, BlueZ 5.87

Desktop environment / compositor

swayfx 0.6 (Wayland)

Install method (only official sources)

Built from source (nix or otherwise)

AirPods model

AirPods Pro 3

What happened

When both buds leave the ears, LibrePods sets the bluez card profile to off (deactivate_a2dp_profile, reached from L254 because disconnect_when_not_wearing defaults to true).

A profile set through the pulse API is a user choice to WirePlumber, so it is persisted:

$ grep bluez_card ~/.local/state/wireplumber/default-profile
bluez_card.XX_XX_XX_XX_XX_XX=off

From then on, every time the AirPods reconnect (out of the case, back from a phone), WirePlumber restores off and the AirPods show up with no output device. LibrePods only switches back to A2DP on a later in-ear event and only if that activation succeeds, so any miss (card not there yet, see also #795) leaves the user with no sink until they pick a profile by hand. Taking the buds out and putting them in the case is enough to reproduce it.

Suggested fix: don't switch the profile on ear removal at all. Playback is already paused by the ear-detection handler, and putting the buds in the case disconnects them, so the default sink falls back on its own. (Alternatively, remember the previous profile and never leave off as the last profile set.) I've run the "don't touch the profile" variant on the Qt client for a while: no stuck off since, and auto-pause still works.

Logs and stderr

Both AirPods are out of ear
Removing AirPods as audio output device        # -> profile off, persisted
Device disconnected: "XX:XX:XX:XX:XX:XX"
... reconnect ...
pactl list cards -> bluez_card.XX_XX_XX_XX_XX_XX  Active Profile: off

Additional context

Related: #795 (card lookup at connect), #680 (profile switching recreating the sink).

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions