PulseAudio in Slackware

This is a work in progress that I later plan to post on http://docs.slackware.com/. Look in the comments section for changelog.

Today, 2015-05-12, while I was forced to work as a secretary during a slow season, I had nothing to do, so I remembered this post on LQ and decided to write some sort of a HOWTO for PulseAudio. I do not possess extensive knowledge about PulseAudio, nor do I even use it on a regular basis, but I do have some experience with it and want to provide at least a base that can be later extended by other members of Slackware community. This article was written by memory (plus some googling), so I’ll need to improve it later.


PulseAudio

PulseAudio is a sound server running on top of some other sound system, usually ALSA. The original purpose was to get software mixing and transmit sound over network. Now PulseAudio is more than that, but it came at cost of increased complexity, which is not very good, considering the Linux sound system is already overly complex. But despite that the sound server is widely used by most Linux distributions. Slackware is not one of them because of its KISS principle and the fact that ALSA does its job fairly well in majority of cases. However, there are some programs (cough, Skype v4.3+, cough) that require PulseAudio in order to have working sound. There is a project called apulse that tries to emulate PulseAudio, but it doesn’t work for everyone. This article will describe how to install and use PulseAudio in case you have/want to use it.

Installation

SlackBuilds.org is a great place to obtain packages missing on the stock system. Luckily for us, it has PulseAudio. It has very few dependencies (PA itself, at least), but there might be a few caveats.

Besides PulseAudio itself, you’ll need alsa-plugins in order to get sound from non-pulse applications. Also, pavucontrol is highly recommended, because PA’s config files are pain.

You can build the packages either directly using SBo, or using sbotools, or using sbopkg. The manual method is more tedious, but you have more control. sbotools can resolve dependencies and are able to build compat32 packages on x86_64 multilib systems. sbopkg gives you more control than sbotools, but requires more intervention. It doesn’t matter which method you use, it’s down to a personal preference.

You can also use pre-compiled packages in order to install all necessary applications, but it’s so trivial I won’t cover it here. You can use, for example, Slacky repo.

It’s worth mentioning that if you need PulseAudio and/or multilib for Skype only, there’s a package by zerouno with statically linked PA and necessary libraries that doesn’t require you to install neither PA, nor multilib (for x86_64 systems).

Installation on a x86 or pure x86_64 system

This part used to be as easy as “install speex and json-c, then pulseaudio, then alsa-plugins”. Unfortunately, with the realease of speex-1.2rc2 there’s a bug preventing alsa-plugins to build correctly even if you disable speex support. The solution for the time being is to add -DHAVE_STDINT_H to apulse-plugins’ CFLAGS by editing the SlackBuild.

Other than that the installation part is pretty straightforward and SlackBuilds work perfectly.

For pavucontrol you need to resolve more dependencies, so sbotools or queue files for sbopkg are recommended, because building everything by hand is very tedious.

Installation on a x86_64 multilib system

Here I’ll assume you know how to set up a multilib system and how to build 32bit packages on it. In case you don’t, read this article carefully.

If you want 32bit applications (like Skype) on a multilib system to have sound through PulseAudio, you’ll have to build compat32 package. And this is where things get complicated and manual intervention is needed.

First, install 64bit package of PulseAudio as described above.

Second, you need to compile 32bit package. Unfortunately, you can’t use sbotools to do that for you because of a few errors that require you to edit SlackBuild for PA. You can compile speex and json-c as compat32 packages without any problem, but PulseAudio for some reason doesn’t want to compile with 32bit version of libxcb and libcap, so, if it fails to compile as is, you’ll need to edit SlackBuild to add --disable-x11 --without-cap for it to build successfully. It doesn’t matter here, because all we are after is 32bit libpulse. Next, for some reason even after importing 32dev.sh PA still tries to use some 64bit libraries. So you’ll need to start SlackBuild like this:

PKG_CONFIG_PATH=/usr/lib/pkgconfig PKG_CONFIR_LIBDIR=/usr/lib/pkgconfig LDFLAGS="-L/usr/lib" ./pulseaudio.SlackBuild

This will force PA to use the correct libraries and allow it to compile. Make compat32 package and install it. You don’t need 32bit alsa-plugins or pavucontrol.

Using PulseAudio

Actually, it’s difficult to not use it, because it just keeps spawning. If you want to use PulseAudio exclusively as you sound server, then that’s fine. If not, I’ll cover what to do a bit later.

