J'essaie d'obtenir mon ordinateur portable pour basculer l'audio sur HDMI lorsqu'il est branché, et revenir à l'analogue standard lorsqu'il est retiré.
J'ai mis en place une règle udev pour déclencher un script pour effectuer la commutation, mais j'ai des problèmes pour le faire fonctionner:
- Il semble que jusqu'à ce que je sélectionne la sortie audio HDMI dans les paramètres audio, elle n'est pas reconnue comme un récepteur disponible, également une fois que la sortie audio HDMI est sélectionnée, la sortie analogique n'est plus répertoriée.
Voir ci-dessous:
# HDMI plugged in, not selected in Sound settings.
$ pactl list short sinks
5 alsa_output.pci-0000_00_1b.0.analog-stereo module-alsa-card.c s16le 2ch 44100Hz SUSPENDED
kingamajick@kingamajick-laptop: ~
# HDMI selected in sound settings
$ pactl list short sinks
7 alsa_output.pci-0000_00_1b.0.hdmi-stereo module-alsa-card.c s16le 2ch 48000Hz SUSPENDED
kingamajick@kingamajick-laptop: ~
# HDMI removed
$ pactl list short sinks
9 alsa_output.pci-0000_00_1b.0.analog-stereo module-alsa-card.c s16le 2ch 48000Hz SUSPENDED
Le script que j'utilise pour basculer la sortie est le suivant:
#!/bin/bash
HDMI_STATUS=`cat /sys/class/drm/card0/*HDMI*/status`
INPUTS=($(pacmd list-sink-inputs | grep index | awk '{print $2}'))
if [ $HDMI_STATUS = "connected" ]
then
pactl set-default-sink alsa_output.pci-0000_00_1b.0.hdmi-stereo
for i in ${INPUTS[*]}; do pacmd move-sink-input $i alsa_output.pci-0000_00_1b.0.hdmi-stereo &> /dev/null; done
else
pactl set-default-sink alsa_output.pci-0000_00_1b.0.analog-stereo
for i in ${INPUTS[*]}; do pacmd move-sink-input $i alsa_output.pci-0000_00_1b.0.analog-stereo &> /dev/null; done-server $PULSE_SERVER set-card-profile 0 output:analog-stereo+input:analog-stereo
fi
Le script donne une erreur sur aucun tel récepteur lorsque je le déclenche avant de sélectionner HDMI dans les paramètres sonores.