32 lines
1.1 KiB
Bash
Executable File
32 lines
1.1 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# blob:summary=Set the default audio output and move active streams
|
|
# blob:args=<node-id> <sink-name>
|
|
# blob:examples=blob audio output set default 42 alsa_output.pci-0000_00_1f.3.analog-stereo
|
|
|
|
node_id=${1:-}
|
|
sink_name=${2:-}
|
|
|
|
if [[ -z $node_id || -z $sink_name ]]; then
|
|
echo "Usage: blob-audio-sink-set <node-id> <sink-name>" >&2
|
|
exit 1
|
|
fi
|
|
|
|
timeout 2 wpctl set-default "$node_id" 2>/dev/null || true
|
|
timeout 2 pactl set-default-sink "$sink_name" 2>/dev/null || true
|
|
|
|
# Move only real application streams. A DSP filter-chain's own output is also a
|
|
# sink input but carries no application.name, and moving it would rewire the
|
|
# processing itself -- onto headphones, or into its own virtual sink, which is a
|
|
# cycle. EasyEffects' output stream must stay put for the same reason.
|
|
timeout 2 pactl list sink-inputs 2>/dev/null | awk '
|
|
/^Sink Input #/ {id = substr($3, 2)}
|
|
/application\.name = / {
|
|
app = $0
|
|
sub(/.*application\.name = "/, "", app)
|
|
sub(/"$/, "", app)
|
|
if (app != "EasyEffects") print id
|
|
}' | while read -r input; do
|
|
[[ -n $input ]] && timeout 2 pactl move-sink-input "$input" "$sink_name" 2>/dev/null || true
|
|
done
|