PulseAudio as the main sound system

All you need to do now it just create /etc/asound.conf (or ~/.asoundrc) with this content:

pcm.pulse {
    type pulse
}

ctl.pulse {
    type pulse
}

pcm.!default {
    type pulse
}
ctl.!default {
    type pulse
}

That’ll make ALSA-only applications play sound through PA. The basic configuration of PulseAudio is done, because it tries to be smart and doesn’t require much configuration if you want to use it.

PulseAudio as an additional sound system

It is possible to have PulseAudio not use ALSA exclusively for itself. For that you’ll need to comment out all strings about udev in default.pa config file, uncomment the ones with ALSA and use device=dmix. Now pulse-only applications can use PulseAudio, while the rest of the system will continue to use ALSA.

If you are annoyed by PA constantly spawning, define autospawn = no in client.pa config file. Then you’ll have to start PulseAudio manually each time you want sound from a pulse-only application.

The downside of this approach is that you are limited to only one device at a time, while udev allows PulseAudio to use all sound devices it finds. You’ll have to configure your devices manually through ALSA’s asoundrc config file.

In case of sound capturing, you have two options. First, use device=dsnoop. You can read about dsnoop here. Second, you specify your actual capture device for PA to use exclusively, like device=hw:2,0.

When using PA as an additional sound system, you’ll need to choose it as an output sound device in applications you want to use PA, while other will use the default sound system.

Starting PulseAudio

XDG-compliant DEs will start PulseAudio automatically thanks to /etc/xdg/autostart/pulseaudio{,-kde}.desktop files.

In case you aren’t using those, you can use start-pulseaudio-x11 command. Just add it to your DE/WM autostart. Plain pulseaudio --start will also work. To stop PA use pulseaudio --kill command. Be warned, that if you didn’t disable autospawning, it’ll respawn as soon as some application requires the sound.

PulseAudio in Xfce

If you use PA as the default sound system, everything will work just fine, except the multimedia keys. For them to work correctly, install xfce4-volumed-pulse. For the time being, the autostart .desktop file is located in the wrong place: /etc/xfce/xdg/autostart/xfce4-volumed-pulse.desktop. Move it to /etc/xdg/autostart/ for it to start automatically. For the mixer to work, choose your default sound card and ‘Master’ channel.

PulseAudio in KDE

KDE uses GStreamer to play sound. ALSA applications will work fine, as they’ll be using asoundrc config file. Phonon/GStreamer applications may have some problems.

While start-pulseautio-kde.desktop file re-routes the sound from Phonon to PA, the PA server is not set as the default device. You’ll need to move it to the top everywhere in the Phonon settings.

Gstreamer applications will try to use ALSA, which re-routes the sound to PA, but in some rare cases it may not work. For them to use PA directly, you’ll need to rebuild gst-plugins-good package. Since this package is provided by the system, you can get the sources and the SlackBuild from the Slackware tree.

PulseAudio mixers

The main mixer for PulseAudio is pavucontrol, although it doesn’t provide neither tray icon/applet, nor keyboard shortcuts. For that you’ll have to use other mixers.

In case you are running PA as your main sound system and set up asoundrc as I described above, any ALSA mixer will do just fine. Just make sure it’s configured to use the default (or “pulse”, or your default output sound card) device and “Master” channel.

If you like CLI commands, there’s ponymix. Actually, it does the same thing you can achieve with pactl, but you can never have too much pony in Linux.

Speaking of pactl. These are commands to define your own keybindings, e. g. in ~/.fluxbox/keys:

pactl set-sink-volume 0 +5% #raise the main sink's volume by 5%
pactl -- set-sink-volume 0 -5% #lower the main sink's volume by 5%; notice the "--"
pactl sit-sink-mute 0 toggle #mute/unmute the main sink

For more commands and options see man pactl.

By the way, by default PA also installs bash completion script, which may come in very handy when using pactl, so bash-completion package from extra set is recommended.

fsLeg

It turned out, that I need a full featured website much less than a simple blog. I don’t want to have a blog on Tumblr, but I do like their implementation of it, so I went with Chyrp, which is pretty close. But then Chyrp died, so I moved to Hugo. The blog is NSFW, as I might occasionally post some pr0n and other disturbing stuff.

Tags
Archives