Command to unmute and maximize volume?

I need to mute/unmute from the command line. I found out that I can do it with:

amixer sset Master mute
amixer sset Master unmute

the problem is that the command for unmute is not working (as described also in this bug report: https://bugs.launchpad.net/ubuntu/+source/alsa-utils/+bug/878986)

My question is: is there another way to obtain the same result, taken that amixer is not working?

Furthermore, if I set manually the volume to minimum and then call

amixer sset Master 100%

the volume increases but doesn't switch to maximum, even if the stdout tells:

Simple mixer control 'Master',0
Capabilities: pvolume pswitch pswitch-joined penum
Playback channels: Front Left - Front Right
Limits: Playback 0 - 31
Mono:
Front Left: Playback 31 [100%] [0.00dB] [on]
Front Right: Playback 31 [100%] [0.00dB] [on]

Can anybody help me with this?


Solution 1:

Even better is this one, unmute all audio devices. and set volume to 70%

for x in `amixer controls  | grep layback` ; do amixer cset "${x}" on ; done


for x in `amixer controls  | grep layback` ; do amixer cset "${x}" 70% ; done

in the example above the HDMI and optical isn't unmutted..

Solution 2:

Try the following commands in a terminal

amixer -c 0 set Master playback 0% mute
amixer -c 0 set Master playback 100% unmute

This should ensure all outputs are controlled. It's likely with your posted commands the reason the volume is not 100% is that the amixer does not release all outputs eg headphones or any other sound outputs at the same time.

Solution 3:

Get all sounds sources, get their names, form a command line with amixer and execute it

amixer scontrols | grep -oE "'.*'" | awk -F\' \
 '{print "amixer -c 0 set \""$2"\" unmute 100"}' | sh

Unmutes all audio devices and sets their volume to max.

Have a great one, Mike

Solution 4:

Mark Rooney's solution did not work for me, but I was able to work around this by explicitly unmuting all of the channels.

#!/bin/bash

for i in Master Headphone PCM Front Surround Center LFE Side; do
    amixer -c 0 set "$i" playback unmute
done &>/dev/null

I got the channel names but running alsamixer.