Para o benefício de pessoas que se deparam com essa pergunta - a solução de Salem quase funcionou para mim em 13.04, acabei coletando pedaços de toda a web, acho que o rompimento de contrato para mim foi a falta da variável de ambiente PULSE_SERVER
Aqui está minha solução completa, que basicamente repete a solução de Salem com as poucas peças que faltam. Também o refiz como um script de shell (apesar do meu amor pelo Python) porque, inicialmente, eu tinha medo de que meu script Python estivesse com problemas no caminho de importação:
(igual à resposta de Salem) Crie um arquivo /etc/udev/rules.d/hdmi_sound.rules
como root com o conteúdo:
SUBSYSTEM=="drm", ACTION=="change", RUN+="/usr/local/bin/hdmi_sound_toggle"
Crie um arquivo /usr/local/bin/hdmi_sound_toggle
como raiz com o conteúdo:
#!/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
Em seguida, torne-o executável com chmod 0755 /usr/local/bin/hdmi_sound_toggle
Tentei tornar esse script o mais genérico possível, mas você ainda pode precisar alterar algumas linhas, como o caminho do arquivo HDMI_STATUS ou os perfis usados. Você pode ver uma lista de perfis executando pactl list cards
e procurando em Perfis.
Observe que o script falhou para mim quando removi a palavra-chave "export" ao definir PULSE_SERVER, acho que o pactl está procurando a variável env
Não se esqueça de recarregar suas regras do udev: sudo udevadm control --reload-rules
A atualização deste script é atualizada para 14.04. Antes disso, você usaria USER_NAME em vez de USER_ID em qualquer lugar