Using Pipewire instead of Pulseaudio in Slackware 15
SlackwareThis Forum is for the discussion of Slackware Linux.
Notices
Welcome to LinuxQuestions.org, a friendly and active Linux Community.
You are currently viewing LQ as a guest. By joining our community you will have the ability to post topics, receive our newsletter, use the advanced search, subscribe to threads and access many other special features. Registration is quick, simple and absolutely free. Join our community today!
Note that registered members see fewer ads, and ContentLink is completely disabled once you log in.
If you have any problems with the registration process or your account login, please contact us. If you need to reset your password, click here.
Having a problem logging in? Please visit this page to clear all LQ-related cookies.
Get a virtual cloud desktop with the Linux distro that you want in less than five minutes with Shells! With over 10 pre-installed distros to choose from, the worry-free installation life is here! Whether you are a digital nomad or just looking for flexibility, Shells can put your Linux machine on the device that you want to use.
Exclusive for LQ members, get up to 45% off per month. Click here for more info.
I've tried pipewire with or without rtkit and I find that it makes little difference. I also found that it didnt obey the "our realtime priority" property and always assigns itself the max realtime priority.
Pipewire likes to spew all kinds of warnings about rtkit missing. However, I have seen no observable difference in latency or xruns using rtkit v.s. using the PAM rtprio settings in /etc/security/limits.conf and/or the built in "module-rt" that pipewire uses.
Also rtkit is a Poettering creation which seems to get some people grabbing pitchforks over. I dont care but to some people that matters.
I'll attach the slackbuild I used in case you want to try it. Its just created with "alienBob's slackbuild generator" so it has Eric Hameleers name in the script, but he only provided the slackbuild gen script. Also, this slackbuild fetches the source automatically when you run it, fyi. Also note I had to add the .txt to get LQ to allow me to upload it.
Last edited by 0XBF; 02-14-2022 at 12:45 PM.
Reason: Missed a directory in the limits.conf path
Also rtkit is a Poettering creation which seems to get some people grabbing pitchforks over. I dont care but to some people that matters.
I prefer critisizing an idea not a person, and while I am not in favour of systemd, I not apply that by extension to everything Poettering does.
Quote:
Originally Posted by 0XBF
I'll attach the slackbuild I used in case you want to try it. Its just created with "alienBob's slackbuild generator" so it has Eric Hameleers name in the script, but he only provided the slackbuild gen script. Also, this slackbuild fetches the source automatically when you run it, fyi. Also note I had to add the .txt to get LQ to allow me to upload it.
In my log files a naive build of rtkit complains about not being able to find a user called "rtkit". I had to add one, as well as a group with the same name.
In my log files a naive build of rtkit complains about not being able to find a user called "rtkit". I had to add one, as well as a group with the same name.
Not sure it matters, because pipewire still complains about "RTKit Error: Access denied".
Sorry Lockywolf, it's been a year since I've tested rtkit and it completely slipped my mind that I had to set up an rtkit group and user to get that working. Thanks for the reminder. I managed to dig up the commands I used to add my rtkit user and group.
I'm not sure on the error. I'll check on my pipewire machine after work today and see if that's occurring here. Usually I redirect pipewires spew to /dev/null so I haven't been paying attention for a while.
Okay I poked around with the pipewire and rtkit daemons a little. I did see one warning in the pipewire console about failing to set the nice level to -11.
Code:
[W][57959.598618] mod.rt | [ module-rt.c: 538 set_nice()] could not set nice-level to -11: Permission denied
Perhaps this is the same warning that you get?
I'm not sure why the nice level is having a permission denied issue yet. This "nice -11" level is the default in the pipewire.conf and pipewire-pulse.conf settings. You can copy the relevant conf to your /etc/pipewire/ directory and comment that out to prevent it from trying to set it and the warning will go away.
As to the functionality of rtkit, I can see that it is indeed granting realtime privileges as advertised. However, if you have set up realtime privileges for your user with the PAM limits, then pipewire will prefer this over rtkit. E.g. Here's my '/etc/security/limits.d/rt_audio.conf' file:
Code:
# Real-Time Priority allowed for user in the 'audio' group:
# Use 'unlimited' with care,a misbehaving application can
# lock up your system. Try reserving half your physical memory:
bob - memlock unlimited
bob - rtprio 95
I also have rtkit installed: it will only run by dbus activation when pipewire goes looking for it. With that above rule and rtkit present, pipewire gets its rtprio set, but using FF scheduling:
I set the 77 and 79 levels as a test to see if the pipewire configs are followed.
Next I commented out the PAM limit rules, rebooted, and fired up pipewire again. This time pipewire activates rtkit, and gets rtprio set that way.
Note that rtkit uses RR scheduling, which you see for itself and pipewire when its used:
Looks like its just a matter of setting the nice limit to something lower than -11 to get rid of the warning:
Code:
[W][57959.598618] mod.rt | [ module-rt.c: 538 set_nice()] could not set nice-level to -11: Permission denied
My user limits for example:
Code:
bob - memlock unlimited
bob - rtprio 95
bob - nice -15
I can start the pipewire daemons without any warnings with my -15 limit. The available range is -20 to 19. You can see 'man limits.conf' and 'man sched' to read more about nice levels and realtime scheduling btw.
I have a cpu cgroup called "sysdefault", which gets all the processes that have not been assigned elsewhere.
However, even though for most resources child cgroups inherit everything from the parent cgroup (root in my case), this is not the case for cpu.rt_runtime_us.
Now I have set it up manually, and it seems to work.
Highlights
- Fix a critical bug in pipewire-pulse buffer size handling that made some apps (MuseScore, ... ) stutter.
- Fix a critical bug where devices would not show when the kernel was compiled without VERBOSE_PROCSFS.
- JACK clients will now use lock-quantum by default. This makes sure that all dynamic quantum changes are disabled while a
JACK app is running. The only way to force a quantum chance is through a JACK app or with the metadata.
- Almost all limits on number of ports, clients and nodes are removed.
- A Dummy fallback sink is now automatically created when there are no other sinks. This avoids stalling browsers.
- Sound sharing with Zoom should work better. A new WirePlumber release might be required.
- Many more fixes and improvements.
Highlights
- Fixes a bug in pulse-server that caused cached notifications to play multiple times. (#2142)
- Removed check and warnings to catch leaked listeners on the proxy. This might access invalid memory and cause infinite
loops in older wireplumber.
Highlights
- Fix IEC958 passthrough again.
- Fix pulse-server crashes when playing a sample.
- Support for more a more advanced upmixing algorithm.
- filter-chain now supports arbitrary many ports.
- Fix multichannel support in WINE. (with new WirePlumber).
- Many bugfixes and improvements.
Thanks to Pat for his major improvements to the Pipewire integration in Slackware
Based on his scripts, I've made similar method to enable/disable wireplumber (as a replacement of pipewire-media-session)
with 2 scripts in /usr/sbin/ :
- wireplumber-enable.sh
- wireplumber-disable.sh
+ it's no longer necessary to write your own wireplumber.desktop, it's now included as wireplumber.desktop.sample
The wireplumber SlackBuild doesn't work for me on -current.
Code:
Hmm... Looks like a unified diff to me...
The text leading up to this was:
--------------------------
|https://gitlab.freedesktop.org/pipewire/wireplumber/-/commit/c4c5ca8e2215e5fc295b39af4504c43ed3fe176f
|
|From c4c5ca8e2215e5fc295b39af4504c43ed3fe176f Mon Sep 17 00:00:00 2001
|From: George Kiagiadakis <george.kiagiadakis@collabora.com>
|Date: Mon, 14 Feb 2022 10:38:51 +0200
|Subject: [PATCH] policy-bluetooth: fix string.find crash with nil string
|
|Fixes #193
|---
| src/scripts/policy-bluetooth.lua | 2 +-
| 1 file changed, 1 insertion(+), 1 deletion(-)
|
|diff --git a/src/scripts/policy-bluetooth.lua b/src/scripts/policy-bluetooth.lua
|index 24fbffbb..f8f69a14 100644
|--- a/src/scripts/policy-bluetooth.lua
|+++ b/src/scripts/policy-bluetooth.lua
--------------------------
patching file src/scripts/policy-bluetooth.lua
Using Plan A...
Hunk #1 succeeded at 118.
Hmm... Ignoring the trailing garbage.
done
Hmm... Looks like a unified diff to me...
The text leading up to this was:
--------------------------
|https://gitlab.freedesktop.org/pipewire/wireplumber/-/commit/5f96f69218273573e625475846269b3914cfcecf
|
|From 5f96f69218273573e625475846269b3914cfcecf Mon Sep 17 00:00:00 2001
|From: George Kiagiadakis <george.kiagiadakis@collabora.com>
|Date: Wed, 9 Feb 2022 13:35:13 +0200
|Subject: [PATCH] restore-stream: do not crash if config.properties is nil
|
|Fixes #190
|---
| src/scripts/restore-stream.lua | 1 +
| 1 file changed, 1 insertion(+)
|
|diff --git a/src/scripts/restore-stream.lua b/src/scripts/restore-stream.lua
|index 404eede5..0c17bdd7 100644
|--- a/src/scripts/restore-stream.lua
|+++ b/src/scripts/restore-stream.lua
--------------------------
patching file src/scripts/restore-stream.lua
Using Plan A...
Hunk #1 succeeded at 10.
Hmm... Ignoring the trailing garbage.
done
Hmm... Looks like a unified diff to me...
The text leading up to this was:
--------------------------
|https://gitlab.freedesktop.org/pipewire/wireplumber/-/commit/e429db7e8c266045aee25e153fb2308bd61fe233
|
|From e429db7e8c266045aee25e153fb2308bd61fe233 Mon Sep 17 00:00:00 2001
|From: Julian Bouzas <julian.bouzas@collabora.com>
|Date: Wed, 9 Feb 2022 07:59:59 -0500
|Subject: [PATCH] spa-json: fix va_list APIs for different architectures
|
|The va_list type might not always be a pointer in some architectures, so we
|cannot guarantee it will be modified after using it for a second time in another
|function. This fixes the issue by using macros so args does not get copied, and
|always gets modified when using it more than once.
|---
| lib/wp/spa-json.c | 156 ++++++++++++++++++++++++----------------------
| 1 file changed, 80 insertions(+), 76 deletions(-)
|
|diff --git a/lib/wp/spa-json.c b/lib/wp/spa-json.c
|index f14f395d..c5e59a3e 100644
|--- a/lib/wp/spa-json.c
|+++ b/lib/wp/spa-json.c
--------------------------
patching file lib/wp/spa-json.c
Using Plan A...
Hunk #1 succeeded at 363.
Hunk #2 succeeded at 724.
Hunk #3 succeeded at 825.
Hunk #4 succeeded at 1363.
Hunk #5 succeeded at 1419.
Hmm... Ignoring the trailing garbage.
done
The Meson build system
Version: 0.61.2
Source dir: /tmp/wireplumber-0.4.8
Build dir: /tmp/wireplumber-0.4.8/meson-build
Build type: native build
Project name: wireplumber
Project version: 0.4.8
C compiler for the host machine: ccache cc (gcc 11.2.0 "cc (GCC) 11.2.0")
C linker for the host machine: cc ld.bfd 2.38-slack151
Host machine cpu family: x86_64
Host machine cpu: x86_64
Found pkg-config: /usr/bin/pkg-config (0.29.2)
Run-time dependency glib-2.0 found: YES 2.70.4
Run-time dependency gobject-2.0 found: YES 2.70.4
Run-time dependency gmodule-2.0 found: YES 2.70.4
Run-time dependency gio-2.0 found: YES 2.70.4
Run-time dependency gio-unix-2.0 found: YES 2.70.4
Run-time dependency libspa-0.2 found: YES 0.2
Run-time dependency libpipewire-0.3 found: YES 0.3.47
Library m found: YES
Run-time dependency threads found: YES
Found CMake: /usr/bin/cmake (3.22.2)
Run-time dependency lua-5.4 found: NO (tried pkgconfig and cmake)
Run-time dependency lua5.4 found: NO (tried pkgconfig and cmake)
Run-time dependency lua54 found: NO (tried pkgconfig and cmake)
Run-time dependency lua-5.3 found: YES $VERSION
Dependency systemd skipped: feature systemd disabled
Dependency libsystemd skipped: feature systemd disabled
Run-time dependency libelogind found: YES 246.10
Compiler for C supports arguments -fvisibility=hidden: YES
Compiler for C supports arguments -Wsuggest-attribute=format: YES
Compiler for C supports arguments -Wsign-compare: YES
Compiler for C supports arguments -Wpointer-arith: YES
Compiler for C supports arguments -Wpointer-sign: YES
Compiler for C supports arguments -Wformat: YES
Compiler for C supports arguments -Wformat-security: YES
Compiler for C supports arguments -Wimplicit-fallthrough: YES
Compiler for C supports arguments -Wmissing-braces: YES
Compiler for C supports arguments -Wtype-limits: YES
Compiler for C supports arguments -Wvariadic-macros: YES
Compiler for C supports arguments -Wno-missing-field-initializers: YES
Compiler for C supports arguments -Wno-unused-parameter: YES
Compiler for C supports arguments -Wno-pedantic: YES
Compiler for C supports arguments -Wold-style-declaration: YES
Compiler for C supports arguments -Wunused-result: YES
Program glib-mkenums found: YES (/usr/bin/glib-mkenums)
Program glib-mkenums found: YES (/usr/bin/glib-mkenums)
Configuring wpversion.h using configuration
Found pkg-config: /usr/bin/pkg-config (0.29.2)
Program glib-compile-resources found: YES (/usr/bin/glib-compile-resources)
Program python3 found: NO (disabled by: doc )
Program python3 found: NO (disabled by: introspection )
Program sphinx-build skipped: feature doc disabled
Program g-ir-scanner skipped: feature introspection disabled
Program gdbus-codegen found: YES (/usr/bin/gdbus-codegen)
Program glib-mkenums found: YES (/usr/bin/glib-mkenums)
Program glib-mkenums found: YES (/usr/bin/glib-mkenums)
Program glib-mkenums found: YES (/usr/bin/glib-mkenums)
Program glib-mkenums found: YES (/usr/bin/glib-mkenums)
Program glib-compile-resources found: YES (/usr/bin/glib-compile-resources)
Program valgrind found: NO
Configuring wp-uninstalled.sh.in using configuration
Build targets in project: 55
wireplumber 0.4.8
Lua version : $VERSION (system)
systemd conf data : NO
libsystemd : NO
libelogind : YES
For documentation
Python 3 Sphinx related modules: NO
Doxygen : NO
sphinx-build : NO
For introspection
Python 3 lxml module : NO
Doxygen : NO
g-ir-scanner : NO
User defined options
bindir : /usr/bin
datadir : /usr/share
includedir : /usr/include
libdir : lib64
libexecdir : /usr/libexec
prefix : /usr
sbindir : /usr/sbin
doc : disabled
introspection : disabled
system-lua : true
systemd : disabled
systemd-user-service : false
Found ninja-1.10.2 at /usr/bin/ninja
[46/146] Compiling C object lib/wplua/libwplua-0.4.a.p/boxed.c.o
../lib/wplua/boxed.c: In function ‘_wplua_init_gboxed’:
../lib/wplua/boxed.c:69:3: warning: implicit declaration of function ‘luaL_setfuncs’; did you mean ‘lua_setfenv’? [-Wimplicit-function-declaration]
69 | luaL_setfuncs (L, gboxed_meta, 0);
| ^~~~~~~~~~~~~
| lua_setfenv
[47/146] Compiling C object lib/wplua/libwplua-0.4.a.p/object.c.o
../lib/wplua/object.c: In function ‘_wplua_init_gobject’:
../lib/wplua/object.c:207:3: warning: implicit declaration of function ‘luaL_setfuncs’; did you mean ‘lua_setfenv’? [-Wimplicit-function-declaration]
207 | luaL_setfuncs (L, gobject_meta, 0);
| ^~~~~~~~~~~~~
| lua_setfenv
[48/146] Compiling C object lib/wplua/libwplua-0.4.a.p/userdata.c.o
../lib/wplua/userdata.c: In function ‘_wplua_isgvalue_userdata’:
../lib/wplua/userdata.c:29:7: warning: implicit declaration of function ‘lua_rawlen’; did you mean ‘lua_rawset’? [-Wimplicit-function-declaration]
29 | if (lua_rawlen (L, idx) != sizeof (GValue))
| ^~~~~~~~~~
| lua_rawset
[51/146] Compiling C object lib/wplua/libwplua-0.4.a.p/closure.c.o
FAILED: lib/wplua/libwplua-0.4.a.p/closure.c.o
ccache cc -Ilib/wplua/libwplua-0.4.a.p -Ilib/wplua -I../lib/wplua -Ilib -I../lib -Ilib/wp -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -I/usr/include/libmount -I/usr/include/blkid '-I/usr/include/lua$MAJVER' -fdiagnostics-color=always -D_FILE_OFFSET_BITS=64 -Wall -Winvalid-pch -O2 -g -DGLIB_VERSION_MIN_REQUIRED=GLIB_VERSION_2_62 -DGLIB_VERSION_MAX_ALLOWED=GLIB_VERSION_2_62 -fvisibility=hidden -Wsuggest-attribute=format -Wsign-compare -Wpointer-arith -Wpointer-sign -Wformat -Wformat-security -Wimplicit-fallthrough -Wmissing-braces -Wtype-limits -Wvariadic-macros -Wno-missing-field-initializers -Wno-unused-parameter -Wno-pedantic -Wold-style-declaration -Wunused-result -O2 -fPIC -fPIC -pthread -D_GNU_SOURCE -DG_LOG_USE_STRUCTURED '-DG_LOG_DOMAIN="wplua"' -MD -MQ lib/wplua/libwplua-0.4.a.p/closure.c.o -MF lib/wplua/libwplua-0.4.a.p/closure.c.o.d -o lib/wplua/libwplua-0.4.a.p/closure.c.o -c ../lib/wplua/closure.c
../lib/wplua/closure.c: In function ‘_wplua_closure_marshal’:
../lib/wplua/closure.c:98:14: error: ‘LUA_OK’ undeclared (first use in this function); did you mean ‘LUA_QL’?
98 | if (res == LUA_OK && return_value) {
| ^~~~~~
| LUA_QL
../lib/wplua/closure.c:98:14: note: each undeclared identifier is reported only once for each function it appears in
[52/146] Compiling C object lib/wplua/libwplua-0.4.a.p/wplua.c.o
FAILED: lib/wplua/libwplua-0.4.a.p/wplua.c.o
ccache cc -Ilib/wplua/libwplua-0.4.a.p -Ilib/wplua -I../lib/wplua -Ilib -I../lib -Ilib/wp -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -I/usr/include/libmount -I/usr/include/blkid '-I/usr/include/lua$MAJVER' -fdiagnostics-color=always -D_FILE_OFFSET_BITS=64 -Wall -Winvalid-pch -O2 -g -DGLIB_VERSION_MIN_REQUIRED=GLIB_VERSION_2_62 -DGLIB_VERSION_MAX_ALLOWED=GLIB_VERSION_2_62 -fvisibility=hidden -Wsuggest-attribute=format -Wsign-compare -Wpointer-arith -Wpointer-sign -Wformat -Wformat-security -Wimplicit-fallthrough -Wmissing-braces -Wtype-limits -Wvariadic-macros -Wno-missing-field-initializers -Wno-unused-parameter -Wno-pedantic -Wold-style-declaration -Wunused-result -O2 -fPIC -fPIC -pthread -D_GNU_SOURCE -DG_LOG_USE_STRUCTURED '-DG_LOG_DOMAIN="wplua"' -MD -MQ lib/wplua/libwplua-0.4.a.p/wplua.c.o -MF lib/wplua/libwplua-0.4.a.p/wplua.c.o.d -o lib/wplua/libwplua-0.4.a.p/wplua.c.o -c ../lib/wplua/wplua.c
../lib/wplua/wplua.c: In function ‘_wplua_openlibs’:
../lib/wplua/wplua.c:33:6: error: ‘LUA_UTF8LIBNAME’ undeclared (first use in this function); did you mean ‘LUA_STRLIBNAME’?
33 | {LUA_UTF8LIBNAME, luaopen_utf8},
| ^~~~~~~~~~~~~~~
| LUA_STRLIBNAME
../lib/wplua/wplua.c:33:6: note: each undeclared identifier is reported only once for each function it appears in
../lib/wplua/wplua.c:33:23: error: ‘luaopen_utf8’ undeclared (first use in this function); did you mean ‘luaopen_math’?
33 | {LUA_UTF8LIBNAME, luaopen_utf8},
| ^~~~~~~~~~~~
| luaopen_math
../lib/wplua/wplua.c:40:5: warning: implicit declaration of function ‘luaL_requiref’; did you mean ‘luaL_unref’? [-Wimplicit-function-declaration]
40 | luaL_requiref (L, lib->name, lib->func, 1);
| ^~~~~~~~~~~~~
| luaL_unref
../lib/wplua/wplua.c: In function ‘_wplua_errhandler’:
../lib/wplua/wplua.c:48:3: warning: implicit declaration of function ‘luaL_traceback’ [-Wimplicit-function-declaration]
48 | luaL_traceback (L, L, NULL, 1);
| ^~~~~~~~~~~~~~
../lib/wplua/wplua.c: In function ‘_wplua_pcall’:
../lib/wplua/wplua.c:58:13: error: ‘LUA_OK’ undeclared (first use in this function); did you mean ‘LUA_QL’?
58 | int ret = LUA_OK;
| ^~~~~~
| LUA_QL
In file included from ../lib/wplua/wplua.h:14,
from ../lib/wplua/wplua.c:9:
../lib/wplua/wplua.c: In function ‘_wplua_load_buffer’:
../lib/wplua/wplua.c:187:7: error: void value not ignored as it ought to be
187 | if (lua_getglobal (L, "sandbox") == LUA_TFUNCTION)
| ^~~~~~~~~~~~~
../lib/wplua/wplua.c:200:14: error: ‘LUA_OK’ undeclared (first use in this function); did you mean ‘LUA_QL’?
200 | if (ret != LUA_OK) {
| ^~~~~~
| LUA_QL
../lib/wplua/wplua.c:208:3: warning: implicit declaration of function ‘lua_rotate’ [-Wimplicit-function-declaration]
208 | lua_rotate (L, args_top, -nargs);
| ^~~~~~~~~~
[54/146] Compiling C object lib/wplua/libwplua-0.4.a.p/value.c.o
../lib/wplua/value.c: In function ‘wplua_table_to_properties’:
../lib/wplua/value.c:18:15: warning: implicit declaration of function ‘lua_absindex’ [-Wimplicit-function-declaration]
18 | int table = lua_absindex (L, idx);
| ^~~~~~~~~~~~
../lib/wplua/value.c:23:11: warning: implicit declaration of function ‘luaL_tolstring’; did you mean ‘lua_tolstring’? [-Wimplicit-function-declaration]
23 | key = luaL_tolstring (L, -2, NULL);
| ^~~~~~~~~~~~~~
| lua_tolstring
../lib/wplua/value.c:23:9: warning: assignment to ‘const gchar *’ {aka ‘const char *’} from ‘int’ makes pointer from integer without a cast [-Wint-conversion]
23 | key = luaL_tolstring (L, -2, NULL);
| ^
../lib/wplua/value.c:24:11: warning: assignment to ‘const gchar *’ {aka ‘const char *’} from ‘int’ makes pointer from integer without a cast [-Wint-conversion]
24 | value = luaL_tolstring (L, -2, NULL);
| ^
../lib/wplua/value.c: In function ‘wplua_lua_to_gvariant’:
../lib/wplua/value.c:65:9: warning: implicit declaration of function ‘lua_isinteger’; did you mean ‘lua_tointeger’? [-Wimplicit-function-declaration]
65 | if (lua_isinteger (L, idx))
| ^~~~~~~~~~~~~
| lua_tointeger
../lib/wplua/value.c: In function ‘wplua_gvariant_to_lua’:
../lib/wplua/value.c:140:27: warning: implicit declaration of function ‘lua_tointegerx’; did you mean ‘lua_tointeger’? [-Wimplicit-function-declaration]
140 | lua_Integer num = lua_tointegerx (L, -1, &isnum);
| ^~~~~~~~~~~~~~
| lua_tointeger
../lib/wplua/value.c:158:7: warning: implicit declaration of function ‘lua_seti’; did you mean ‘luaL_setn’? [-Wimplicit-function-declaration]
158 | lua_seti (L, -2, i + 1);
| ^~~~~~~~
| luaL_setn
[55/146] Compiling C object modules/libwireplumber-module-metadata.so.p/module-metadata.c.o
ninja: build stopped: subcommand failed.
Location: The Glorious People's Republic of Austin
Posts: 178
Rep:
I just discovered this while digging into why sound was so terrible on my bluetooth headset, but pipewire needs to be compiled with libfdk-aac installed in order to support the AAC codec. Stock Slackware has just the SBC Bluetooth audio codec included.
The libfdk-aac library available from SBo is auto-detected when rebuilding from the pipewire.SlackBuild script.
LinuxQuestions.org is looking for people interested in writing
Editorials, Articles, Reviews, and more. If you'd like to contribute
content, let us know.