Cum se configurează un script de comutare a ieșirii audio PipeWire pe Debian

Cea mai simplă metodă fiabilă de a comuta ieșirile PipeWire dintr-un script pe Debian este să utilizați wpctl, instrumentul din linia de comandă WirePlumber: identificați cele două noduri sink care vă interesează, inspectați sink-ul implicit curent și apelați wpctl set-default IDcelălalt. Acest lucru este preferabil codării hard a unui ID numeric de nod, deoarece ID-urile obiectului PipeWire se pot schimba atunci când dispozitivele se deconectează, se reconecta sau sesiunea repornește.

Acest ghid folosește o funcție de comutare pentru două dispozitive — de exemplu, difuzoare pentru laptop și căști Bluetooth — și menține în mod deliberat logica compatibilă atât cu Debian 13 (Trixie), cât și cu Debian 12 (Bookworm) actual. Începând cu octombrie 2026, paginile de pachete Debian listează WirePlumber 0.5.8 în Debian 13 și 0.4.13 în Debian 12. Versiunile mai noi de WirePlumber oferă funcții suplimentare de listare, dar wpctl status -n, wpctl inspect, și wpctl set-defaultsunt numitorul comun necesar aici.

Când această metodă este potrivită

Folosește această abordare atunci când PipeWire gestionează deja sunetul desktopului și dorești o comandă rapidă de la tastatură, un launcher, un alias de shell sau o tastă rapidă pentru a alterna între două ieșiri. Funcționează bine pentru o ieșire analogică încorporată plus DAC USB, monitor HDMI, căști Bluetooth sau alt receptor care apare în secțiunea Receptoare din wpctl status.

Nu este instrumentul potrivit pentru fiecare problemă de rutare. wpctl set-defaultmodifică ținta implicită utilizată pentru fluxurile care necesită conexiune automată. Nu promite că fiecare aplicație care rulează deja va migra imediat un flux existent. Unele aplicații urmează automat noua implicită; altele pot necesita mutarea separată a fluxului sau repornirea aplicației.

Înainte de a scrie scenariul

Confirmați că sesiunea PipeWire și WirePlumber la nivel de utilizator este sănătoasă. Documentația oficială WirePlumber recomandă verificarea daemonului cu systemctl --user status wireplumber. Debian recomandă, de asemenea, pipewire-audiometapachetul pe Debian 12 și versiuni mai noi atunci când configurați o stivă audio PipeWire completă.

systemctl --user status wireplumber
systemctl --user status pipewire pipewire-pulse

Dacă wpctllipsește, instalați WirePlumber și componentele audio normale PipeWire în loc să încercați să înlocuiți cu un utilitar mixer fără legătură:

sudo apt update
sudo apt install pipewire-audio wireplumber

Nu rulați wpctlcu sudo. PipeWire și WirePlumber funcționează în mod normal în sesiunea utilizatorului desktop, așadar comanda ar trebui să se conecteze la graficul media al utilizatorului respectiv.

Pasul 1: Găsiți numele receptorilor de ieșire

Aleargă:

wpctl status -n

Opțiunea -nsolicită wpctlafișarea numelor obiectelor în loc de descrieri ușor de înțeles. Sub Audio → Sinks (Receptoare) , notați numele celor două ieșiri pe care doriți să le comutați. O mașină ar putea afișa un receptor încorporat asemănător cu alsa_output.pci-0000_00_1f.3.analog-stereoși un receptor Bluetooth care începe cu bluez_output..

Terminal Debian care afișează starea wpctl -n cu un sink analogic încorporat și un sink Bluetooth listat la Sink-uri audio
O vedere reprezentativă a terminalului wpctl status -n: identificați fragmente de nume stabile în secțiunea Sinks, în loc să copiați ID-uri numerice în script.

Alegeți un fragment suficient de distinct pentru a se potrivi doar cu ieșirea dorită. Pentru o placă încorporată, alsa_output...numele complet al nodului este de obicei o alegere rezonabilă. Pentru un dispozitiv Bluetooth, un bluez_output.fragment mai scurt este convenabil numai dacă în mod normal aveți conectat un singur receptor audio Bluetooth. Dacă conectați frecvent mai multe ieșiri Bluetooth, utilizați un fragment mai lung, unic pentru dispozitivul dorit.

Pasul 2: Verificați un sink cu wpctl inspect

