Difference between revisions of "PulseAudio"

From ArchWiki
Jump to: navigation, search
Line 195: Line 195:
You need to build audacious-plugins from [[ABS]] and edit the PKGBUILD to remove the '--disable-pulse' option.
You need to build audacious-plugins from [[ABS]] and edit the PKGBUILD to remove the '--disable-pulse' option in the build() section.

Revision as of 20:46, 2 November 2010

This template has only maintenance purposes. For linking to local translations please use interlanguage links, see Help:i18n#Interlanguage links.

Local languages: Català – Dansk – English – Español – Esperanto – Hrvatski – Indonesia – Italiano – Lietuviškai – Magyar – Nederlands – Norsk Bokmål – Polski – Português – Slovenský – Česky – Ελληνικά – Български – Русский – Српски – Українська – עברית – العربية – ไทย – 日本語 – 正體中文 – 简体中文 – 한국어

External languages (all articles in these languages should be moved to the external wiki): Deutsch – Français – Română – Suomi – Svenska – Tiếng Việt – Türkçe – فارسی

PulseAudio is a sound server for POSIX and Win32 systems. It allows to have multiple programs playing sound at one machine, among even more advanced features. PulseAudio is a drop-in replacement for the enlightened sound daemon (ESD). This article focuses on the more basic PulseAudio features.

Please note, PulseAudio is not a drop-in replacement for aRts. If you use KDE 3, it is not currently possible to use PulseAudio.


All packages are from the community repository so you need to have it enabled. Then, to install PulseAudio:

# pacman -S pulseaudio

Optionally you can install some GTK front-ends for PulseAudio:

# pacman -S paprefs pavucontrol pavumeter


PulseAudio can be started with:

$ pulseaudio --start

Or if you use X11:

$ start-pulseaudio-x11

PulseAudio can be stopped with:

$ pulseaudio --kill

Note that in the case of certain X11 environments, PulseAudio will be started on login. See the section on Desktop Environments for details.

Backend Configuration


For the applications that do not support PulseAudio and support ALSA it is recommended to install the PulseAudio plugin for alsalibs. This plugin is available in the alsa-plugins package.

# pacman -S alsa-plugins

If you are on Arch x86_64 and want to have sound for 32 bit programs (like Wine), make sure to install lib32-pulseaudio and lib32-alsa-plugins as well.

In order for ALSA to use PulseAudio you need to edit (or create) Template:Filename (system wide settings) (recommended) or Template:Filename (settings on a per user basis) to have these lines: Template:File

The package pulseaudio-alsa contains a suitable asound.conf file.

If you omit the last two groups, Pulseaudio will not be used by default. You will then need to change the ALSA device to "pulse" in the applications that you use to make it work.

To prevent applications from using ALSA's OSS emulation and bypassing Pulseaudio (thereby preventing other applications from playing sound), remove the Template:Codeline module by executing:

# rmmod snd-pcm-oss

Afterwards, blacklist the module by adding Template:Codeline to MODULES in Template:Filename.


There are multiple ways of making OSS-only programs play to PulseAudio:

padsp wrapper

If you have a program that uses OSS you can make it work with PulseAudio by starting it with padsp:

$ padsp OSSprogram

A few examples:

$ padsp aumix
$ padsp sox foo.wav -t ossdsp /dev/dsp

If you prefer you can rename the program OSSprogram-real and replace it with a script like this: Template:File


This method is more elaborate, but will allow you to avoid having to use a wrapper script.

You will need to add Template:Codeline to the kernel parameters (/boot/grub/menu.lst) and also blacklist Template:Codeline and Template:Codeline in Template:Filename.

Install osspd (e.g. ossp or ossp-git from the AUR) and start it using:

/etc/rc.d/osspd start

Afterwards, add it to DAEMONS in rc.conf.


To make GStreamer use PulseAudio, you will need to install the gstreamer0.10-pulse package:

# pacman -S gstreamer0.10-pulse

Then, execute Template:Filename (part of gnome-media package) and select PulseAudio Sound Server in both Audio Input and Output. Alternatively, this can be done by setting the gconf variables Template:Codeline to pulsesink and Template:Codeline to pulsesrc:

 $ gconftool-2 -t string --set /system/gstreamer/0.10/default/audiosink pulsesink
 $ gconftool-2 -t string --set /system/gstreamer/0.10/default/audiosrc pulsesrc

