Skip to content


Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?


Failed to load latest commit information.
Latest commit message
Commit time
March 30, 2023 13:07
March 30, 2023 12:17
March 30, 2023 12:10
March 30, 2023 18:03
September 28, 2012 22:52
March 30, 2023 14:31
March 30, 2023 12:13
June 7, 2015 15:43

Build Status

pacmixer is an alsamixer alike for PulseAudio.

I started this, because I've found no full-blown, terminal based mixers available for PA. All there are are either CLI or some kinds of GNOME/KDE applets. That's not what I wanted, so in the end I decided to go for it myself.

It was also a good starting point to finally learn myself some ObjC :).

Back in the old days, there were a good mixer for ALSA (alsamixer), so I thought about taking some of their ideas, mix it with mine, and see what happens.

Updating past 0.5: Configuration mechanism has been reworked to be more flexible and integrate better with GNU/Linux environment. It means that:

  • Pacmixer configuration is no longer available through settings tab (it is reserved for PA options).
  • Settings are now configured using configuration file.
  • Settings configured with version <= 0.5 will be reset to defaults after update.
  • Settings storage follows XDG => No more creepy "GNUStep" directory.




  • libpulse
  • ncurses
  • gnustep-base
  • gcc-objc (for compilation)
  • ninja (for compilation)


# ./mk install


Note: There is also an introductory video available here, thanks to @gotbletu.

Note: man pacmixer is your friend now as well.

pacmixer comes with built-in help, but here's the shortcuts reference, just in case.

h (or Left): Moves to the previous control.
l (or Right): Moves to the next control.
k (or Up): Increases the volume standardly.
K (or Shift+Up): Increases the volume fastly.
j (or Down): Decreases the volume standardly.
J (or Shift+Down): Decreases the volume fastly.
m: Mutes the volume.
d: Sets as default.
i: Enters inside mode.
s: Enters settings mode.
q (or Esc): Exits settings/inside mode or exit the application.
F1-F5 (or 1-5): Switches to All/Playback/Recording/Outputs/Inputs view, respectively.
F12 (or 0): Switches to Settings view.

settings view

Used to change card wise settings (e.g. profiles).

h (or Left): Moves to the previous group of settings.
l (or Right): Moves to the next group of settings.
k (or Up): Moves to the previous setting within group.
j (or Down): Moves to the next setting within group.
space: (Un)checks highlighted setting.
q (or Esc): Exits the application.

inside mode

Used to adjust specific channel's volume.

All shortcuts (besides q) work the same, except that they affect single channel instead of the whole sink/source.

settings mode

Used to change controls settings (e.g. ports).

Shortcuts work like in outside mode, except that:

  • space is used to check setting.
  • h and l iterate only over controls which actually have settings.


Pacmixer uses toml based configuration file stored in either $XDG_CONFIG_HOME/pacmixer/settings.toml or $HOME/.config/pacmixer/settings.toml.

When run for the first time, it will create a new file with all configuration options set to their defaults. You can use this file as a basis and/or checkout the reference below.


StartScreen (string) - Sets which screen should be visible when starting pacmixer. Available values are "All", "Playback", "Recording", "Outputs", "Inputs" and "Settings".


UpSpeed (integer) - Sets the speed of the standard volume up command.

FastUpSpeed (integer) - Sets the speed of the fast volume up command.

DownSpeed (integer) - Sets the speed of the standard volume down command.

FastDownSpeed (integer) - Sets the speed of the standard volume down command.


Monitors (boolean) - Filters out Monitor controls.

Internals (boolean) - Filters out PA internal controls.

Options (boolean) - Filters out Options part of the controls.


Dir (string) - Directory where log file(s) will be stored. Leave empty string to disable logging.

something's broken?

Please include the log file ($HOME/.local/share/pacmixer/pacmixer.log by default) with your bug report.

If it crashes hard (i.e. SEGFAULTS), it might also be useful to compile in debug mode and run through gdb to retrieve stacktrace.

$ ./mk debug
$ gdb ./pacmixer
gdb$ run
gdb$ bt

That will make it easier to identify the problem.



$ ./mk tests
$ ./pacmixer_run_tests

Note: It is a Catch executable, all options apply.