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).
App version
Observed on v1.0.0-rc1 (Qt client,
linux/); the same code path is present onlinux/rust@672e65a(read, not run).Variant
Rust rewrite (
linux-rustbranch)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 (
nixor 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 becausedisconnect_when_not_wearingdefaults totrue).A profile set through the pulse API is a user choice to WirePlumber, so it is persisted:
From then on, every time the AirPods reconnect (out of the case, back from a phone), WirePlumber restores
offand 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
offas the last profile set.) I've run the "don't touch the profile" variant on the Qt client for a while: no stuckoffsince, and auto-pause still works.Logs and stderr
Additional context
Related: #795 (card lookup at connect), #680 (profile switching recreating the sink).