Acabei usando esse driver autônomo de controlador Steam do Python: link
Existem alguns exemplos de script sobre como obter eventos de botão e configurar um retorno de chamada. Eu apenas configurei um callback para o botão home e iniciei o vapor de lá. O único problema é que você não pode ter esse script em execução enquanto o vapor é executado porque o driver autônomo capturará todos os eventos do controlador, mas eu queria que o vapor controlasse o controlador (apenas inicie o steam e feche o script).
Então eu tenho:
- main.py: controla todos os scripts, aguarda o resultado button_callback.py e, em seguida, inicia o start_steam.py, quando esse sair, reinicia o button_callback.py
- button_callback.py: aguarda o pressionamento de um botão inicial e, em seguida, sai
- start_steam.py: ativa a tv via xrandr, alterna o coletor de áudio via pacmd para hdmi, aguarda o fechamento do vapor, desativa a tv, reverte o áudio