107

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 07 '16 at 19:49
  • This link is currently first one that google offers on the subject. However, I consider following QA as listing more options: https://askubuntu.com/questions/97936/terminal-command-to-set-audio-volume – Martian2020 Sep 03 '21 at 05:04

7 Answers7

128

You can use amixer. It's in the alsa-utils package on Ubuntu and Debian.

Run amixer without parameters to get an overview about your controls for the default device.

You can also use alsamixer without parameters (from the same package) to get a more visual overview. Use F6 to see and switch between devices. Commonly, you might have PulseAudio and a hardware sound card to select from.

Then use amixer with the set command to set the volume. For example, to set the master channel to 50%:

amixer set Master 50%

Master is the control name and should match one that you see when running without parameters.

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

If PulseAudio is not your default device, you can use the -D switch:

amixer -D pulse set Master 50%

Other useful commands pointed out in the comments:

To increase/decrease the volume use +/- after the number, use

amixer set Master 10%+
amixer set Master 10%-

To mute, unmute or toggle between muted/unmuted state, use

amixer set Master mute
amixer set Master unmute
amixer set Master toggle

Also note that there might be two different percentage scales, the default raw and for some devices a more natural scale based on decibel, which is also used by alsamixer. Use -M to use the latter.

Finally, if you're interested only in PulseAudio, you might want to check out pactl (see one of the other answers).

Dario Seidl
  • 2,446
  • 1
  • 21
  • 21
  • 5
    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; –  Sep 20 '11 at 11:05
  • @89899.3K Thanks for the info, xdotool looks interesting. – Dario Seidl Sep 20 '11 at 11:14
  • 17
    And as an addition, you can increase or decrease the volume by amixer set Master 10%+ and amixer set Master 10%- – user Apr 07 '12 at 21:25
  • 2
    This does not work in Ubuntu. – Cerin May 24 '12 at 14:37
  • Use option -M for intuitive numbers 2. Maybe Ubutu uses PulseAudio 3. Ubuntu su***
  • – ManuelSchneid3r Aug 09 '13 at 12:39
  • 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 09 '14 at 16:35
  • 8
    Cerin is right. This does not work. What works is : amixer -D pulse sset Master 50% – shivams May 07 '15 at 11:22
  • 1
    To toggle un/mute: amixer set Master toggle. – Stephen Niedzielski Aug 02 '16 at 04:40
  • You might need to replace "Master" with the device "amixer" tells you, for me it was "Speaker" – piegames May 30 '17 at 17:00
  • I'm curious, where is the volume setting actually stored - does a kernel module have ways to persist data that is hidden for the user? – Morten Aug 10 '17 at 06:25
  • @Morten It used to be done via an init script named /etc/init.d/alsa-utils which saved the mixer settings on shutdown and restored them on boot. Some distros (eg. Raspbian) still do it that way. I'm still preparing to upgrade my main machine off Kubuntu 14.04 LTS, so I can't tell you the paths under systemd, but upstart handles it via /etc/init/alsa-store.conf and /etc/init/alsa-restore.conf. – ssokolow Dec 18 '18 at 06:56
  • If I try to set the volume > 41%, it always sets it to 1% higher than I requested... any idea why? – Michael May 03 '19 at 20:03
  • @Michael, try with the -M switch. I edited the answer for an explanation. – Dario Seidl May 04 '19 at 08:27
  • You can also use db unit : amixer set Master 3db+ – gruvw Sep 19 '22 at 14:30