переключение устройств воспроизведения в pulseaudio

На моем компьютере есть два устройства воспроизведения звука: встроенная в материнскую плату, подключенная к колонкам, и внешняя с подключением по usb, к которой подключены наушники. Задача: настроить переключение между этими двумя устройствами (т.е. в моем случае это переключение между наушники и колонками) по нажатию клавиш Meta-a. В качестве звукового сервера используется pulseaudio.

Для начала нужно вывести список на экран список доступных звуковых потоков воспроизведения (sink’ов):

pactl list short sinks | awk '{print $2}'

В моем случае это:

alsa_output.usb-Burr-Brown_from_TI_USB_Audio_CODEC-00.analog-stereo-output
alsa_output.pci-0000_00_1f.3.analog-stereo

То, что надо. Теперь напишем скрипт, который бы переключался между этими sink’ами при выполнении:

vim ~/scripts/sink_toggle.sh:
#!/bin/bash

# названия нужных нам sink'ов берем из  pactl list short sinks | awk '{print $2}'
# внутрення звуковая карта (колонки)
SINK1="alsa_output.pci-0000_00_1f.3.analog-stereo" 
# внешняя звуковая карта (наушники)
SINK2="alsa_output.usb-Burr-Brown_from_TI_USB_Audio_CODEC-00.analog-stereo-output"

# устанавливаем нужный нам sink дефолтным 
CURRENT_SINK=$(pactl get-default-sink)
if [ "$CURRENT_SINK" = "$SINK1" ]; then
pactl set-default-sink $SINK2
NEW_SINK=$SINK2
else
pactl set-default-sink $SINK1
NEW_SINK=$SINK1
fi

# перенаправляем все звуковые потоки на нужный sink
pactl list short sink-inputs | while read stream; do
stream_id=$(echo $stream | cut '-d ' -f1)
pactl move-sink-input $stream_id $NEW_SINK
done

Этот shell-скрипт перенаправляет все текущие аудиопотоки (звуковые входы), воспроизводимые в системе, на новый звуковой выход ($NEW_SINK). Скрипт использует утилиту pactl для управления звуковым сервером PulseAudio.

Делаем скрипт исполняемым:

sudo chmod +x ~/scripts/sink_toggle.sh

Осталось только настроить триггер для выполнения скрипта. В качестве триггера я буду использовать сочетание клавиш Meta+a. В KDE Plasma это настраивается элементарно в системных настройках.