Is there a way to change individual application volumes from the terminal? I found a way to change the master volume which is amixer -D pulse sset Master 50%
but I would like to be able to change volumes for individual applications like is possible in pavucontrol
. My usage would be for scripting.
Asked
Active
Viewed 4,789 times
5
2 Answers
5
I found the solution hidden in a comment on unix.stackexchange. Use pactl list sink-inputs
to find your application's sink input number. Then use pactl set-sink-input-volume [sink number] [volume percent]
to set the volume of your application.
-
This one is great. I can now fade out spotify with
for ((i=50;i<100;i+=1)); do; pactl set-sink-input-volume 28 $i%; sleep 0.05; done
Just need to know how to get spotify sink in a more assuring way. – Błażej Michalik Jan 23 '16 at 01:23 -
I had used this command to make a script to use the pedals from an old driving wheel to control music playback volume. I put the script up here. Check out the function
getSink
to see a way to do it in a script. Not that the second line in it uses the variable $SINKAPP. you can substitute your process name here. – AkBKukU Feb 09 '16 at 18:21 -
Percentage no longer works. The max value is 0x10000.
https://man.archlinux.org/man/pulse-cli-syntax.5.en#set_sink_volume_set_source_volume
– partofthething Sep 14 '23 at 03:29
1
This function easily sets the volume of any app.
function pacmd-set-app-volume() {
local player="$1"
local volume="$2"
firstPlayerSinkIndex="$(pacmd list-sink-inputs | awk '/index:|application.name |application.process.binary / {print $0};' | grep -iB 1 "$player" | awk '/index:/ {print $2; exit}')" # get specific app sink
[[ $firstPlayerSinkIndex ]] && pacmd set-sink-input-volume "$firstPlayerSinkIndex" "$((volume*65536/100))" # 100% → 65536
}
Could be added to .bashrc
/.zshrc
.
Usage:
pacmd-set-app-volume <loosly_app_name> <volume_percentage>
For e.g.:
pacmd-set-app-volume "MPV Media Player" 55 # Or "mpv" "75"

Pablo Bianchi
- 15,657
man <application>
– Jacob Vlijm Feb 23 '15 at 07:03