Pour le bénéfice des personnes qui tombent sur cette question - la solution de Salem a presque fonctionné pour moi en 13.04, j'ai fini par rassembler des morceaux de partout sur le web, je pense que le facteur décisif pour moi était le manque de la variable d'environnement PULSE_SERVER
Voici ma solution complète, qui est essentiellement la répétition de la solution de Salem avec les quelques pièces manquantes. Je l'ai également refait en tant que script shell (malgré mon amour pour Python) car j'avais d'abord peur que mon script Python rencontre des problèmes de chemin d'importation:
(identique à la réponse de Salem) Créez un fichier en /etc/udev/rules.d/hdmi_sound.rules
tant que root avec le contenu:
SUBSYSTEM=="drm", ACTION=="change", RUN+="/usr/local/bin/hdmi_sound_toggle"
Créez un fichier en /usr/local/bin/hdmi_sound_toggle
tant que root avec le contenu:
#!/bin/sh
USER_NAME=`who | grep "(:0)" | cut -f 1 -d ' '`
USER_ID=`id -u $USER_NAME`
HDMI_STATUS=`cat /sys/class/drm/card0/*HDMI*/status`
export PULSE_SERVER="unix:/run/user/"$USER_ID"/pulse/native"
if [ $HDMI_STATUS = "connected" ]
then
sudo -u $USER_NAME pactl --server $PULSE_SERVER set-card-profile 0 output:hdmi-stereo+input:analog-stereo
else
sudo -u $USER_NAME pactl --server $PULSE_SERVER set-card-profile 0 output:analog-stereo+input:analog-stereo
fi
Rendez-le ensuite exécutable avec chmod 0755 /usr/local/bin/hdmi_sound_toggle
J'ai essayé de rendre ce script aussi générique que possible, mais vous devrez peut-être encore modifier certaines lignes, telles que le chemin du fichier HDMI_STATUS ou les profils utilisés. Vous pouvez voir une liste de profils en exécutant pactl list cards
et en regardant sous Profils.
Notez que le script a échoué pour moi lorsque j'ai supprimé le mot clé "export" lors de la définition de PULSE_SERVER, je pense que pactl recherche la variable env
N'oubliez pas de recharger vos règles udev: sudo udevadm control --reload-rules
Mettre à jour ce script est mis à jour pour 14.04. Avant cela, vous utiliseriez USER_NAME au lieu de USER_ID partout