Înainte de a programa switch-ul, verificați unul dintre ID-urile afișate de wpctl status -n:

wpctl inspect 45

Înlocuiți 45cu ID-ul curent de pe sistemul dvs. Căutați proprietăți precum node.nameși media.class. Pentru o ieșire de redare, media.classar trebui să identifice un receptor audio. ID-ul numeric este util pentru inspecție și pentru set-defaultcomanda imediată, dar scriptul de mai jos rezolvă un ID nou de fiecare dată când rulează.

Terminal Debian care afișează ieșirea wpctl inspect cu node.name pentru un sink audio încorporat și media.class Audio Sink
Inspectarea unui sink confirmă numele nodului cu care se va potrivi scriptul și ajută la distingerea unui sink de redare de o sursă sau de un obiect PipeWire fără legătură.

De asemenea, puteți întreba WirePlumber care este chiuveta implicită în prezent, fără a cunoaște ID-ul său numeric:

wpctl inspect @DEFAULT_AUDIO_SINK@

Identificatorul special @DEFAULT_AUDIO_SINK@este documentat de WirePlumber și se rezolvă în timpul execuției ca nodul de redare implicit curent.

Pasul 3: Creați un script de comutare cu două ieșiri

Creați un director executabil personal, dacă este necesar, apoi deschideți scriptul:

mkdir -p ~/.local/bin
nano ~/.local/bin/toggle-audio-output

Lipiți următorul cod și înlocuiți SINK_Ași SINK_Bcu fragmente din propria wpctl status -nieșire:

#!/usr/bin/env bash
set -euo pipefail

# Replace these with distinctive fragments from `wpctl status -n`.
SINK_A="alsa_output.pci-0000_00_1f.3.analog-stereo"
SINK_B="bluez_output."

find_sink_id() {
    local needle="$1"
    wpctl status -n | awk -v n="$needle" '
        /Sinks:/   { in_sinks=1; next }
        /Sources:/ { in_sinks=0 }
        in_sinks && index($0, n) {
            for (i=1; i<=NF; i++) {
                if ($i ~ /^[0-9]+\.$/) {
                    gsub(/\./, "", $i)
                    print $i
                    exit
                }
            }
        }'
}

current_name="$(
    wpctl inspect @DEFAULT_AUDIO_SINK@ |
    awk -F'= ' '/node.name/ {
        gsub(/"/, "", $2)
        print $2
        exit
    }'
)"

if [[ "$current_name" == *"$SINK_A"* ]]; then
    target_pattern="$SINK_B"
elif [[ "$current_name" == *"$SINK_B"* ]]; then
    target_pattern="$SINK_A"
else
    # If the current default is neither target, switch to A first.
    target_pattern="$SINK_A"
fi

target_id="$(find_sink_id "$target_pattern")"

if [[ -z "$target_id" ]]; then
    printf 'No available sink matched: %s\n' "$target_pattern" >&2
    exit 1
fi

wpctl set-default "$target_id"
printf 'Default audio sink changed to ID %s\n' "$target_id"
Editor Nano într-un terminal Debian care afișează un script Bash ce identifică două nume de sink-uri PipeWire și modifică sink-ul implicit cu wpctl
Scriptul de comutare ar trebui să potrivească dinamic numele sink-urilor, să determine valoarea implicită curentă și să rezolve ID-ul curent al obiectului țintă înainte de a apela wpctl set-default.

De ce scriptul rezolvă ID-urile de fiecare dată

ID-urile obiectelor PipeWire sunt obiecte de sesiune, așadar tratarea unui ID, cum ar fi 45un identificator permanent de dispozitiv, este fragilă. Scriptul stochează în schimb fragmente de nume de nod recognoscibile, analizează secțiunea Sinks curentă și extrage ID-ul numeric doar în momentul comutării.

De ce folosește wpctl inspect pentru implicit curent

Scriptul solicită @DEFAULT_AUDIO_SINK@numele său node.name. Aceasta evită dependența de plasarea vizuală a unui asterisc în wpctl statusatunci când se stabilește ce sink este selectat în prezent. Apoi compară acel nume cu SINK_Ași SINK_B.

Pasul 4: Faceți scriptul executabil și testați-l

Salvați fișierul, apoi executați:

chmod +x ~/.local/bin/toggle-audio-output
~/.local/bin/toggle-audio-output
wpctl status -n