Some applications (like Rhythmbox) ignore the audiosink property, but rely instead on musicaudiosink, which can't be configured using Template:Filename but needs to be manually set using Template:Filename or the Template:Filename:

 $ gconftool-2 -t string --set /system/gstreamer/0.10/default/musicaudiosink pulsesink


SDL in the extra repository does not provide Pulseaudio support. You will need to rebuild it from the ABS. No change to the PKGBUILD is neccessary.

There is a package available in the AUR called sdl-pulse. You can use Yaourt to instal it onto your system easier. Install yaourt by adding the archlinuxfr repository, and then use:

# pacman -S yaourt

Then, use yaourt to install sdl-pulse, by using:

$ yaourt -S sdl-pulse


OpenAL in the extra repository does not provide Pulseaudio support. You will need to rebuild it from the ABS. No change to the PKGBUILD is neccessary.

There is a package available in the AUR called openal-pulse. You can use yaourt to instal it onto your system easier:

$ yaourt -S openal-pulse

OpenAL Soft should be configured to use PulseAudio: Template:File


# pacman -Su libao-pulse

Edit the libao configuration file: Template:File


The current binary of PortAudio in the community repository does not support PulseAudio and non-mmap audio devices. This can be remedied by building PortAudio from ABS and applying a patch to the sources.


Install xine-lib-pulse from AUR - tested with Amarok 1.x

Desktop Environments

General X11

Start Pulseaudio after X using:

$ start-pulseaudio-x11

This will start Pulseaudio and load the X11 plugins.

If you use GNOME or KDE, Pulseaudio may already launch on login automatically.

X11 bell

To make Pulseaudio play a sample when an X11 bell event happens (e.g. to make your terminal go 'Ping!' instead of 'Beep!'), add the following to Template:Filename:

load-sample-lazy x11-bell /usr/share/sounds/freedesktop/stereo/dialog-error.ogg
load-module module-x11-bell sample=x11-bell 

You can also use another sample. Template:Filename is provided by sound-theme-freedesktop.


Proper integration of PulseAudio into GNOME requires some special packages:

  • libcanberra-pulse
  • gnome-media-pulse
  • gnome-settings-daemon-pulse

They are part of the pulseaudio-gnome group.

KDE 4 and Qt4

KDE 4 and Qt4 use Phonon as their multimedia API, and due to some compatibilty concerns there is no PulseAudio support for Phonon by default. There are two ways to use KDE/Qt with PulseAudio:


PulseAudio enabled packages are available from AUR.

Install phonon-pulse to make Phonon output to PulseAudio directly, and allow PulseAudio to be configured from "System Settings -> Multimedia". You will also need the appropriate PulseAudio support package for your Phonon backend(s) (one of: gstreamer0.10-pulse, vlc-pulse-plugin, xine-lib-pulse or mplayer-pulse).

Since PulseAudio takes over the control of the Alsa mixers, the mixers shown in KMix might be confusing and missleading. To make KMix show the PulseAudio mixers instead (and allow streams to be moved between devices) install kdemultimedia-kmix-pulse.

For more information about KDE with native PulseAudio support see: [1].

Remember that this only applies to KDE/Qt apps that use Phonon. If you wish to use other applications that communicate with PulseAudio directly, you'll still need to configure them as described in other parts of this article.


This approach sends the sound via Alsa before it goes to PulseAudio. This adds one more layer to the sound pipeline, and you lose most of the advantages of PulseAudio. This configuration is not needed if you install the native packages as described above. This approach might be usefull if you do not want to install packages from AUR, you are not interested in PulseAudio features in your KDE/Phonon apps, but at the same time you do not want your KDE/Phonon apps to get in the way of your other PulseAudio apps by blocking the sound devices.

Add the following lines to your Template:Filename:

