I got a neat desk-mounted macro pad called the
Pikatea. I wanted one of the buttons to cycle my
computer's audio output between my headphones and speakers. I found that you can
use pactl
to
inspect PulseAudio settings, and change them. Below is a bash script I wrote to
cycle output (i.e. "sinks" in PulseAudio terminology). You can run it multiple
times, and it'll pick the next output after the current one.
#!/bin/bash
set -e
default_sink=$(pactl info | grep "Default Sink:" | cut '-d ' -f3)
sinks=$(pactl list short sinks | cut -f2)
# for wrap-around
sinks="$sinks
$sinks"
next_sink=$(echo "$sinks" | awk "/$default_sink/{getline x;print x;exit;}")
pactl set-default-sink "$next_sink"
pactl list short sink-inputs | \
cut -f1 | \
xargs -I{} pactl move-sink-input {} "$next_sink"