Pulseaudio: Difference between revisions
(10 intermediate revisions by the same user not shown) | |||
Line 2: | Line 2: | ||
== References == |
== References == |
||
* [https://wiki.archlinux.org/title/PulseAudio PulseAudio - archlinux] |
|||
* [https://wiki.archlinux.org/title/PulseAudio/Examples PulseAudio/Examples - archlinux] |
|||
* [https://gavv.github.io/articles/pulseaudio-under-the-hood/ Pulseaudio under the hood] |
* [https://gavv.github.io/articles/pulseaudio-under-the-hood/ Pulseaudio under the hood] |
||
* [https://www.freedesktop.org/wiki/Software/PulseAudio/Documentation/User/Modules/#module-native-protocol-unixtcp <code>module-native-protocol-{unix,tcp}</code> documentation] |
|||
== Commands == |
|||
;pactl |
|||
<source lang="bash> |
|||
pactl list # View devices (including bluetooth headsets...) |
|||
pactl list modules |
|||
</source> |
|||
* <code>pactl</code> can also be used to run the config commands from e.g. {{file|~/.pulse/default.pa}} directly. For instance: |
|||
<source lang="bash"> |
|||
pactl load-module module-native-protocol-tcp listen=192.168.1.0 |
|||
pactl load-module module-zeroconf-publish |
|||
</source> |
|||
== Pulseaudio with systemd == |
== Pulseaudio with systemd == |
||
Line 32: | Line 47: | ||
.include /etc/pulse/default.pa |
.include /etc/pulse/default.pa |
||
# auth-ip-acl tells that no auth is required for given client address |
|||
load-module module-native-protocol-tcp auth-ip-acl=127.0.0.1 |
load-module module-native-protocol-tcp auth-ip-acl=127.0.0.1 |
||
load-module module-zeroconf-publish |
load-module module-zeroconf-publish |
||
Line 102: | Line 118: | ||
== Troubleshooting == |
== Troubleshooting == |
||
=== Get verbose log === |
|||
* Edit {{file|/etc/systemd/user/default.target.wants/pulseaudio.service}}: |
|||
<source lang=diff> |
|||
-ExecStart=/usr/bin/pulseaudio --daemonize=no |
|||
+ExecStart=/usr/bin/pulseaudio --daemonize=no -v |
|||
</source> |
|||
Get the log with |
|||
<source lang="bash"> |
|||
sudo journalctl -b | grep pulse |
|||
</source> |
|||
=== Clean up config === |
|||
Cleaning up the user config may solve issues (like not working speaker): |
|||
* remove all files in {{file|.pulse}} and {{file|.config/pulse}}, except possibly {{file|client.conf}}, {{file|cookie}} and {{file|default.pa}}. |
|||
=== General === |
=== General === |
||
Line 129: | Line 161: | ||
pulseaudio -k # ... if so, kill it |
pulseaudio -k # ... if so, kill it |
||
pulseaudio -D # and start it again (optional is auto-spawn is enabled) |
pulseaudio -D # and start it again (optional is auto-spawn is enabled) |
||
</source> |
|||
=== Enable X11 bell === |
|||
From this [https://github.com/birdie-github/useful-scripts/blob/master/audio-conf usefel-scripts] for PipeWire: |
|||
<source lang="bash"> |
|||
pactl load-module module-x11-bell |
|||
</source> |
</source> |
Latest revision as of 11:33, 25 April 2022
This page contains dedicated information about Pulseaudio. See Linux audio page for more general information (might also include some general info on Pulseaudio).
References
- PulseAudio - archlinux
- PulseAudio/Examples - archlinux
- Pulseaudio under the hood
module-native-protocol-{unix,tcp}
documentation
Commands
- pactl
pactl list # View devices (including bluetooth headsets...)
pactl list modules
pactl
can also be used to run the config commands from e.g. ~/.pulse/default.pa directly. For instance:
pactl load-module module-native-protocol-tcp listen=192.168.1.0
pactl load-module module-zeroconf-publish
Pulseaudio with systemd
On recent Ubuntu / Debian version, Pulseaudio is started by systemd.
- Unit file is at /etc/systemd/user/default.target.wants/pulseaudio.service.
- This file starts pulseaudio in non-daemon mode.
- To get pulseaudio log, do something like
journalctl | grep pulseaudio
.
- To restart pulseaudio, simply kill it. For instance:
pulseaudio -k
✐ | Configuring pulseaudio to log in a file does not work very well. Better use systemd journal. |
How-To
PulseAudio across network with Avahi / auto-discovery
This configuration is very useful to send sound to another network device (for instance, if you have one headset but multiple computers) [1].
First install pulseaudio-module-zeroconf on both server and client:
sudo apt install pulseaudio-module-zeroconf
In the server computer (the one that will play the sound), add to ~/.pulse/default.pa:
.include /etc/pulse/default.pa
# auth-ip-acl tells that no auth is required for given client address
load-module module-native-protocol-tcp auth-ip-acl=127.0.0.1
load-module module-zeroconf-publish
In the client computer (the one that will send the sound), add to ~/.pulse/default.pa:
.include /etc/pulse/default.pa
load-module module-native-protocol-tcp auth-ip-acl=127.0.0.1
load-module module-zeroconf-discover
On the server, we must open the TCP port 4713 in the firewall.
By default, Pulseaudio is configured to use cookie authentication, except for the address excluded by auth-ip-acl
(this can be sequence of address, see online documentation). The easiest is to copy the cookie from the server to the client:
cd ~/.config/pulse
scp server:.pulse/cookie .
Finally, restart pulseaudio on both computers:
pulseaudio -k
- Fix [puseaudio] module-tunnel.c
- Failed to authenticate
- Make sure that there is no other cookie file in user home.
- In particular, there are two separate directories: ~/.pulse and ~/.config/pulse. The cookie is taken from 2nd directory, whereas the configuration is read from the first folder.
- The easiest is to symlink the 2nd folder to first one:
rm -rf ~/.config/pulse
ln -sf ../.pulse ~/.config/pulse
pulseaudio -k
PulseAudio in multi-user (relay)
The solution is to have all users have their own PulseAudio server, but all of these relay to one server (typically the one of current active user, see [2]).
For each potential active user, edit file ~/.pulse/default.pa:
.include /etc/pulse/default.pa load-module module-native-protocol-tcp auth-ip-acl=127.0.0.1
For all users that needs to relay to active user, edit file ~/.pulse/client.conf:
default-server = 127.0.0.1
Active user might also need to run:
xhost +
PulseAudio in multi-user (system mode)
Main article: [3] (see also [4])
CAUTION — PulseAudio developers seriously recommend against this (see [5])
The solution here is to run pulseaudio as a system-wide daemon. For this:
- Enable system start. For 12.04, edit /etc/default/pulseaudio:
PULSEAUDIO_SYSTEM_START=1
For 12.10, edit /etc/init/pulseaudio.conf:
start on runlevel [2345]
- Edit /etc/pulse/daemon.conf — See man pulse-daemon.conf for more information.
daemonize = yes local-server-type = system
- Edit /etc/pulse/client.conf (this is actually not really necessary
autospawn = no
We also need to add users to the pulse-access group.
sudo usermod -a -G pulse-access <username>
Troubleshooting
Get verbose log
- Edit /etc/systemd/user/default.target.wants/pulseaudio.service:
-ExecStart=/usr/bin/pulseaudio --daemonize=no
+ExecStart=/usr/bin/pulseaudio --daemonize=no -v
Get the log with
sudo journalctl -b | grep pulse
Clean up config
Cleaning up the user config may solve issues (like not working speaker):
- remove all files in .pulse and .config/pulse, except possibly client.conf, cookie and default.pa.
General
Troubleshooting PulseAudio:
paplay /usr/share/sounds/alsa/Front_Center.wav # Try to play using PulseAudio
Choppy sound in flash video
Reference askubuntu.
- Simply kill and restart pulseaudio:
pulseaudio -k
pusseaudio -D # To restart it - not needed if pulse runs in daemon mode
Understanding / Troubleshooting PulseAudio
- Only active user has access to /dev/snd/* devices. Access is granted by ConsoleKit when user logs in [6]. Access control can be seen with
getfacl /dev/snd/*
- To restart PulseAudio [7]
pulseaudio --check && echo running # Check if any pulseaudio is running
pulseaudio -k # ... if so, kill it
pulseaudio -D # and start it again (optional is auto-spawn is enabled)
Enable X11 bell
From this usefel-scripts for PipeWire:
pactl load-module module-x11-bell