Dacă sink-ul țintă este disponibil, scriptul ar trebui să afișeze ID-ul selectat. Rulați-l din nou și ar trebui să aleagă celălalt sink configurat. Confirmați rezultatul cu wpctl status -nsau inspectând @DEFAULT_AUDIO_SINK@.

Terminal Debian după rularea unui script executabil de comutare audio, cu starea wpctl afișând sink-ul Bluetooth ca ieșire implicită
După rularea scriptului, verificați wpctl status -ndacă sink-ul dorit este acum implicit.

WirePlumber documentează wpctl set-default IDsetarea unui receptor sau a unei surse ca țintă implicită. În WirePlumber modern, acea selecție a utilizatorului este memorată și poate depăși selecția automată bazată pe prioritate. Dacă doriți ulterior ca WirePlumber să revină la selecția automată implicită, utilizați:

wpctl clear-default

Adăugați scriptul la o comandă rapidă de la tastatură

Odată ce testul terminalului este fiabil, asociați-l /home/YOUR_USER/.local/bin/toggle-audio-outputcu o comandă rapidă de pe desktop. Folosiți calea absolută mai degrabă decât, ~deoarece unele programe de lansare a comenzilor rapide nu extind comanda rapidă din shell. Interfața exactă a comenzii rapide depinde de mediul desktop, așa că testul important este ca scriptul să funcționeze corect mai întâi dintr-un terminal de utilizator normal.

Dacă o comandă rapidă rulează, dar wpctlraportează că nu se poate conecta, este posibil ca programul de lansare să nu moștenească mediul de sesiune al utilizatorului așteptat. Verificați aceeași comandă dintr-un terminal din sesiunea grafică, apoi examinați regulile de execuție a comenzilor rapide din mediul desktop. Nu rezolvați această problemă adăugând scriptului prefixul sudo.

Depanarea defecțiunilor comune

„Nicio chiuvetă disponibilă potrivită”

Probabil că ținta este deconectată, numele nodului său s-a schimbat sau modelul este prea specific. Executați wpctl status -ndin nou și actualizați valoarea corespunzătoare SINK_Asau SINK_B. Pentru Bluetooth, confirmați că setul cu cască este conectat și a expus un receptor audio înainte de a invoca scriptul.

Scriptul schimbă setarea implicită, dar sunetul existent continuă să fie redat în altă parte.

Acest lucru poate fi normal. Documentația din amonte descrie set-defaultselectarea țintei pentru fluxurile noi care necesită conectare automată. Dacă fluxul existent al unei anumite aplicații rămâne pe vechiul receptor, opriți și reporniți redarea sau redeschideți aplicația. Dacă trebuie în mod specific să migrați fluxurile existente, tratați acest lucru ca pe o sarcină de rutare separată, în loc să presupuneți că set-defaulto garantează.

Este selectat dispozitivul Bluetooth greșit

Faceți SINK_Bmai specific. Un model generic, cum ar fi bluez_output.este potrivit doar atunci când este prezent un receptor Bluetooth corespunzător. Folosiți numele complet al nodului sau un fragment unic din mijloc atunci când pot fi conectate simultan mai multe ieșiri wireless.

WirePlumber nu rulează

Verifica:

systemctl --user status wireplumber
journalctl --user -u wireplumber

Documentația anterioară recomandă systemctl --user --now enable wireplumbersituațiile în care daemonul este instalat, dar nu este activat. Pe un desktop Debian deja configurat, investigați de ce serviciul utilizator s-a oprit înainte de a reporni în mod repetat întreaga stivă audio.

Debian 12 versus Debian 13: ce schimbări?

Lansare DebianPachet WirePlumberImplicații practice pentru acest scenariu
Debian 12 (Cititor)0.4.13 în depozitul standardUtilizați fluxul de lucru compatibil wpctl status -n, inspect, și set-defaultafișat aici.
Debian 13 (Trixie)0.5.8 în depozitul standardAcelași script funcționează; versiunea mai nouă a WirePlumber are, de asemenea, un comportament de configurare extins bazat pe CLI și JSON.

Nu copiați orbește exemple de configurare WirePlumber 0.5 într-o instalare mai veche, versiunea 0.4. WirePlumber 0.5 și-a modificat sistemul de configurare; acest tutorial evită această limită de versiune folosind operațiuni din linia de comandă în loc de fișiere de politici persistente.