pcm.phononpulse {
  type plug
  slave.pcm {
    type pulse
  hint {
    show on
    description "PulseAudio"

Now you can change the output device in "System Settings -> Multimedia -> Device Preference" to PulseAudio.

Remember, if you have added the Template:Codeline lines to your Template:Filename you cannot switch between the Alsa and the PulseAudio playback.



You need to build audacious-plugins from ABS and edit the PKGBUILD to remove the '--disable-pulse' option in the build() section.


Pulseaudio plugin for VLC is now in [community]:

pacman -S vlc-pulse-plugin

In VLC settings set the audio output method to Pulseaudio.


There is a pulseaudio enabled version of mpd called mpd-pulse in the AUR.Or you can rebuild the original updated package from ABS modifying the PKGBUILD. You can use yaourt either way.

# from AUR
yaourt -S mpd-pulse
# also change to --disable-pulse --enable-pulse in the PKGBUILD from ABS
yaourt -Sb mpd 

You will need to configure mpd to use Pulseaudio.

If you run a system-wide daemon, you will need to add the mpd user to the pulse-access group in order for mpd to connect to the daemon.

On a desktop, running mpd as yourself and not using the mpd user is preferred.


The PulseAudio enabled version of mplayer is called mplayer-pulse and is located in AUR. Alternatively, use SDL output: Template:Codeline or make use of abs and rebuild the package with "--enable-pulse".

Be aware that MPlayer may try to avoid Pulseaudio, for unknown reasons. So if you see a message similar to one below:

[AO OSS] audio_setup: Can't open audio device /dev/dsp: No such
file or directory
AO: [alsa] 44100Hz 2ch s16le (2 bytes per sample)
Starting playback..

in your MPlayer log, you should manually force it to use Pulseaudio by adding ao=pulse to your ~/.mplayer/config

Alternative configurations

Surround sound systems

Many people have a surround card, but have speakers for just two channels, so PulseAudio cannot really default to a surround setup. To enable all the channels, edit Template:Filename: uncomment the default-sample-channels line (i.e. remove the semicolon from the beginning of the line) and set the value to 6 if you have a 5.1 setup, or 8 if you have 7.1 setup etc.

# Default
# For 5.1
# For 7.1

After doing the edit, you will need to restart Pulseaudio.

ALSA Monitor source

To be able to record from a monitor source (a.k.a. "What-U-Hear", "Stereo Mix"), use Template:Codeline to find out the name of the source in Pulseaudio (e.g. Template:Codeline). Then add lines like the following to Template:Filename or Template:Filename:

pcm.pulse_monitor {
  type pulse
  device alsa_output.pci-0000_00_1b.0.analog-stereo.monitor

ctl.pulse_monitor {
  type pulse
  device alsa_output.pci-0000_00_1b.0.analog-stereo.monitor

Now you can select Template:Codeline as a recording source.

PulseAudio over network

One of PulseAudio's magnificent features is the possibility to stream audio from clients over TCP to the server running the PulseAudio daemon, allowing sound to be streamed through your LAN.

To accomplish this, one needs to enable module-native-protocol-tcp, and copy the pulse-cookie to the clients.

System-wide daemon

Warning: System-wide mode is a bad idea on a desktop. By default, PulseAudio is run per-user and will be started automatically when it is needed; this is simpler, more efficient and more secure. Read What Is Wrong With System Mode for more details.

First you need to add the "pulseaudio" daemon to Template:Filename. Example:

DAEMONS=(syslog-ng network netfs crond pulseaudio)

Then you need to add each user (even root) that should be capable of using PulseAudio to the Template:Codeline group:

# gpasswd -a <user> pulse-access

Edit Template:Filename, and change the following region:

.ifexists module-hal-detect.so
load-module module-hal-detect

to the following:

.ifexists module-udev-detect.so
load-module module-udev-detect

To enable the TCP module, add (or uncomment, if already there) this to Template:Filename:

load-module module-native-protocol-tcp

To allow remote connections to the TCP module, you also have to remember to unblock the service in Template:Filename with for example the following line:

pulseaudio-native: ALL

If you are running a system-wide PulseAudio instance, the cookie is located in Template:Filename. This cookie needs to be sent to the client and placed somewhere the pulse-access group can read (and with permissions so only they can read it). Alternatively, you may add Template:Codeline to the end of the Template:Codeline line to disable authentication.

# scp /var/run/pulse/.pulse-cookie client:/etc/pulse-cookie
# chown pulse:pulse-access /etc/pulse-cookie
# chmod 640 /etc/pulse-cookie

The pulse client needs to know where to look for the cookie. Template:Filename:

### Cookie file

Then the client needs to be configured to connect to the specified server. Template:Filename:

## The default server to connect to

To switch between servers on the client from within X, the Template:Codeline command can be used. For example, to switch from the default server to the local server:

$ pax11publish -e -S localhost

Or to switch back to the default:

$ pax11publish -e -r

Note that for the switch to become apparent, the programs using Pulse must be restarted.

To use the ESounD wrapper while using a system-wide daemon, you also need to enable auth-anonymous for the esound-unix module, or copy Template:Filename into each home directory.

Zeroconf (Avahi) publishing

For the remote Pulseaudio server to appear in the PulseAudio Device Chooser (Template:Filename), you will also need to add the Template:Filename to the DAEMONS in rc.conf on both server and clients.

Pulseaudio through JACK

The JACK-Audio-Connection-Kit is popular for audio work, and is widely supported by Linux audio applications. It fills a similar niche as Pulseaudio, but with more of an emphasis on professional audio work. In particular, audio applications such as Ardour and Audacity (recently) work well with Jack.

Pulseaudio provides module-jack-source and module-jack-sink which allow Pulseaudio to be run as a sound server above the JACK daemon. This allows the usage of per-volume adjustments and the like for the apps which need it, play-back apps for movies and audio, while allowing low-latency and inter-app connectivity for sound-processing apps which connect to JACK. However, this will prevent Pulseaudio from directly writing to the sound card buffers, which will increase overall CPU usage.

To just try PA on top of jack you can have PA load the necessary modules on start:

pulseaudio -L module-jack-sink -L module-jack-source

To use pulseaudio with JACK, JACK must be started up before Pulseaudio, using whichever method you prefer. Pulseaudio then needs to be started loading the 2 relevant modules. Edit Template:Filename, and change the following region:

### Load audio drivers statically (it is probably better to not load
### these drivers manually, but instead use module-hal-detect --
### see below -- for doing this automatically)
#load-module module-alsa-sink
#load-module module-alsa-source device=hw:1,0
#load-module module-oss device="/dev/dsp" sink_name=output source_name=input
#load-module module-oss-mmap device="/dev/dsp" sink_name=output source_name=input
#load-module module-null-sink
#load-module module-pipe-sink

### Automatically load driver modules depending on the hardware available
.ifexists module-udev-detect.so
load-module module-udev-detect
### Alternatively use the static hardware detection module (for systems that
### lack udev support)
load-module module-detect

to the following:

### Load audio drivers statically (it is probably better to not load
### these drivers manually, but instead use module-hal-detect --
### see below -- for doing this automatically)
#load-module module-alsa-sink
#load-module module-alsa-source device=hw:1,0
#load-module module-oss device="/dev/dsp" sink_name=output source_name=input
#load-module module-oss-mmap device="/dev/dsp" sink_name=output source_name=input
#load-module module-null-sink
#load-module module-pipe-sink
load-module module-jack-source
load-module module-jack-sink

### Automatically load driver modules depending on the hardware available
#.ifexists module-udev-detect.so
#load-module module-udev-detect
### Alternatively use the static hardware detection module (for systems that
### lack udev support)
#load-module module-detect

Basically, this prevents module-udev-detect from loading. module-udev-detect will always try to grab your sound-card (JACK has already done that, so this will cause an error). Also, the jack source and sink must be explicitly loaded.

QjackCtl with Startup/Shutdown Scripts

Using the settings listed above you can use QjackCtl to execute a script upon startup and shutdown to load/unload PulseAudio. Part of the reason you may wish to do this is that the above changes disable PulseAudio's automatic hardware detection modules. This particular setup is for using PulseAudio in an exclusive fashion with JACK, though the scripts could be modified to unload and load an alternate non-JACK setup, but killing and starting PulseAudio while programs might be using it would become problematic.

The following example could be used and modified as necessary as a startup script that daemonizes PulseAudio and loads the padevchooser program (optional, needs to be built from AUR) called Template:Filename:

#Load PulseAudio and PulseAudio Device Chooser

pulseaudio -D

as well as a shutdown script to kill PulseAudio and the Pulse Audio Device Chooser, as another example called Template:Filename also in the home directory:

#Kill PulseAudio and PulseAudio Device Chooser

pulseaudio --kill
killall padevchooser

Both scripts need to be made executable:

chmod +x jack_startup jack_shutdown

then with QjackCtl loaded, click on the Setup button and then the Options tab and tick both "Execute Script after Startup:" And "Execute Script on Shutdown:" and put either use the ... button or type the path to the scripts (assuming the scripts are in the home directory) Template:Filename and Template:Filename making sure to save the changes you have made.

Pulseaudio through OSS

Add the following to Template:Filename:

 load-module module-oss

Then start Pulseaudio as usual. You should have sinks and sources for your OSS devices.

Pulseaudio from within a chroot (ex. 32-bit chroot in 64-bit install)

Since a chroot sets up an alternative root for the running/jailing of applications, pulseaudio must be installed within the chroot itself (Template:Codeline within the chroot environment).

Pulseaudio, if not set up to connect to any specific server (this can be done in Template:Filename, through the PULSE_SERVER environment variable, or through publishing to the local X11 properties using module-x11-publish), will attempt to connect to the local pulse server, failing which it will spawn a new pulse server. Each pulse server has a unique ID based on the machine-id value in Template:Filename. To allow for chrooted apps to access the pulse server, the following directories must be mounted within the chroot:-


Template:Filename should also be mounted for efficiency and good performance. Note that mounting /home would normally also allow sharing of the Template:Filename folder.

For specific direction on accomplishing the appropriate mounts, please refer to the wiki on installing a bundled 32-bit system, especially the additional section specific to Pulseaudio.


No sound after install

No cards

If PulseAudio starts, run Template:Codeline. If no cards are reported, make sure that your ALSA devices are not in use:

$ fuser -v /dev/snd/*
$ fuser -v /dev/dsp

Make sure any applications using the pcm or dsp files are shut down before restarting PulseAudio.

Muted audio device

If you experience no audio output via any means while using ALSA as your default device, you may have to unmute your sound card. To do this, you will want to launch alsamixer and make sure each column has a green 00 under it (this can be toggled by pressing 'm')

$ alsamixer -c 0

Sometimes the snd_pcsp driver conflicts with the snd_hda_intel driver (for those of you using Intel cards) and no sound output is experienced. To fix this, you can blacklist the snd_pcsp driver in the MODULES array of Template:Filename (by appending Template:Codeline).

Daemon startup failed

Try resetting PulseAudio. To do that:

$ pulseaudio --kill
$ killall pulseaudio
$ killall -9 pulseaudio
$ rm -rf ~/.pulse*
$ rm -rf /tmp/pulse*

Afterwards, start PulseAudio again.


If you cannot launch the PulseAudio Device Chooser, first (re)start the Avahi daemon as follows:

$ /etc/rc.d/avahi-daemon restart

Glitches and high CPU usage since 0.9.14

The PulseAudio sound server has been rewritten to use timer-based audio scheduling instead of the traditional interrupt-driven approach. Timer-based scheduling may expose issues in some Alsa drivers. To turn timer-based scheduling off, replace the line:

load-module module-udev-detect 

in Template:Filename by:

load-module module-udev-detect tsched=0

Choppy sound

Choppy sound in pulsaudio can result from wrong settings for the sample rate in /etc/pulse/daemon.conf. Try changing the line

; default-sample-rate = 44100


default-sample-rate = 48000

and restart the pulsaudio server by executing

pulseaudio --kill && pulseaudio --start

Volume adjustment doesn't work properly

You might wan't to check


Realtime scheduling

If rtkit doesn't work, you can manually set up your system to run PulseAudio with realtime scheduling, which can help performance. To do this, add the following lines to Template:Filename:

@pulse-rt - rtprio 9
@pulse-rt - nice -11

Afterwards, you need to add your user to the Template:Codeline group:

# gpasswd -a <user> pulse-rt

See also

External links