Acasă
» Sfaturi pentru PC
»
Construiți un script de comutare a ieșirii PipeWire care mută sunetul activ
Construiți un script de comutare a ieșirii PipeWire care mută sunetul activ
Pentru o mică comutare audio Debian, utilizați pactlprin serverul compatibil cu PulseAudio de la PipeWire. Scriptul de mai jos comută între două ieșiri denumite, setează noua valoare implicită și mută fluxurile de redare care sunt deja deschise. Înlocuiți numele sink-urilor de exemplu cu numele exacte afișate pe mașina dvs.
1. Confirmați serverul PipeWire Pulse și găsiți ieșirile
Componenta PipeWire pipewire-pulseoferă un server compatibil cu PulseAudio, astfel încât instrumente standard precum pactlpot controla receptorii (ieșirile audio) acestuia. Verificați la ce server ajunge clientul dvs. și enumerați receptorii disponibili:
pactl info | grep -E 'Server Name|Server Version'
pactl list short sinks
Pentru această procedură, numele serverului ar trebui să menționeze PipeWire. Lista de receptori conține nume simbolice, cum ar fi alsa_output.pci-0000_00_1f.3.analog-stereo. Copiați exact două nume: câte unul pentru fiecare ieșire între care doriți să comutați. Aceste nume sunt specifice hardware-ului conectat și profilului audio; nu copiați nume din exemplu și nu utilizați un index numeric al receptorului, care se poate schimba în timpul unei sesiuni.
Dacă pactllipsește, Debian îl oferă în pulseaudio-utils. Instalați pachetul client respectiv doar dacă este necesar. Dacă pactl infonu vă puteți conecta sau raportează un server de sunet diferit, confirmați mai întâi că înlocuitorul PulseAudio de la PipeWire rulează în sesiunea de utilizator; nu instalați și nu schimbați serverele audio orbește.
Copiați numele exacte ale sink-urilor simbolice din lista de ieșiri live înainte de a completa scriptul de comutare.
2. Creați scriptul de comutare
Creați un director de scripturi per utilizator și deschideți un fișier nou:
Lipiți acest script, înlocuind ambele valori din SINK_Ași SINK_Bcu numele pe care le-ați copiat:
#!/usr/bin/env bash
set -euo pipefail
SINK_A='alsa_output.pci-0000_00_1f.3.analog-stereo'
SINK_B='alsa_output.usb-Generic_Headset-00.analog-stereo'
command -v pactl >/dev/null || { echo "pactl is missing" >&2; exit 1; }
server_name=$(pactl info | sed -n 's/^Server Name: //p')
case "$server_name" in
*PipeWire*) ;;
*) echo "pactl is not connected to PipeWire's Pulse server" >&2; exit 1 ;;
esac
sinks=$(pactl list short sinks | awk '{print $2}')
for sink in "$SINK_A" "$SINK_B"; do
if ! grep -Fqx -- "$sink" <<< "$sinks"; then
printf 'Sink not found: %s\n' "$sink" >&2
exit 1
fi
done
current=$(pactl get-default-sink)
if [[ "$current" == "$SINK_A" ]]; then
target=$SINK_B
else
target=$SINK_A
fi
pactl set-default-sink "$target"
while IFS= read -r input_id; do
[[ -n "$input_id" ]] || continue
pactl move-sink-input "$input_id" "$target"
done < <(pactl list short sink-inputs | awk '{print $1}')
printf 'Default output: %s\n' "$target"
Scriptul verifică dacă ambele ieșiri sunt prezente înainte de a modifica orice. Alege cealaltă ieșire configurată atunci când valoarea implicită curentă este SINK_A; dacă valoarea implicită curentă este un alt receptor, începe cu SINK_A. set-default-sinkComanda afectează fluxurile noi, în timp ce bucla folosește move-sink-inputpentru a direcționa și fluxurile de redare existente. Dacă doriți ca aplicațiile viitoare să utilizeze noua valoare implicită doar, eliminați whilebucla; fluxurile deja redate vor rămâne acolo unde sunt. Rulați acest script ca același utilizator desktop conectat care deține sesiunea PipeWire. Nu utilizați , care se poate conecta printr-un alt runtime de utilizator și nu reușește să controleze sunetul desktopului. Aceste operațiuni sunt documentate în manualul pactlsudo al Debian .
Setați fiecare variabilă la unul dintre numele sink-urilor raportate de pactl în această sesiune Debian.
3. Salvați, rulați și verificați comutatorul
Salvați în Nano cu Ctrl+O, apăsați Enter, apoi ieșiți cu Ctrl+X. Marcați executabilul scriptului și rulați-l:
Ar trebui să afișeze noul sink implicit. Verificați implicitul curent al serverului și orice fluxuri de redare active:
pactl get-default-sink
pactl list short sink-inputs
Rulați scriptul a doua oară pentru a reveni la modul inițial. Pentru o verificare practică a ascultării, redați un scurt eșantion audio în timp ce comutați și confirmați că provine de la dispozitivul selectat. Numele exacte ale dispozitivelor și comportamentul de afișare variază în funcție de hardware, starea conexiunii Bluetooth și profilurile audio active.
Scriptul care raportează ieșirea denumită a devenit noua opțiune implicită.Confirmați sink-ul implicit și verificați dacă un flux activ este direcționat către ieșirea selectată.
Când scenariul nu schimbă sunetul
„Sink not found”: rulați pactl list short sinksdin nou. Este posibil ca o cască deconectată sau un profil modificat să fi modificat numele sink-ului; actualizați variabila corespunzătoare.
Nu se poate conecta: verificați dacă serviciile utilizator PipeWire rulează și dacă acestea pactl infoidentifică serverul PipeWire Pulse. Pachetul pipewire-pulse din Debian oferă serverul de înlocuire, în timp ce pulseaudio-utils include pactlclientul.
Se mișcă noua secțiune audio, dar o aplicație curentă nu: rulează din nou scriptul în timp ce fluxul respectiv este vizibil în pactl list short sink-inputs. Unele aplicații redeschid fluxurile sau își păstrează propria selecție de dispozitive, așa că alegeți „Implicit” în aplicația respectivă dacă rămâne fixat la o ieșire.
Documentația Protocol Pulse de la PipeWire explică de ce clienții din linia de comandă PulseAudio pot controla PipeWire atunci când pipewire-pulseeste serverul activ. Acest script folosește acel strat de compatibilitate; nu configurează profiluri hardware și nu garantează că un dispozitiv deconectat va fi disponibil.