Як зазначав @ 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.