I am trying to control the volume using my programming script. How can I do the following in Fedora 15, Ubuntu linux?

  1. Mute/ Unmute
  2. Volume up and volume down

Note: Please note that I use a web USB microphone/speaker and also Analogue microphone/speaker. I want to apply to all to be sure.

  • 1
    If anyone's coming here from lubuntu to fix their volume control buttons, putting <command>amixer -D pulse sset Master 3%+ unmute</command> in the relevant keybind of ~/.config/openbox/lubuntu-rc.xml and then running openbox --reconfigure fixed it for me – rhombidodecahedron Sep 7 '16 at 19:49
up vote 74 down vote accepted

You can use amixer. It's in the alsa-utils package on ubuntu/debian.

Run it without parameters to get an overview about your devices.

amixer

Then use the set command to set the volumn. For example to set the master channel to 50%:

amixer set Master 50%

Note the "%" sign, without it it will treat the value as 0 - 65536 level.

  • 4
    Thanks! there are two ways to do this 1. As your excellent example: amixer set Master mute; amixer set Master unmute; 2. yum -y install xdotool; xdotool key XF86AudioRaiseVolume; xdotool key XF86AudioLowerVolume; – YumYumYum Sep 20 '11 at 11:05
  • 13
    And as an addition, you can increase or decrease the volume by amixer set Master 10%+ and amixer set Master 10%- – user Apr 7 '12 at 21:25
  • 2
    This does not work in Ubuntu. – Cerin May 24 '12 at 14:37
  • 2
    I disagree @Cerin. This works on Ubuntu LTS 12 right now. Note that the M in master is case sensitive (must be uppercase). – ashes999 Apr 9 '14 at 16:35
  • 4
    Cerin is right. This does not work. What works is : amixer -D pulse sset Master 50% – shivams May 7 '15 at 11:22

To Mute:

amixer -D pulse sset Master mute

To Unmute:

amixer -D pulse sset Master unmute

To turn volume up 5%:

amixer -D pulse sset Master 5%+

To turn volume down 5%:

amixer -D pulse sset Master 5%-

  • 1
    You can also add unmute to latter commands to automatically unmute when you change volume (for convenience): amixer -D pulse sset Master unmute 5%+ – Roman Golyshev Oct 6 at 23:06

pactl/pacmd (unlike amixer) allows to increase volume over 100% :-).

pactl set-sink-mute 0 toggle  # toggle mute
pactl set-sink-volume 0 0     # mute (force)
pactl set-sink-volume 0 100%  # max
pactl set-sink-volume 0 +5%   # +5% (up)
pactl set-sink-volume 0 -5%   # -5% (down)

Manual settings over 100% is possible in pavucontrol (unlike alsamixer).

NOTE: If you want to share the same commands on different hosts with different sinks, you can use @DEFAULT_SINK@ as a sink instead of number 0:

pactl set-sink-volume @DEFAULT_SINK@ +5%

You set your default sink with pactl set-default-sink my-sink-name (list names with pactl list short sinks).

UPDATE: added toggle mute (thanks to Don Joe).

Source: askubuntu.com, wiki.archlinux.org.

if the user has muted the device you have to 'unmute' it. otherwise setting the percentage will work but the sound is still off

amixer set 'Master' 100% unmute
/usr/bin/amixer set 'PCM' 100% unmute

pevik's answer is almost correct for PulseAudio, with two things to mention:

  • the negative volume change command will generate an error because the minus-something portion of it will be interpreted as a separate (unrecognized) option; you need to turn off option parsing with a double-minus somewhere before the negative number, e.g. " -- -5%"

  • the true mute state is something that should be possible to toggle with the same key, which won't work if you're just setting the volume to a fixed value of 0, so the right command for that would be:

pactl set-sink-mute @DEFAULT_SINK@ toggle

LE: Whether the first hint is applicable may depend on the version of PulseAudio you're running or on something else in the distro - I notice that on Ubuntu 16 it works without the "--" and fails if I add "--" in front of the negative percentage.

  • very good thx, that makes it perfect when we change window managers a lot on the fly for better gaming fps, so I use xbindkeys-config and I dont even have to restart X :) (lol the smile... no pun intended lol) – Aquarius Power Aug 31 '17 at 0:08

Higher volume:

amixer set Master 3%+

Lower volume:

amixer set Master 3%-

Mute toggle:

amixer set Master toggle

Example keybindings for i3/sway, the commands are after exec:

bindsym XF86AudioRaiseVolume exec amixer set Master 3%+
bindsym XF86AudioLowerVolume exec amixer set Master 3%-
bindsym XF86AudioMute exec amixer set Master toggle
bindsym Ctrl+$alt+Up  exec amixer set Master 3%+
bindsym Ctrl+$alt+Down exec amixer set Master 3%-

amixer worked for me but I didn't get the nice animation that I get when I press the volume up button on my keyboard.

I decided to use xte to directly press that key from the command line:

Volume up: xte 'key 0x1008ff13'

Volume down: xte 'key 0x1008ff11'

Mute: xte 'key 0x1008ff12'

I figured out the keysym (that hex number) by using xev.

sudo apt-get install xbindkeys xautomation
xev

and then press the volume up button on your keyboard to get the keysym. The key sym may vary from system to system so finding it from xev will be the most reliable way.

The result looks like this for me:

KeyRelease event, serial 37, synthetic NO, window 0x2c00001, root 0xef, subw 0x0, time 6660080, (566,573), root:(664,651), state 0x0, keycode 123 (keysym 0x1008ff13, XF86AudioRaiseVolume), same_screen YES, XLookupString gives 0 bytes: XFilterEvent returns: False

Your Answer

By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.

Not the answer you're looking for? Browse other questions tagged or ask your own question.