Home
» PC Tips
»
Crea uno script PipeWire per attivare/disattivare l'uscita audio e spostare l'audio attivo.
Crea uno script PipeWire per attivare/disattivare l'uscita audio e spostare l'audio attivo.
Per un semplice interruttore audio su Debian, utilizzare pactlil server compatibile con PulseAudio di PipeWire. Lo script seguente commuta tra due uscite audio denominate, imposta la nuova predefinita e sposta i flussi di riproduzione già aperti. Sostituire i nomi dei file di output con i nomi esatti visualizzati sul proprio sistema.
1. Conferma il server PipeWire Pulse e trova i tuoi output
Il componente di PipeWire pipewire-pulsefornisce un server compatibile con PulseAudio, quindi strumenti standard come pactlpossono controllarne i sink (uscite audio). Verifica a quale server si connette il tuo client ed elenca i sink disponibili:
pactl info | grep -E 'Server Name|Server Version'
pactl list short sinks
Per questa procedura, il nome del server deve includere PipeWire. L'elenco dei sink contiene nomi simbolici come alsa_output.pci-0000_00_1f.3.analog-stereo. Copia esattamente due nomi: uno per ogni uscita tra cui desideri alternare. Questi nomi sono specifici dell'hardware connesso e del profilo audio; non copiare i nomi dall'esempio né utilizzare un indice di sink numerico, che può cambiare durante una sessione.
Se pactlmanca, Debian lo fornisce in pulseaudio-utils. Installa quel pacchetto client solo se necessario. Se pactl infonon riesci a connetterti o segnala un server audio diverso, verifica prima che il sostituto di PulseAudio di PipeWire sia in esecuzione nella tua sessione utente; non installare o cambiare server audio alla cieca.
Copia i nomi simbolici esatti dei sink dall'elenco di output live prima di compilare lo script di attivazione/disattivazione.
2. Crea lo script di attivazione/disattivazione
Crea una directory per gli script di ciascun utente e apri un nuovo file:
Incolla questo script, sostituendo entrambi i valori in SINK_Ae SINK_Bcon i nomi che hai copiato:
#!/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"
Lo script verifica che entrambe le uscite siano presenti prima di apportare qualsiasi modifica. Sceglie l'altra uscita configurata quando quella predefinita corrente è SINK_A; se quella predefinita corrente è un altro sink, inizia con SINK_A. Il set-default-sinkcomando influisce sui nuovi stream, mentre il ciclo utilizza move-sink-inputper instradare anche gli stream di riproduzione esistenti. Se si desidera che solo le app future utilizzino la nuova impostazione predefinita, rimuovere il whileciclo; gli stream già in riproduzione rimarranno nella posizione in cui si trovano. Eseguire questo script come lo stesso utente desktop connesso che possiede la sessione PipeWire. Non utilizzare , che può connettersi tramite un runtime utente diverso e non riuscire a controllare l'audio del desktop. Queste operazioni sono documentate nel manuale pactlsudo di Debian .
Imposta ciascuna variabile su uno dei nomi di sink segnalati da pactl in questa sessione Debian.
3. Salva, esegui e verifica l'interruttore
Salva in Nano con Ctrl+O, premi Enter, quindi esci con Ctrl+X. Rendi lo script eseguibile ed eseguilo:
Dovrebbe stampare il nuovo sink predefinito. Controlla il sink predefinito corrente del server e gli eventuali stream di riproduzione attivi:
pactl get-default-sink
pactl list short sink-inputs
Esegui lo script una seconda volta per tornare al dispositivo precedente. Per una verifica pratica, riproduci un breve campione audio durante il passaggio e conferma che provenga dal dispositivo selezionato. I nomi esatti dei dispositivi e il comportamento di visualizzazione variano in base all'hardware, allo stato della connessione Bluetooth e ai profili audio attivi.
Lo script segnala quale output denominato è diventato il nuovo predefinito.Conferma il sink predefinito e verifica che un flusso attivo sia instradato all'output selezionato.
Quando la sceneggiatura non cambia l'audio
"Sink non trovato": eseguire pactl list short sinksnuovamente l'operazione. La disconnessione delle cuffie o la modifica del profilo potrebbero aver alterato il nome del sink; aggiornare la variabile corrispondente.
Impossibile connettersi: verificare che i servizi utente di PipeWire siano in esecuzione e che identifichino il server PipeWire Pulse. Il pacchetto pipewire-pulsepactl info di Debian fornisce questo server sostitutivo, mentre pulseaudio-utils include il client.pactl
Il nuovo flusso audio si sposta ma l'app corrente no: esegui nuovamente lo script mentre il flusso è visibile in pactl list short sink-inputs. Alcune applicazioni riaprono i flussi o mantengono la propria selezione del dispositivo, quindi scegli "Predefinito" in quell'applicazione se rimane bloccata su un output.
La documentazione di Protocol Pulse di PipeWire spiega perché i client da riga di comando di PulseAudio possono controllare PipeWire quando quest'ultimo pipewire-pulseè il server attivo. Questo script utilizza tale livello di compatibilità; non configura profili hardware né garantisce la disponibilità di un dispositivo disconnesso.