Accueil
» Conseils PC
»
Créez un script de bascule de sortie PipeWire qui déplace la sortie audio active.
Créez un script de bascule de sortie PipeWire qui déplace la sortie audio active.
Pour une simple bascule entre les sorties audio sous Debian, utilisez pactlle serveur compatible PulseAudio de PipeWire. Le script ci-dessous permet de basculer entre deux sorties nommées, de définir la nouvelle sortie par défaut et de déplacer les flux de lecture déjà ouverts. Remplacez les noms des sorties audio par ceux correspondant exactement à ceux de votre machine.
1. Confirmez le serveur PipeWire Pulse et trouvez vos sorties.
Le composant PipeWire pipewire-pulsefournit un serveur compatible PulseAudio, permettant ainsi aux outils standards pactlde contrôler ses sorties audio. Vérifiez le serveur auquel votre client se connecte et listez les sorties disponibles :
pactl info | grep -E 'Server Name|Server Version'
pactl list short sinks
Pour cette procédure, le nom du serveur doit mentionner PipeWire. La liste des sorties contient des noms symboliques alsa_output.pci-0000_00_1f.3.analog-stereo. Copiez exactement deux noms : un pour chaque sortie entre laquelle vous souhaitez basculer. Ces noms sont spécifiques au matériel connecté et au profil audio ; ne copiez pas les noms de l’exemple et n’utilisez pas d’index numérique de sortie, car celui-ci peut changer au cours d’une session.
Si le client pactlest manquant, Debian le fournit pulseaudio-utils. Installez-le uniquement si nécessaire. En cas pactl infod'impossibilité de connexion ou si un autre serveur audio est détecté, vérifiez d'abord que le serveur audio de remplacement de PipeWire est bien en cours d'exécution dans votre session utilisateur ; n'installez ni ne changez de serveur audio sans précaution.
Copiez les noms exacts des récepteurs symboliques à partir de la liste de sortie en direct avant de remplir le script de basculement.
2. Créez le script de bascule
Créez un répertoire de scripts par utilisateur et ouvrez un nouveau fichier :
Collez ce script en remplaçant les deux valeurs dans SINK_Aet SINK_Bpar les noms que vous avez copiés :
#!/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"
Le script vérifie la présence des deux sorties avant toute modification. Il sélectionne l'autre sortie configurée si la sortie par défaut est définieSINK_A ; si la sortie par défaut est différente, il démarre avec la sortie par défaut SINK_A. La set-default-sinkcommande affecte les nouveaux flux, tandis que la boucle permet move-sink-inputégalement d'acheminer les flux de lecture existants. Si vous souhaitez uniquement que les futures applications utilisent la nouvelle sortie par défaut, supprimez la whileboucle ; les flux en cours de lecture resteront inchangés. Exécutez ce script avec le même compte utilisateur connecté que celui qui gère la session PipeWire. N'utilisez pas la commande `pactl` sudo, qui peut se connecter via un environnement d'exécution utilisateur différent et ne pas contrôler l'audio de votre bureau. Ces opérations sont documentées dans le manuel `pactl` de Debian .
Attribuez à chaque variable l'un des noms de récepteurs signalés par pactl sur cette session Debian.
3. Enregistrez, exécutez et vérifiez le commutateur
Enregistrez le script dans Nano avec Ctrl+O, appuyez sur Enter, puis quittez avec Ctrl+X. Rendez le script exécutable et lancez-le :
Le nouveau récepteur par défaut devrait s'afficher. Vérifiez le récepteur par défaut actuel du serveur et les flux de lecture actifs :
pactl get-default-sink
pactl list short sink-inputs
Exécutez le script une seconde fois pour revenir à la configuration initiale. Pour un test d'écoute pratique, diffusez un court extrait audio pendant la commutation et vérifiez qu'il provient bien du périphérique sélectionné. Le nom exact des périphériques et l'affichage varient selon le matériel, l'état de la connexion Bluetooth et les profils audio actifs.
Le script indique quel nom de sortie est devenu le nouveau nom par défaut.Confirmez le récepteur par défaut et vérifiez qu'un flux actif est acheminé vers la sortie sélectionnée.
Lorsque le script ne change pas d'audio
« Récepteur introuvable » : relancez le pactl list short sinksprocessus. Un casque déconnecté ou un profil modifié peut avoir changé le nom du récepteur ; mettez à jour la variable correspondante.
Impossible de se connecter : vérifiez que les services utilisateur PipeWire sont en cours d'exécution et identifiez le serveur PipeWire Pulse. Le paquet pipewire-pulsepactl info de Debian fournit ce serveur de remplacement, tandis que pulseaudio-utils inclut le client.pactl
Si un nouveau flux audio est déplacé mais qu'une application reste bloquée, relancez le script pendant que ce flux est visible pactl list short sink-inputs. Certaines applications rouvrent les flux ou conservent leur périphérique de sortie ; choisissez donc « Par défaut » dans cette application si elle reste associée à une sortie.
La documentation du protocole Pulse de PipeWire explique pourquoi les clients en ligne de commande PulseAudio peuvent contrôler PipeWire lorsque pipewire-pulsece dernier est le serveur actif. Ce script utilise cette couche de compatibilité ; il ne configure pas les profils matériels et ne garantit pas la disponibilité d'un périphérique déconnecté.