Listă de verificare rapidă

  • systemctl --user status wireplumberarată managerul de sesiuni în funcțiune.
  • wpctl status -nlistează ambele ieșiri dorite în secțiunea Sinks.
  • wpctl inspect @DEFAULT_AUDIO_SINK@returnează un nod de redare curent valid.
  • Cele două modele de script identifică în mod unic sink-urile vizate.
  • Rularea scriptului de două ori alternează implicit între cele două ieșiri.
  • Dacă o aplicație existentă nu se mută, înțelegeți că selecția implicită și migrarea fluxului activ sunt comportamente separate.

Referințe primare

Pentru semantica comenzilor și comportamentul actual al WirePlumber, consultați manualul oficial WirePlumber wpctl și ghidul oficial de introducere WirePlumber . Pentru informații despre pachete și configurare specifice Debian, utilizați documentația Debian PipeWire , pagina pachetului Debian 12 WirePlumber și pagina pachetului Debian 13 WirePlumber .

Lasă un comentariu

Descărcați FlightGear gratuit: Ghid oficial de instalare

Descărcați FlightGear gratuit: Ghid oficial de instalare

Descarcă FlightGear gratuit de pe site-ul oficial. Compară pachetele Windows, macOS și Linux, instalează fișierele de date și începe primul tău zbor.

Aplicația desktop Google Tasks: Cum se utilizează pe computer

Aplicația desktop Google Tasks: Cum se utilizează pe computer

Deschide Google Tasks într-un browser, adaugă o comandă rapidă pentru Chrome sau o lansare în stilul aplicației și gestionează activitățile de făcut în avans prin Calendar și Gmail.

OKSampler: Un sampler muzical gratuit și simplu pentru ritmuri de claviatură

OKSampler: Un sampler muzical gratuit și simplu pentru ritmuri de claviatură

OKSampler mapează clipuri MP3 pe tastele tastaturii și poate reda audio în buclă. Află ce face software-ul gratuit vechi, unde se termină funcțiile sale vechi și ce trebuie să verifici înainte de descărcare.

Cum să joci Don't Starve Together pe Linux

Cum să joci Don't Starve Together pe Linux

Instalează versiunea Linux a jocului Don't Starve Together prin Steam, creează o lume sau alătură-te prietenilor urmând acești pași de configurare și depanare.

Cum să joci Squad pe Linux cu Steam Proton

Cum să joci Squad pe Linux cu Steam Proton

Configurează Squad pe Linux cu Steam Play și Proton, instalează jocul, alege un instrument de compatibilitate și depanează problemele anti-cheat.

Cum se instalează Linux Mint Debian Edition 5 „Elsie” de pe USB

Cum se instalează Linux Mint Debian Edition 5 „Elsie” de pe USB

Descărcați și verificați fișierul ISO LMDE 5 arhivat, creați un USB bootabil și alegeți setările de instalare sigure. Elsie a ajuns la sfârșitul duratei de viață; consultați versiunea curentă a LMDE.

Cum se creează o unitate USB bootabilă cu Windows 11 pe Linux

Cum se creează o unitate USB bootabilă cu Windows 11 pe Linux

Creați un USB de instalare Windows 11 pe Linux cu Ventoy: obțineți fișierul ISO oficial, instalați Ventoy în siguranță, copiați imaginea și porniți PC-ul țintă.

Cum se instalează Wireshark pe Linux: Ubuntu, Fedora, Arch și altele

Cum se instalează Wireshark pe Linux: Ubuntu, Fedora, Arch și altele

Instalați Wireshark pe Ubuntu, Debian, Fedora, Arch sau openSUSE cu comenzile actuale ale pachetului, apoi configurați captura de pachete live în siguranță.

Cum se joacă DiRT Rally pe Linux: Configurarea Steam și remedierile Proton

Cum se joacă DiRT Rally pe Linux: Configurarea Steam și remedierile Proton

Învață cum să joci DiRT Rally pe Linux dacă îl deții deja pe Steam: instalează versiunea nativă, lansează-l și folosește Proton doar ca soluție de rezervă.

Cum se instalează Devuan Linux de pe un USB bootabil

Cum se instalează Devuan Linux de pe un USB bootabil

Instalați Devuan Excalibur din fișierul ISO Desktop Live. Verificați descărcarea, creați un USB bootabil, protejați partițiile existente și finalizați configurarea cu Refracta Installer.