AAC and Debian
Currently, in a default installation of Debian with the GNOME desktop,
Bluetooth headphones that require the AAC codec1 cannot be used.
As the Debian wiki outlines,
using the AAC codec over Bluetooth, while technically supported by
PipeWire, is explicitly disabled in Debian at this time.
This is because the fdk-aac
library needed to enable this support is currently
in the non-free
component of the repository, meaning that PipeWire, which
is in the main
component, cannot depend on it.
How to Fix it Yourself
If what you, like me, need is simply for Bluetooth Audio to work with AAC
in Debian’s default desktop environment2,
then you’ll need to rebuild the pipewire
package to include the
AAC codec. While the current version in Debian main
has been built with AAC
deliberately disabled, it is trivial to enable if you can install a version
of the fdk-aac
library.
I preface this with the usual caveats when it comes to patent and licensing controversies. I am not a lawyer, building this package and/or using it could get you into legal trouble.
These instructions have only been tested on an up-to-date copy of Debian 12.
- Install
pipewire
’s build dependenciessudo apt install build-essential devscripts sudo apt build-dep pipewire
- Install
libfdk-aac-dev
sudo apt install libfdk-aac-dev
If the above doesn’t work you’ll likely need to enable non-free and try again
sudo sed -i 's/main/main non-free/g' /etc/apt/sources.list sudo apt update
Alternatively, if you wish to ensure you are maximally license-compliant and patent un-infringing3, you can instead build
fdk-aac-free
which includes only those components of AAC that are known to be patent-free3. This is what should eventually end up in Debian to resolve this problem (see below).sudo apt install git-buildpackage mkdir fdk-aac-source cd fdk-aac-source git clone https://salsa.debian.org/multimedia-team/fdk-aac cd fdk-aac gbp buildpackage sudo dpkg -i ../libfdk-aac2_*deb ../libfdk-aac-dev_*deb
- Get the
pipewire
source codemkdir pipewire-source cd pipewire-source apt source pipewire
This will create a bunch of files within the
pipewire-source
directory, but you’ll only need thepipewire-<version>
folder, this contains all the files you’ll need to build the package, with all the debian-specific patches already applied. Note that you don’t want to run theapt source
command as root, as it will then create files that your regular user cannot edit. - Fix the dependencies and build options
To fix up the build scripts to use the fdk-aac library,
you need to save the following as
pipewire-source/aac.patch
--- debian/control.orig +++ debian/control @@ -40,8 +40,8 @@ modemmanager-dev, pkg-config, python3-docutils, - systemd [linux-any] -Build-Conflicts: libfdk-aac-dev + systemd [linux-any], + libfdk-aac-dev Standards-Version: 4.6.2 Vcs-Browser: https://salsa.debian.org/utopia-team/pipewire Vcs-Git: https://salsa.debian.org/utopia-team/pipewire.git --- debian/rules.orig +++ debian/rules @@ -37,7 +37,7 @@ -Dauto_features=enabled \ -Davahi=enabled \ -Dbluez5-backend-native-mm=enabled \ - -Dbluez5-codec-aac=disabled \ + -Dbluez5-codec-aac=enabled \ -Dbluez5-codec-aptx=enabled \ -Dbluez5-codec-lc3=enabled \ -Dbluez5-codec-lc3plus=disabled \
Then you’ll need to run
patch
from within thepipewire-<version>
folder created byapt source
:patch -p0 < ../aac.patch
- Build
pipewire
cd pipewire-* debuild
Note that you will likely see an error from
debsign
at the end of this process, this is harmless, you simply don’t have a GPG key set up to sign your newly-built package4. Packages don’t need to be signed to be installed, and debsign uses a somewhat non-standard signing process that dpkg does not check anyway.
- Install
libspa-0.2-bluetooth
sudo dpkg -i libspa-0.2-bluetooth_*.deb
- Restart PipeWire and/or Reboot
sudo reboot
Theoretically there’s a set of services to restart here that would get pipewire to pick up the new library, probably just pipewire itself. But it’s just as easy to restart and ensure everything is using the correct library.
Why
This is a slightly unusual situation, as the fdk-aac
library is licensed
under what
even the GNU project
acknowledges is a free software license.
However, this license
explicitly informs the user that they need to acquire
a patent license to use this software5:
3. NO PATENT LICENSE
NO EXPRESS OR IMPLIED LICENSES TO ANY PATENT CLAIMS, including without limitation the patents of Fraunhofer, ARE GRANTED BY THIS SOFTWARE LICENSE. Fraunhofer provides no warranty of patent non-infringement with respect to this software. You may use this FDK AAC Codec software or modifications thereto only for purposes that are authorized by appropriate patent licenses.
To quote the GNU project:
Because of this, and because the license author is a known patent aggressor, we encourage you to be careful about using or redistributing software under this license: you should first consider whether the licensor might aim to lure you into patent infringement.
AAC is covered by a number of patents, which expire at some point in the 2030s6. As such the current version of the library is potentially legally dubious to ship with any other software, as it could be considered patent-infringing3.
Fedora’s solution
Since 2017, Fedora has included a modified version of the library as fdk-aac-free, see the announcement and the bugzilla bug requesting review.
This version of the library includes only the AAC LC profile, which is believed to be entirely patent-free3.
Based on this, there is an open bug report in Debian requesting that the
fdk-aac
package be moved to the main component
and that the
pipwire
package be updated to build against it.
The Debian NEW queue
To resolve these bugs, a version of fdk-aac-free
has been uploaded to Debian
by Jeremy Bicha.
However, to make it into Debian proper, it must first pass through the
ftpmaster’s NEW queue.
The current version of fdk-aac-free
has been in the NEW queue since July 2023.
Based on conversations in some of the bugs above, it’s been there since at least 20227.
I hope this helps anyone stuck with AAC to get their hardware working for them while we wait for the package to eventually make it through the NEW queue.
-
Such as, for example, any Apple AirPods, which only support AAC AFAICT. ↩
-
Which, as of Debian 12 is GNOME 3 under Wayland with PipeWire. ↩
-
I’m not a lawyer, I don’t know what kinds of infringement might or might not be possible here, do your own research, etc. ↩ ↩2 ↩3 ↩4
-
And if you DO have a key setup with
debsign
you almost certainly don’t need these instructions. ↩ -
This was originally phrased as “explicitly does not grant any patent rights.” It was pointed out on Hacker News that this is not exactly what it says, as it also includes a specific note that you’ll need to acquire your own patent license. I’ve now quoted the relevant section of the license for clarity. ↩
-
Wikipedia claims the “base” patents expire in 2031, with the extensions expiring in 2038, but its source for these claims is some guy’s spreadsheet in a forum. The same discussion also brings up Wikipedia’s claim and casts some doubt on it, so I’m not entirely sure what’s correct here, but I didn’t feel like doing a patent deep-dive today. If someone can provide a clear answer that would be much appreciated. ↩
-
According to Jeremy Bícha: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1021370#17 ↩