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 also use Enlightenment from time to time and can confirm that "pipewire-enable.sh" works great for KDE and Xfce, but doesn't work properly with e25. It still loads pulse but in my case unless a few Steam Games like Deus EX: Revision start working properly with Pipewire, E's use of pulse is currently an asset. I'll be glad once the Linux Audio system finally settles in with maturity. I was happier with pure ALSA, but those days are obviously gone with very few exceptions.
I am still using pure ALSA on slackware 15.0. Everything works.
I am still using pure ALSA on slackware 15.0. Everything works.
Thanks. I understand that Pure ALSA can still work but since I haven't done any professional recording in 5 years, I no longer regularly need the extreme low latency that ALSA allows, and since it is rather a lot of work if one updates at all regularly, the Cost/Benefit has shifted for me. Pipewire is a substantial improvement over Pulseaudio and is good enough for my general use. I have a bootable USB stick with Slackware Studio on it which is static and Pure ALSA for deeper dives and more important projects.
I fervently wish ALSA, especially since it is still needed in the background, was never just dumped in terms of direct support, but since that is highly unlikely to ever return, I figure at some point Pipewire or some other system will actually be usable and configurable on a par with ALSA and become ubiquitous, making audio easy for casual users yet also highly configurable for pros and audiophiles. We seem to be slowly getting there.
Marav you forgot to mention to us that those who use current and built wireplumber more than a week ago should rebuild wireplumber because you added a patch and without that patch there are some sound problems for example in telegram desktop and some games that use openal.
Highlights
- The 44.1KHz samplerate was removed again from the defaults, it caused all kinds of problems with various hardware.
- The ALSA plugin should now be able to deal with unsupported samplerates and fall back to the nearest supported one.
- The rlimits performance tuning wiki page was updated. Please check you limits.conf file, the version on the wiki
used to give all processes a -19 nice level instead of just the pipewire daemon.
- The audioconvert plugin was rewritten to be more maintainable and faster. It also gained support for control ports and
dithering with optional noise shaping.
- An impossible buffering situation is avoided in pulse-server that would cause some applications (sunshine, ...) to stutter.
Highlights
- Some critical bugs in the new audioconvert were fixed. The old adapter had internal buffering that was
abused in some places.
- The bluetooth sources were rewritten using a ringbuffer to make them more reliable to jitter and remove
old audioconvert behaviour.
- Many improvements to the audio converter.
- Native DSD128 and up is now supported by pw-dsdplay.
Highlights
Fix some more critical bugs in the new audioconvert and the queueing in pw-stream that causes stuttering and hickups.
HFP hardware volumes are now saved and restored.
Format conversions and mixing was improved.
Small bug fixes and improvements.
Highlights
A critical bug that could crash JACK apps was fixed.
Some more regressions in audiomixer were fixed. This should fix crackling and stuttering in some cases as well as some channel mapping regressions.
A bug in the alsa plugin was fixed that could cause stuttering in VMs.
Bluetooth sources should have improved latency and rate control.
Many more bugfixes and improvements.
When I use my headphones for zoom calls the microphone does not work. The regular speakers and video cam microphone did work. The kde audio controls don't seem to make any difference. I switched from Slackware-current to Slackware-15.0 shortly after release. I believe I have a standard Slackware, with some additions. In particular, I compiled ffmpeg with many options, including jack. I see there is pipewire-native-jack (0.3.44) on Slackbuilds.org. Would this help? Programs that require jack would have to be recompiled, probably just jack-rack.
My problem is the headphone microphone not working. I ordered a Logitech H540 USB headset, which I hope will work when it arrives shortly.
Various system info:
Quote:
$ ls /var/log/packages/ | grep jack
jack-1.9.19-x86_64-1ponce
jack-rack-1.4.7-x86_64-4ponce
Quote:
$ cat /etc/asound.conf
# ALSA system-wide config file
# By default, redirect to PulseAudio:
pcm.default pulse
ctl.default pulse
core.daemon = true # listening for socket connections
core.name = pipewire-0 # core name and socket name
## Properties for the DSP configuration.
#default.clock.rate = 48000
#default.clock.quantum = 1024
#default.clock.min-quantum = 32
#default.clock.max-quantum = 8192
#default.video.width = 640
#default.video.height = 480
#default.video.rate.num = 25
#default.video.rate.denom = 1
#
# These overrides are only applied when running in a vm.
vm.overrides = {
default.clock.min-quantum = 1024
}
}
context.spa-libs = {
#<factory-name regex> = <library-name>
#
# Used to find spa factory names. It maps an spa factory name
# regular expression to a library name that should contain
# that factory.
#
audio.convert.* = audioconvert/libspa-audioconvert
api.alsa.* = alsa/libspa-alsa
api.v4l2.* = v4l2/libspa-v4l2
api.libcamera.* = libcamera/libspa-libcamera
api.bluez5.* = bluez5/libspa-bluez5
api.vulkan.* = vulkan/libspa-vulkan
api.jack.* = jack/libspa-jack
support.* = support/libspa-support
#videotestsrc = videotestsrc/libspa-videotestsrc
#audiotestsrc = audiotestsrc/libspa-audiotestsrc
}
context.modules = [
#{ name = <module-name>
# [ args = { <key> = <value> ... } ]
# [ flags = [ [ ifexists ] [ nofail ] ]
#}
#
# Loads a module with the given parameters.
# If ifexists is given, the module is ignored when it is not found.
# If nofail is given, module initialization failures are ignored.
#
# Uses RTKit to boost the data thread priority.
{ name = libpipewire-module-rtkit
args = {
#nice.level = -11
#rt.prio = 88
#rt.time.soft = 200000
#rt.time.hard = 200000
}
flags = [ ifexists nofail ]
}
# The native communication protocol.
{ name = libpipewire-module-protocol-native }
# The profile module. Allows application to access profiler
# and performance data. It provides an interface that is used
# by pw-top and pw-profiler.
{ name = libpipewire-module-profiler }
# Allows applications to create metadata objects. It creates
# a factory for Metadata objects.
{ name = libpipewire-module-metadata }
# Creates a factory for making devices that run in the
# context of the PipeWire server.
{ name = libpipewire-module-spa-device-factory }
# Creates a factory for making nodes that run in the
# context of the PipeWire server.
{ name = libpipewire-module-spa-node-factory }
# Allows creating nodes that run in the context of the
# client. Is used by all clients that want to provide
# data to PipeWire.
{ name = libpipewire-module-client-node }
# Allows creating devices that run in the context of the
# client. Is used by the session manager.
{ name = libpipewire-module-client-device }
# The portal module monitors the PID of the portal process
# and tags connections with the same PID as portal
# connections.
{ name = libpipewire-module-portal
flags = [ ifexists nofail ]
}
# The access module can perform access checks and block
# new clients.
{ name = libpipewire-module-access
args = {
# access.allowed to list an array of paths of allowed
# apps.
#access.allowed = [
# /usr/bin/pipewire-media-session
#]
# An array of rejected paths.
#access.rejected = [ ]
# An array of paths with restricted access.
#access.restricted = [ ]
# Anything not in the above lists gets assigned the
# access.force permission.
#access.force = flatpak
}
}
# Makes a factory for wrapping nodes in an adapter with a
# converter and resampler.
{ name = libpipewire-module-adapter }
# Makes a factory for creating links between ports.
{ name = libpipewire-module-link-factory }
# Provides factories to make session manager objects.
{ name = libpipewire-module-session-manager }
]
# A default dummy driver. This handles nodes marked with the "node.always-driver"
# property when no other driver is currently active. JACK clients need this.
{ factory = spa-node-factory
args = {
factory.name = support.node.driver
node.name = Dummy-Driver
priority.driver = 8000
}
}
# This creates a new Source node. It will have input ports
# that you can link, to provide audio for this source.
#{ factory = adapter
# args = {
# factory.name = support.null-audio-sink
# node.name = "my-mic"
# node.description = "Microphone"
# media.class = "Audio/Source/Virtual"
# audio.position = "FL,FR"
# }
#}
# This creates a single PCM source device for the given
# alsa device path hw:0. You can change source to sink
# to make a sink in the same way.
#{ factory = adapter
# args = {
# factory.name = api.alsa.pcm.source
# node.name = "alsa-source"
# node.description = "PCM Source"
# media.class = "Audio/Source"
# api.alsa.path = "hw:0"
# #api.alsa.period-size = 1024
# #api.alsa.headroom = 0
# #api.alsa.disable-mmap = false
# #api.alsa.disable-batch = false
# #audio.format = "S16LE"
# #audio.rate = 48000
# #audio.channels = 2
# #audio.position = "FL,FR"
# }
#}
]
context.exec = [
#{ path = <program-name> [ args = "<arguments>" ] }
#
# Execute the given program with arguments.
#
# You can optionally start the session manager here,
# but it is better to start it as a systemd service.
# Run the session manager with -h for options.
#
#{ path = "/usr/bin/pipewire-media-session" args = "" }
#
# You can optionally start the pulseaudio-server here as well
# but it is better to start it as a systemd service.
# It can be interesting to start another daemon here that listens
# on another address with the -a option (eg. -a tcp:4713).
#
#{ path = "/usr/bin/pipewire" args = "-c pipewire-pulse.conf" }
When I use my headphones for zoom calls the microphone does not work. The regular speakers and video cam microphone did work. The kde audio controls don't seem to make any difference.
And why did you installed JACK? For zoom calls? Just because?
Anyway, the PipeWire is vastly superior to PulseAudio and there is no need for JACK just for zoom calls.
Last edited by LuckyCyborg; 07-29-2022 at 11:44 AM.
And why did you installed JACK? For zoom calls? Just because?
Anyway, the PipeWire is vastly superior to PulseAudio and there is no need for JACK just for zoom calls.
Jack was on the list of possible includes in ffmpeg and, I think, some other program. I wanted to have the codecs and features if I needed them. I was playing around with OBS Studio at the time. I was not able to find information on what exactly one needs for a reasonably complete audio. Using sbopkg .sqf files makes it fairly easy to make a list of packages to install -- much easier than finding out the use case for each package. Perhaps I should "removepkg jack jack-rack"
I infer that you see the asound.conf file reference to "Pulse." I have no idea whether PipeWire is better than PulseAudio, but PipeWire is what comes with the system and it is what I think I am using. I have the "Built-in AudioPro" (selected) and "Built-in AudioPro2" in my devices list under the volume icon.
There is a lot of discussion about setting up pipewire on this thread. I think that somehow the headset microphone is omitted when audio is switched to the headset.
Jack was on the list of possible includes in ffmpeg and, I think, some other program. I wanted to have the codecs and features if I needed them.
The JACK is NOT a codec, but a damn audio server, and you cannot run both JACK and PipeWire.
Anyway, PipeWire is realtime and it's in fact the JACK successor, even it got better PulseAudio replacement features.
In other hand, the PipeWire has NO replacement for the JACK server, like it haves for the PulseAudio. You need to preload a library and to build PipeWire in a special mode.
I for one I recommend you to remove all those JACK thingies if all you need is zoom and ffmpeg. It's senseless complication what you do.
Quote:
Originally Posted by kevmccor
There is a lot of discussion about setting up pipewire on this thread.
Yes, because it's from the times when PipeWire was dropped from orbit in Slackware, with no setup at all, and just as a dependency of Plasma5. We tried to make it work, and seems like we succeeded.
Last edited by LuckyCyborg; 07-29-2022 at 01:11 PM.
LinuxQuestions.org is looking for people interested in writing
Editorials, Articles, Reviews, and more. If you'd like to contribute
content, let us know.