Eu tenho tido esse problema. Eu não consegui encontrar uma solução decente, mas tenho esse trabalho por aí. Note que é um hack horrível, mas faz o trabalho para mim até que o problema da raiz seja resolvido - espero que ajude alguém. A cada 5 segundos ele verifica o dmesg para erros de conexão HDMI e, se encontrar um, reinicia a conexão.
Eu fiz este script de watchdog - substitua "DFP1" com o nome da sua saída (obtenha do xrandr).
#!/usr/bin/env python
import os
import time
valid = "ELD_Valid=1"
invalid = "ELD_Valid=0"
def executeCommand(the_command):
temp_list = os.popen(the_command).read()
return temp_list
def getDMESG():
return executeCommand("dmesg | grep -i hdmi | tail -n 10")
def needsRefresh():
list = getDMESG();
valid_index = list.rfind(valid)
invalid_index = list.rfind(invalid)
if invalid_index > valid_index:
return True
else:
return False
def doTest():
if needsRefresh() == True:
os.popen("xrandr -display :0 --output DFP1 --off; xrandr -display :0 --output DFP1 --auto").read()
while True:
doTest()
time.sleep(5)
Se alguém souber uma maneira melhor de detectar o erro (com drivers de catalisador), por favor me avise. (Com os drivers de código aberto acho que você poderia acionar o bit de reconfiguração do código em eventos drm acpi se você quisesse fazer algum script).
Eu inicio adicionando isto em /etc/rc.local: (mude "xbmc" para o nome de usuário que você logou como)
su xbmc -c 'python /home/USERNAME/src/check_hdmi.py &'