ดังที่ @ Teresa-e-Junior ชี้ให้เห็นว่าpactl
เป็นเครื่องมือที่ใช้:
ก่อนอื่นเราอาจต้องการรับรหัสประจำตัวของอ่างล้างมือ PA ของเรา ในระบบของฉันนี่คือสิ่งที่ฉันได้รับ:
$ 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
Sink 1 เป็นอ่างเริ่มต้นของฉันในปัจจุบัน
แต่ตอนนี้ฉันต้องการให้สตรีมปัจจุบันและอนาคตทั้งหมดของฉันเล่นผ่าน HDMI (เช่น sink 0)
มีคำสั่งให้ตั้งค่า sink เริ่มต้นสำหรับ 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
คุณสามารถเรียกมันด้วย sink ID หรือชื่อ sink เป็นพารามิเตอร์ (เช่นอย่างใดอย่างหนึ่ง0
หรือบางอย่างalsa_output.pci-0000_01_00.1.hdmi-surround
)
ตอนนี้คุณสามารถแนบสคริปต์นี้กับเหตุการณ์ udev หรือแป้นพิมพ์ลัด
man pactl
ตัวเลือกบรรทัดคำสั่งของ PulseAudio