Como obtenho uma saída de som em HDMI sem a necessidade de iniciar o X?

4

Eu tenho uma máquina sem cabeçalho conectada ao meu sistema de som, e estou usando-a para executar um daemon de reprodução de música que eu controle na rede. (Entre outras coisas)

No entanto, parece que não consigo sair som dos meus alto-falantes sem executar o X.

Estou executando o áudio de pulso em uma instância ampla do sistema e meu daemon é não rodando no X. No entanto, quando meu daemon está tocando música sem que eu o ouça, posso corrigi-lo executando startx em uma sessão não relacionada. Depois que X começa, eu posso ouvir o som. O som desaparece novamente se eu matar o servidor X.

Interessante / irritante, o som também pára após o X ter funcionado por alguns minutos. Isso pode ser devido a algum tipo de proteção de tela, mas não consegui verificar ou falsificar essa teoria.

Portanto, minha solução atual é ssh na caixa sempre que eu quiser música e startx e reiniciá-la a cada quinze minutos ou mais. Eu gostaria de fazer melhor.

Eu pude verificar o seguinte:

  • Os ajustes em alsamixer não têm efeito sobre esse problema. O canal de saída relevante nunca é silenciado
  • Em alsamixer , não vejo diferença entre quando o som está funcionando e quando não está
  • Nada é silenciado em pactl list
  • Não há diferença na saída de pactl list entre antes de iniciar o X e depois de iniciado. (Exceto o identificador da instância pactl conectada ao pulso, que é diferente cada vez que você executa pactl )
  • O usuário que está executando o daemon de música é membro dos grupos audio , pulse e pulse-access
  • O programa daemon de música não relata nenhuma mensagem de erro e age como se estivesse tocando a música como deveria
  • Alguma forma do daemon dbus está em execução. ps aux|grep dbus relatórios dbus-daemon --system --fork --activation=upstart antes e depois de ter iniciado o X

Alguns detalhes sobre meu hardware:

  • Placa-mãe: link
  • Chip de som: Nvidia GPU 0b HDMI / DP (da alsamixer)
  • Usando HDMI para saída
  • (A máquina também tem um Intel Realtek ALC887 que não estou usando)

Saída de lsmod :

Module                  Size  Used by
deflate                12617  0 
zlib_deflate           27139  1 deflate
ctr                    13201  0 
twofish_generic        16635  0 
twofish_x86_64_3way    25287  0 
twofish_x86_64         12907  1 twofish_x86_64_3way
twofish_common         20919  3 twofish_generic,twofish_x86_64_3way,twofish_x86_64
camellia               29348  0 
serpent                29125  0 
blowfish_generic       12530  0 
blowfish_x86_64        21466  0 
blowfish_common        16739  2 blowfish_generic,blowfish_x86_64
cast5                  25112  0 
des_generic            21415  0 
xcbc                   12815  0 
rmd160                 16744  0 
bnep                   18281  2 
rfcomm                 47604  12 
sha512_generic         12796  0 
crypto_null            12918  0 
parport_pc             32866  0 
af_key                 36389  0 
ppdev                  17113  0 
binfmt_misc            17540  1 
nfsd                  281980  2 
ext2                   73795  1 
nfs                   436929  1 
lockd                  90326  2 nfsd,nfs
fscache                61529  1 nfs
auth_rpcgss            53380  2 nfsd,nfs
nfs_acl                12883  2 nfsd,nfs
sunrpc                255224  16 nfsd,nfs,lockd,auth_rpcgss,nfs_acl
btusb                  18332  2 
vesafb                 13844  2 
pl2303                 17957  1 
ath3k                  12961  0 
bluetooth             180153  24 bnep,rfcomm,btusb,ath3k
snd_hda_codec_hdmi     32474  4 
nvidia              11308613  0 
ftdi_sio               40679  1 
usbserial              47113  6 pl2303,ftdi_sio
psmouse                97485  0 
snd_hda_codec_realtek   224173  1 
snd_hda_intel          33719  5 
snd_hda_codec         127706  3 snd_hda_codec_hdmi,snd_hda_codec_realtek,snd_hda_intel
serio_raw              13211  0 
snd_seq_midi           13324  0 
snd_hwdep              17764  1 snd_hda_codec
snd_pcm                97275  3 snd_hda_codec_hdmi,snd_hda_intel,snd_hda_codec
snd_rawmidi            30748  1 snd_seq_midi
snd_seq_midi_event     14899  1 snd_seq_midi
snd_seq                61929  2 snd_seq_midi,snd_seq_midi_event
snd_timer              29990  2 snd_pcm,snd_seq
snd_seq_device         14540  3 snd_seq_midi,snd_rawmidi,snd_seq
snd                    79041  20 snd_hda_codec_hdmi,snd_hda_codec_realtek,snd_hda_intel,snd_hda_codec,snd_hwdep,snd_pcm,snd_rawmidi,snd_seq,snd_timer,snd_seq_device
asus_atk0110           18078  0 
mac_hid                13253  0 
jc42                   13948  0 
soundcore              15091  1 snd
snd_page_alloc         18529  2 snd_hda_intel,snd_pcm
coretemp               13554  0 
i2c_i801               17570  0 
lp                     17799  0 
parport                46562  3 parport_pc,ppdev,lp
r8169                  62154  0 

Alguma ideia? O que o X faz de tão importante?

    
por Magnus Hoff 24.06.2013 / 20:55

1 resposta

2

A saída HDMI é gerenciada pelo driver gráfico, que no seu caso é o driver de código fechado da Nvidia. Aparentemente, esse driver ativa o codificador de áudio HDMI somente quando o X está em execução.

Reclame para a Nvidia.

Como alternativa, use a saída S / PDIF da sua placa-mãe.

Adendo por um consulente, Magnus Hoff:

Continuando esse ângulo, acabei rodando X, mas desabilitando dpms, então a saída HDMI é mantida em seu estado totalmente funcional. Eu percebi que tinha que fazer isso lendo a documentação da nvidia .

Para que isso aconteça, adicionei o seguinte ao meu .xinitrc :

xset s off
xset -dpms

Fonte: link

    
por CL. 25.06.2013 / 14:21