На моем компьютере есть два устройства воспроизведения звука: встроенная в материнскую плату, подключенная к колонкам, и внешняя с подключением по 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 это настраивается элементарно в системных настройках.