промучавшись вчера с этим несколько часов, решил запостить решение на ЛОР.
задача: есть домашний сервер, в одной сети с ноутбуком, на сервере - PulseAudio (слушает по TCP), к серверу подключена акустика; нужно перебрасывать аудиопоток с ноутбука на сервер/обратно по хоткею.
решение: нам понадобится PulseAudio (локальный сервер+клиент) на клиенте (ноутбук), PulseAudio Сервер (с плагином TCP) и нехитрый скрипт.
(на сервере) default.pa:
load-module module-native-protocol-tcp auth-ip-acl=127.0.0.0/16;10.8.12.0/24
(на клиенте) switch-sink.sh:
#!/bin/bash
# settings
pulse_server=10.8.12.94
# connect to server
pacmd list-sinks | grep -q tunnel-sink.$pulse_server || pacmd load-module module-tunnel-sink server=$pulse_server
# get vars
default_sink=$(pacmd list-sinks | sed -n $(( `pacmd list-sinks | grep -n alsa_output| grep -v hdmi | cut -d: -f1`-1 ))p | grep -oE [0-9])
server_sink=$(pacmd list-sinks | sed -n $(( `pacmd list-sinks | grep -n tunnel-sink.$pulse_server|cut -d: -f1`-1 ))p | grep -oE [0-9])
current_sink=$(pacmd list-sinks|grep '*'|awk '{ print $3 }')
# debug
# echo "local [$default_sink] server($pulse_server) [$server_sink] current [$current_sink]"
# what's sink?
case $current_sink in
$default_sink)
# default sink. moving to server sink.
pacmd set-default-sink $server_sink
pacmd list-sink-inputs | grep index | while read line; do
pacmd move-sink-input $(echo $line | cut -f2 -d' ') $server_sink
done
notify-send -i notification-audio-volume-medium "Playback Device" "Now on Server Sink ($pulse_server)";;
$server_sink)
# server sink. moving to server sink.
pacmd set-default-sink $default_sink
pacmd list-sink-inputs | grep index | while read line; do
pacmd move-sink-input $(echo $line | cut -f2 -d' ') $default_sink
done
notify-send -i notification-audio-volume-medium "Playback Device" "Now on Default Sink (local device)";;
*)
echo "What to do? Current sink - [$current_sink] not local/server."
esac
никакие параметры скрипт не принимает. в скрипте используется также libnotify для наглядности переключения.
собственно, всё :3 // в вики лень пилить