Para beneficio de las personas que se topan con esta pregunta: la solución de Salem casi funcionó para mí en 13.04, terminé recolectando partes de toda la web, creo que el factor decisivo para mí fue la falta de la variable de entorno PULSE_SERVER
Aquí está mi solución completa, que básicamente es repetir la solución de Salem con las pocas piezas que faltan. También lo rehice como un script de shell (a pesar de mi amor por Python) porque al principio tenía miedo de que mi script de Python se encuentre con problemas de ruta de importación:
(igual que la respuesta de Salem) Cree un archivo /etc/udev/rules.d/hdmi_sound.rules
como raíz con el contenido:
SUBSYSTEM=="drm", ACTION=="change", RUN+="/usr/local/bin/hdmi_sound_toggle"
Cree un archivo /usr/local/bin/hdmi_sound_toggle
como root con el contenido:
#!/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
Luego hazlo ejecutable con chmod 0755 /usr/local/bin/hdmi_sound_toggle
Intenté hacer que este script sea lo más genérico posible, pero es posible que deba cambiar algunas líneas, como la ruta del archivo HDMI_STATUS o los perfiles utilizados. Puede ver una lista de perfiles ejecutando pactl list cards
y buscando en Perfiles.
Tenga en cuenta que el script falló cuando eliminé la palabra clave "exportar" cuando configuré PULSE_SERVER, creo que pactl está buscando la variable env
No olvides recargar tus reglas de udev: sudo udevadm control --reload-rules
Actualizar este script se actualiza para 14.04. Antes de eso, usaría USER_NAME en lugar de USER_ID en todas partes