Switching to HDMI Audio when HDMI is plugged into a laptop (14.04)
Based in this link and this link ...i tested and WORKS FINE ubuntu 14.04
you should create a rule in /etc/udev/rules.d/100-hdmi_sound.rules
whith this content
SUBSYSTEM=="drm", ACTION=="change", RUN+="/lib/udev/hdmi_sound_toggle.sh"
then create
sudo -H gedit /lib/udev/hdmi_sound_toggle.sh
whith your content
#!/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-card-profile 0 output:hdmi-stereo
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-card-profile 0 output:analog-stereo
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
fi
I Hope can help ..sorry for my english i spoke spanish
Check for available cards & profiles
pactl list cards
Add following command to the script to change profile before setting default sink & moving streams
pactl [options] set-card-profile CARD PROFILE
(So no need to switch it manually from Sound Settings)
Reference:
pactl -h
& man pactl
I had a bit of trouble following this. I copied the original script and modified it as suggested and now it works.
I am including it here to make it easier for someone else to use.
#!/bin/bash
## From: https://askubuntu.com/questions/458194/switching-to-hdmi-audio-when-hdmi-is-plugged-into-a-laptop-14-04
## Script needs to be triggered by a udev rule
## Works manually now
##source ${HOME}/bin/bash_trace
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-card-profile 0 output:hdmi-stereo
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-card-profile 0 output:analog-stereo
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
fi
Now, I'd just like to trigger it with udev, but I'm clueless as to how to do that.