Eu finalmente consegui fazer isso funcionar usando udev
. Então, se alguém quiser o mesmo comportamento, veja as etapas:
Primeiro, precisamos criar um arquivo /etc/udev/rules.d/hdmi_sound.rules
com o seguinte conteúdo:
SUBSYSTEM=="drm", ACTION=="change", RUN+="/usr/local/bin/hdmi_sound_toggle"
isso fará com que udev
execute o script hdmi_sound_toggle
sempre que houver uma alteração na conexão HDMI. Esse script deve ter permissão de execução e o conteúdo é o seguinte:
#!/usr/bin/env python
import subprocess
from syslog import syslog
def output(cmd):
return subprocess.check_output(cmd, shell=True)
# the following variables may need some modification.
user = "my_username"
card = "/sys/class/drm/card0"
dev_speaker = "output:analog-stereo+input:analog-stereo"
dev_hdmi = "output:hdmi-stereo+input:analog-stereo"
#
interfaces = output("ls {0}".format(card), ).split("\n")
vga = filter(lambda x: "VGA" in x, interfaces)[0]
hdmi = filter(lambda x: "HDMI" in x, interfaces)[0]
syslog("HDMI connection was changed!")
hdmi_connected = output("cat {0}/{1}/status".format(card,hdmi)).startswith("connected")
title = "HDMI was {0}".format("connected" if hdmi_connected else "disconnected")
message = "Audio output has changed to {opt}.".format(opt = "HDMI" if hdmi_connected else "built-in speakers")
cmd = "sudo -u " + user + " /usr/bin/pactl set-card-profile 0 " + (dev_hdmi if hdmi_connected else dev_speaker)
syslog("HDMI was connected." if hdmi_connected else "HDMI was disconnected.")
try:
a = output(cmd)
output("sudo -u {0} notify-send \"{1}\" \"{2}\"".format(user, title, message))
syslog("Audio output changed.")
except Exception as ex:
syslog("Error changing output device: " + str(ex))
Provavelmente isso pode ser feito facilmente no bash, mas como minha linguagem principal é python eu usei. Tudo funciona, exceto a notificação: ele não aparece, eu realmente não sei porque. Se alguém souber como consertá-lo, por favor, diga alguma coisa.
Nota: os nomes da regra script / udev podem ser alterados, mas você precisa usar o caminho completo.