pulseaudio(1)
๐ง pulseaudio(1) โ The PulseAudio Sound System ๐ง
โจ NAME โจ
okay so pulseaudio is literally The PulseAudio Sound System. bestie, that's the whole name, periodt. ๐
๐ธ SYNOPSIS ๐ธ
the way you call this thing is:
pulseaudio [options]
pulseaudio --help
pulseaudio --version
pulseaudio --dump-conf
pulseaudio --dump-modules
pulseaudio --dump-resample-methods
pulseaudio --cleanup-shm
pulseaudio --start
pulseaudio --kill
pulseaudio --check
๐ฆ DESCRIPTION ๐ฆ
okay so real talk: PulseAudio is a networked low-latency sound server for Linux, POSIX and Windows systems. it's giving audio infrastructure main character energy, no cap. ๐ถโจ
๐ OPTIONS ๐
bestie, here's the full menu. every flag, every vibe. don't skip any, fr fr.
-h|--helpโ show help. that's it, that's the tweet. ๐ซถ--versionโ show version information. slay. ๐--dump-confโ load the daemon configuration filedaemon.conf(see below), parse the remaining configuration options on the command line, and dump the resulting daemon configuration in a format that's compatible withdaemon.conf. it's giving config reveal. โจ--dump-modulesโ list available loadable modules. combine with-vfor a more elaborate listing. lowkey useful. ๐--dump-resample-methodsโ list available audio resamplers. resampler menu, periodt. ๐--cleanup-shmโ identify stale PulseAudio POSIX shared memory segments in/dev/shmand remove them if possible. this is done implicitly whenever a new daemon starts up or a client tries to connect to a daemon. it should normally not be necessary to issue this command by hand. only available on systems with POSIX shared memory segments implemented via a virtual file system mounted to/dev/shm(e.g. Linux). ๐งน--startโ start PulseAudio if it is not running yet. this is different from starting PulseAudio without--start, which would fail if PA is already running. PulseAudio is guaranteed to be fully initialized when this call returns. implies--daemonize. okay so this one actually waits for the glow-up to finish. ๐-k|--killโ kill an already running PulseAudio daemon of the calling user (equivalent to sending aSIGTERM). dramatic but valid. ๐--checkโ return0as the return code when the PulseAudio daemon is already running for the calling user, or non-zero otherwise. produces no output on the console except for errors to stderr. note that a non-zero return value doesn't necessarily mean that PulseAudio is not usable. even if the server is not running, it may get automatically started via PulseAudio's autospawning mechanism or systemd's socket activation, or the environment might be such that checking for processes doesn't work (for example, the running server might not show up in a container, even if the server is accessible via a socket). also disabling PID files with--use-pid-file=noprevents--checkfrom detecting running servers. a more robust check in most situations would be to try establishing a client connection to the server. unfortunately there's currently no--check-connectionoption to replace--check, but runningpactl infocould be a pretty good substitute. ๐--system[=BOOL]โ run as a system-wide instance instead of per-user. please note that this disables certain features of PulseAudio and is generally not recommended unless the system knows no local users (e.g. is a thin client). this feature needs special configuration and a dedicated UNIX user set up. it is highly recommended to combine this with--disallow-module-loading(see below). โ ๏ธ-D|--daemonize[=BOOL]โ daemonize after startup, i.e. detach from the terminal. note that when running as a systemd service you should use--daemonize=nofor systemd notification to work. ๐--fail[=BOOL]โ fail startup when any of the commands specified in the startup scriptdefault.pa(see below) fails. no half-finished vibes. ๐ซ--high-priority[=BOOL]โ try to acquire a high Unix nice level. this will only succeed if the calling user has a non-zeroRLIMIT_NICEresource limit set (on systems that support this), or we're configured to be run as system daemon (see--systemabove). it is recommended to enable this, since it is only a negligible security risk (see below). โญ--realtime[=BOOL]โ try to acquire a real-time scheduling for PulseAudio's I/O threads. this will only succeed if the calling user has a non-zeroRLIMIT_RTPRIOresource limit set (on systems that support this), or rtkit is available and allows PulseAudio to enable real-time scheduling, or we are configured to be run as system daemon (see--systemabove). โก--disallow-module-loading[=BOOL]โ disallow module loading after startup. this is a security feature since it disallows additional module loading during runtime and on user request. it is highly recommended when--systemis used (see above). note however, that this breaks certain features like automatic module loading on hot plug. ๐--disallow-exit[=BOOL]โ disallow user requested exit. nope, you're staying. ๐--exit-idle-time=SECSโ terminate the daemon after the last client quit and this time in seconds passed. use a negative value to disable this feature. defaults to20. when PulseAudio runs in the per-user mode and detects a login session, then any positive value will be reset to0so that PulseAudio will terminate immediately on logout. a positive value therefore has effect only in environments where there's no support for login session tracking (or if the user is logged in without a session spawned, a.k.a. lingering). a negative value can still be used to disable any automatic exit. when PulseAudio runs in the system mode, automatic exit is always disabled, so this option does nothing. โณ--scache-idle-time=SECSโ unload autoloaded samples from the cache when they haven't been used for the specified number of seconds. cache cleanup era. ๐งผ--log-level[=LEVEL]โ if an argument is passed, set the log level to the specified value, otherwise increase the configured verbosity level by one. the log levels are numerical from0to4, corresponding toerror,warn,notice,info,debug. default log level isnotice, i.e. all log messages with lower log levels are printed:error,warn,notice. ๐ฃ๏ธ-v|--verboseโ increase the configured verbosity level by one (see--log-levelabove). specify multiple times to increase log level multiple times. more-v, more lore. ๐ข--log-target={auto,syslog,journal,stderr,file:PATH,newfile:PATH}โ specify the log target. if set toauto(which is the default), then logging is directed to syslog when--daemonizeis passed, otherwise to STDERR. if set tojournal, logging is directed to the systemd journal. if set tofile:PATH, logging is directed to the file indicated by PATH.newfile:PATHis otherwise the same asfile:PATH, but existing files are never overwritten. if the specified file already exists, a suffix is added to the file name to avoid overwriting. ๐--log-meta[=BOOL]โ show source code location in log messages. meta queen. ๐ท๏ธ--log-time[=BOOL]โ show timestamps in log messages. clock it. โฐ--log-backtrace=FRAMESโ when FRAMES is greater than0, log for each message a stack trace up to the number of specified stack frames. ๐ช-p|--dl-search-path=PATHโ set the search path for dynamic shared objects (plugins). ๐--resample-method=METHODโ use the specified resampler by default (see--dump-resample-methodsabove for possible values). ๐๏ธ--use-pid-file[=BOOL]โ create a PID file. if this option is disabled it is possible to run multiple sound servers per user. ๐๏ธ--no-cpu-limit[=BOOL]โ do not install CPU load limiter on platforms that support it. by default, PulseAudio will terminate itself when it notices that it takes up too much CPU time. this is useful as a protection against system lockups when real-time scheduling is used (see below). disabling this mechanism is useful when debugging PulseAudio with tools likevalgrind(1)which slow down execution. ๐ง--disable-shm[=BOOL]โ PulseAudio clients and the server can exchange audio data via POSIX or memfd shared memory segments (on systems that support this). if disabled PulseAudio will communicate exclusively over sockets. please note that data transfer via shared memory segments is always disabled when PulseAudio is running with--systemenabled (see above). ๐ซ--enable-memfd[=BOOL]โ PulseAudio clients and the server can exchange audio data via memfds - the anonymous Linux Kernel shared memory mechanism (on kernels that support this). if disabled PulseAudio will communicate via POSIX shared memory. ๐งฌ-L|--load="MODULE ARGUMENTS"โ load the specified plugin module with the specified arguments. plug it in, plug it in. ๐-F|--file=FILENAMEโ run the specified script on startup. may be specified multiple times to specify multiple scripts to be run in order. combine with-nto disable loading of the default scriptdefault.pa(see below). ๐-Cโ open a command interpreter on STDIN/STDOUT after startup. this may be used to configure PulseAudio dynamically during runtime. equivalent to--load=module-cli. ๐ฌ-nโ don't load default script filedefault.pa(see below) on startup. useful in conjunction with-Cor--file. ๐
๐ FILES ๐
okay so where does it keep its stuff? here:
~/.config/pulse/daemon.conf,/etc/pulse/daemon.conf: configuration settings for the PulseAudio daemon. if the version in the user's home directory does not exist, the global configuration file is loaded. seepulse-daemon.conf(5)for more information. ๐~/.config/pulse/default.pa,/etc/pulse/default.pa: the default configuration script to execute when the PulseAudio daemon is started. if the version in the user's home directory does not exist, the global configuration script is loaded. seedefault.pa(5)for more information. ๐ฌ~/.config/pulse/client.conf,/etc/pulse/client.conf: configuration settings for PulseAudio client applications. if the version in the user's home directory does not exist, the global configuration file is loaded. seepulse-client.conf(5)for more information. ๐ป
๐ก SIGNALS ๐ก
signals, bestie. it's giving communication. โจ
SIGINT,SIGTERM: the PulseAudio daemon will shut down (same as--kill). ๐SIGHUP: dump a long status report to STDOUT or syslog, depending on the configuration. ๐SIGUSR1: loadmodule-cli, allowing runtime reconfiguration via STDIN/STDOUT. ๐งSIGUSR2: loadmodule-cli-protocol-unix, allowing runtime reconfiguration via aAF_UNIXsocket. seepacmd(1)for more information. ๐
๐ UNIX GROUPS AND USERS ๐
okay so if you're running the system daemon life (peep --system above), these groups are literally your whole personality:
- Group
pulse-accessโ when PulseAudio is running as a system daemon (see--systemabove), access is granted to members of this group when they connect viaAF_UNIXsockets. If PulseAudio is running as a user daemon, this group has no meaning โ it's giving decoration, bestie. - User
pulse, grouppulseโ if PulseAudio is running as a system daemon (see--systemabove) and it's started asroot, the daemon drops privileges and becomes a normal user process using this user and group. If PulseAudio is running as a user daemon, this user and group has no meaning. Same energy.
โก REAL-TIME AND HIGH-PRIORITY SCHEDULING โก
okay so you know that little stutter moment when your music goes glitchy? yeah. we hate her. To minimize the risk of drop-outs during playback it is recommended to run PulseAudio with real-time scheduling if the underlying platform supports it. The way this works is it decouples the scheduling latency of the PulseAudio daemon from the system load, and that's literally the best way to make sure PulseAudio always gets CPU time when it needs it to refill the hardware playback buffers. iconic behaviour honestly โจ
๐ but ngl, unfortunately this can be a security risk on some systems, since PulseAudio runs as a user process, and giving realtime scheduling privileges to a user always comes with the risk that the user misuses it to lock up the system โ which is possible since making a process real-time effectively disables preemption. no cap. ๐
To solve this problem, PulseAudio uses rtkit to safely acquire real-time scheduling when available. rtkit said "i got u bestie" ๐ซถ
If the risk of locking up the machine is considered too big to enable real-time scheduling, high-priority scheduling can be enabled instead (i.e. negative nice level). This can be enabled by passing --high-priority (see above) when starting PulseAudio and may also be enabled with the appropriate option in daemon.conf.
Negative nice levels can only be enabled when the appropriate resource limit RLIMIT_NICE is set (see setrlimit(2) for more information), possibly configured in /etc/security/limits.conf. A resource limit of 31 (corresponding with nice level -11) is recommended. โจ write that down โจ
๐ ENVIRONMENT VARIABLES ๐
The PulseAudio client libraries check for the existence of the following environment variables and change their local configuration accordingly โ so basically, these are the little notes you leave for your client libs before they even wake up:
$PULSE_SERVERโ the server string specifying the server to connect to when a client asks for a sound server connection and doesn't explicitly ask for a specific server. The server string is a list of server addresses separated by whitespace which are tried in turn. A server address consists of an optional address type specifier (unix:,tcp:,tcp4:,tcp6:), followed by a path or host address. A host address may include an optional port number. A server address may be prefixed by a string enclosed in{}. In this case the following server address is ignored unless the prefix string equals the local hostname or the machine id (/etc/machine-id). lowkey a whole treasure hunt ๐บ๏ธ$PULSE_SINKโ the symbolic name of the sink to connect to when a client creates a playback stream and doesn't explicitly ask for a specific sink. it's giving "i already picked, stop asking" ๐$PULSE_SOURCEโ the symbolic name of the source to connect to when a client creates a record stream and doesn't explicitly ask for a specific source. same vibe, but for recording ๐$PULSE_BINARYโ path of PulseAudio executable to run when server auto-spawning is used. โจ auto-spawn said go find her โจ$PULSE_CLIENTCONFIGโ path of file that shall be read instead ofclient.conf(see above) for client configuration. not me overriding the whole config ๐ญ$PULSE_COOKIEโ path of file that contains the PulseAudio authentication cookie. Defaults to~/.config/pulse/cookie. ๐ช yes, an actual cookie, and no you cannot eat it.
These environment settings take precedence โ if set โ over the configuration settings from client.conf (see above). env vars said "main character energy only" ๐
๐ AUTHORS ๐
The PulseAudio Developers <pulseaudio-discuss (at) lists (dot) freedesktop (dot) org>; PulseAudio is available from http://pulseaudio.org/ ๐ธ
๐ฆ SEE ALSO ๐ฆ
and that's the whole page bestie, we ate and left absolutely zero crumbs ๐ this one's from the Manuals set, sitting in the User section, filed under pulseaudio(1) โ go forth and make your audio slay ๐โจ
๐ฆ where this page comes from
- alpine 3.24: pulseaudio-doc 17.0-r7 ยท LGPL-2.1-or-later
- arch rolling: pulseaudio 17.0+r134+g77d25a1e6-1 ยท LGPL-2.1-or-later
- centos-stream 9: pulseaudio 15.0-3.el9 ยท LGPLv2+
- debian bookworm: pulseaudio 16.1+dfsg1-2+b1 ยท LGPL-2.1-or-later
- debian trixie: pulseaudio 17.0+dfsg1-2+b1 ยท LGPL-2.1-or-later
- fedora 43: pulseaudio 17.0-7.fc43 ยท LGPL-2.1-or-later
- fedora 43: pulseaudio 17.0-9.fc43 ยท LGPL-2.1-or-later
- fedora 44: pulseaudio 17.0-9.fc44 ยท LGPL-2.1-or-later
- nixos 26.05: pulseaudio 17.0
- nixpkgs unstable: pulseaudio 17.0
- ubuntu jammy: pulseaudio 1:15.99.1+dfsg1-1ubuntu1 ยท LGPL-2.1-or-later
- ubuntu jammy: pulseaudio 1:15.99.1+dfsg1-1ubuntu2.2 ยท LGPL-2.1-or-later
- ubuntu noble: pulseaudio 1:16.1+dfsg1-2ubuntu10 ยท LGPL-2.1-or-later
- ubuntu noble: pulseaudio 1:16.1+dfsg1-2ubuntu10.1 ยท LGPL-2.1-or-later
- ubuntu questing: pulseaudio 1:17.0+dfsg1-2ubuntu3
- ubuntu resolute: pulseaudio 1:17.0+dfsg1-2ubuntu4 ยท LGPL-2.1-or-later
- ubuntu stonking: pulseaudio 1:17.0+dfsg1-2ubuntu6 ยท LGPL-2.1-or-later
- ๐ girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms