add basic airpods max 2 support (linux only)#519
Open
sachin3796 wants to merge 5 commits intokavishdevar:mainfrom
Open
add basic airpods max 2 support (linux only)#519sachin3796 wants to merge 5 commits intokavishdevar:mainfrom
sachin3796 wants to merge 5 commits intokavishdevar:mainfrom
Conversation
Author
Author
|
have now confirmed that the BLE modelId is now correct, and have updated the documentation with the correct value (0x2D20) |
Author
|
As a note to add, I've had issues with the default selected codec "SBC-XQ" - if this codec is used, audio from the computer only comes out of the left speaker channel. This is likely a hardware limitation. I've worked around this by adding the following to my wireplumber configuration: $ cat .config/wireplumber/wireplumber.conf.d/12-disable-sbc-xq-profile.conf
monitor.bluez.properties = {
bluez5.enable-sbc-xq = false
}Both the bluetooth default SBC codec and AAC work correctly. |
4bbaa29 to
cb246d1
Compare
4 tasks
Bad3r
added a commit
to Bad3r/nixos
that referenced
this pull request
May 5, 2026
* feat(librepods): backport PR #519 for AirPods Max 2 support Recognise AirPods Max 2nd Gen (BLE id 0x2D20, model A3454) so the Linux Qt client gives it the Max icon and the single-headset battery layout instead of falling through to the unknown-model defaults. The patch is the squashed end-state diff of upstream PR kavishdevar/librepods#519, with paths rewritten relative to `linux/` (the nixpkgs derivation's `sourceRoot`) and the docs-only `Proximity Pairing Message.md` change omitted. Drop the patch once upstream merges PR #519 and a release shipping it is pinned. Allow `ANC` (Active Noise Cancellation) in `.typos.toml` so the patch file's `AirPods4ANC` enum value does not trip the spell-check hook. Validation: - nix flake check --accept-flake-config --no-build --offline - nix build .#nixosConfigurations.system76.pkgs.librepods - strings $out/bin/.librepods-wrapped | rg 'AirPodsMax2|A3454' -> both present * fix(librepods): stub max_case.png and disable SBC-XQ for AirPods Max 2 Two AirPods Max follow-ups on top of the PR #519 backport: 1. Stop the QQuickImage warning about `qrc:/icons/assets/max_case.png is not installed`. Upstream librepods never shipped the asset and there is no canonical Apple artwork for it (AirPods Max has no charging case, just a non-electronic Smart Case sleeve), so the case PodColumn is hidden anyway via `caseAvailable`. The QML engine still resolves the dangling `iconSource` URL on creation, hence the warning. Point the case slot at the existing `podmax.png` so the image resolves; the column stays hidden in normal operation but no longer trips the loader. 2. Disable WirePlumber's SBC-XQ codec for all bluetooth sinks. The AirPods Max 2 reporter on PR #519 traced left-channel-only audio to SBC-XQ negotiation; the same workaround is documented there. The property `bluez5.enable-sbc-xq` is daemon-wide in WirePlumber's bluez monitor, so this matches the upstream workaround's scope. Other sinks fall back to plain SBC (or AAC where supported), which is the codec all non-Max AirPods and most generic bluetooth speakers default to. Validation: - nix flake check --accept-flake-config --no-build --offline -> all checks passed - nix build .#nixosConfigurations.system76.pkgs.librepods -> rebuilt - strings $out/bin/.librepods-wrapped | rg max_case -> no matches (fixed) - strings $out/bin/.librepods-wrapped | rg 'AirPodsMax2|A3454' -> 2 matches (preserved) * docs(librepods): point SBC-XQ note to specific upstream comment The truncated `#issuecomment` URL fragment lacked the comment id, so clicking it scrolled to the top of PR #519 instead of the workaround report. Pin to issuecomment-4230312279 (the comment that documents the left-channel-only audio bug and `bluez5.enable-sbc-xq = false` fix). * docs(librepods): clarify path-rooting note in patch header "Paths are rooted at `linux/`" was ambiguous: the patch entries do not actually contain a `linux/` prefix. Reword to make explicit that paths are relative to the `linux/` build root selected by `sourceRoot`, and spell out the upstream-to-patch path mapping so a future maintainer diffing this against PR #519 can see why the prefix is stripped.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.

Airpods Max 2 support