Com a ajuda de debianuser
no canal de IRC #alsa em freenode, acho que poderia ter nos aproximado um pouco mais. Parece que os estados de energia podem ser definidos com a ferramenta hda_verb, que é parte de alsa-tools, no entanto, parece não haver uma opção para controlar power_save_controller
especificamente, apenas power state
. Você pode obter informações sobre o parameters
que pode ser definido executando hda-verb -L
Exemplo obtendo o estado de energia de um dispositivo:
sudo hda-verb /dev/snd/hwC1D0 0x1a GET_POWER POWER_STATE
Exemplo configuração do estado de energia de um dispositivo:
sudo hda-verb /dev/snd/hwC1D0 0x17 SET_POWER 0x0 POWER_STATE
Então, especificamente, o que você parece precisar fazer é executar:
sudo hda-verb /dev/snd/hwC1D0 0x17 SET_POWER 0x0
sudo hda-verb /dev/snd/hwC1D0 0x1a SET_POWER 0x0
Observe que isso não funcionará enquanto HDA Analyzer estiver em execução, mas pode ser ativado posteriormente para verificar se a alteração funcionou. No meu caso, alterei para D0.
Eu me pergunto se isso resolve o seu problema?
Como disse, eu tenho o mesmo computador, embora eu não esteja inteiramente certo se meu subwoofer está realmente desligado, já que não consigo ouvir muita diferença de um arquivo de som de exemplo que eu criei quando reproduzido no Windows ou Archlinux. Talvez a frequência (65 hz) seja alta demais? Caso alguém mais queira testá-lo: link
Talvez possamos encontrar uma maneira de desativar os alto-falantes normais para que apenas o subwoofer esteja ativado?
Editar:
Com a ajuda da resposta do leneb , criei este script que deve ser executado como root, que faz todas essas coisas, usando apenas o hda-verbo.
Não tenho certeza se o volume está totalmente são, no entanto. (feedback apreciado) E o problema com fones de ouvido sendo conectados, não silenciando o subwoofer, persiste.
#! /usr/bin/env sh
# Run this script as root!
dev="/dev/snd/hwC1D0"
hda-verb $dev 0x17 SET_POWER 0x0
hda-verb $dev 0x1a SET_POWER 0x0
hda-verb $dev 0x03 0x300 0xa055
hda-verb $dev 0x03 0x300 0x9055
hda-verb $dev 0x17 0x300 0xb000
hda-verb $dev 0x17 0x707 0x40
hda-verb $dev 0x1a 0x707 0x25
Se necessário, todas essas etapas também podem ser feitas sem o hda-verbo, usando apenas o python, mas isso tornaria o código muito menos limpo.