Як зазначав @ Teresa-e-Junior, pactlце інструмент для використання:
Перш за все, ми можемо захотіти отримати ідентифікатори наших мийок ПА. У моїй системі це те, що я отримую:
$ pactl list short sinks
0 alsa_output.pci-0000_01_00.1.hdmi-surround module-alsa-card.c s16le 6ch 44100Hz SUSPENDED
1 alsa_output.pci-0000_00_1b.0.analog-stereo module-alsa-card.c s16le 2ch 44100Hz RUNNING
Раковина 1 - це моя раковина за замовчуванням.
Але тепер я хочу, щоб усі мої поточні та майбутні потоки відтворювалися через HDMI (тобто раковина 0).
Є команда встановити мийку за замовчуванням для PulseAudio, але, схоже, це не вплине на мій ПК:
$ pacmd set-default-sink 0 #doesn't work on my PC :(
Натомість нові потоки, здається, підключені до раковини, яка останнім часом перемістилася до неї.
Тож давайте скажемо Pactl, щоб перемістити всі поточні потокові потоки, щоб потонути 0. Спочатку нам потрібно перерахувати їх:
$ pactl list short sink-inputs
290 1 176 protocol-native.c float32le 2ch 44100Hz
295 1 195 protocol-native.c float32le 2ch 44100Hz
Гаразд, у нас є два потоки (ідентифікатори 290 і 295), які приєднані до мийки 1.
Давайте перенесемо їх на раковину 0:
$ pactl move-sink-input 290 0
$ pactl move-sink-input 295 0
Отже, так і повинно бути. Тепер нам залишається лише скласти сценарій, який виконує нашу роботу:
#!/bin/bash
if [ -z "$1" ]; then
echo "Usage: $0 <sinkId/sinkName>" >&2
echo "Valid sinks:" >&2
pactl list short sinks >&2
exit 1
fi
newSink="$1"
pactl list short sink-inputs|while read stream; do
streamId=$(echo $stream|cut '-d ' -f1)
echo "moving stream $streamId"
pactl move-sink-input "$streamId" "$newSink"
done
Ви можете викликати його як ідентифікатором мийки, або ім'ям раковини як параметру (тобто, 0або чимось подібним alsa_output.pci-0000_01_00.1.hdmi-surround).
Тепер ви можете приєднати цей скрипт до події udev або ярлика клавіш.
man pactlпараметрами командного рядка PulseAudio.