如何在无需启动 X 的情况下通过 HDMI 获得声音输出?

如何在无需启动 X 的情况下通过 HDMI 获得声音输出?

我有一台无头机器连接到我的音响系统,我用它来运行一个通过网络控制的音乐播放守护进程。(除此之外)

但是,如果不运行 X,我似乎就无法让声音从扬声器中发出。

我正在运行脉冲音频系统范围实例并且我的守护进程没有在 X 中运行。尽管如此,当我的守护进程播放音乐而我却听不到时,我可以通过运行startx一个不相关的会话来修复它。X 启动后,我可以听到声音。如果我关闭 X 服务器,声音又会消失。

有趣/恼人的是,X 运行几分钟后声音也会停止。这可能是由于某种屏幕保护程序,但我无法验证或证伪这一理论。

因此,我目前的解决方法是,ssh每当我想要音乐时就将其放入盒子中startx,然后每隔十五分钟左右重新启动一次。我希望做得更好。


我已经能够验证以下内容:

  • 调整alsamixer对此问题没有影响。相关输出通道从未静音
  • alsamixer,我看不出声音正常和不正常时有什么区别
  • 一切都没有被静音pactl list
  • pactl list启动 X 之前和启动之后的输出没有区别。(除了pactl连接到脉冲的实例的标识符,每次运行时它都不同pactl
  • 运行音乐守护进程的用户是该组的成员audiopulse并且pulse-access
  • 音乐守护程序不会报告任何错误消息,并且表现得就像在播放音乐一样
  • 某种形式的dbus守护进程正在运行。在我启动 X 之前和之后的ps aux|grep dbus报告dbus-daemon --system --fork --activation=upstart

有关我的硬件的一些详细信息:

输出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 

有什么想法吗?X 的作用如此重要吗?

答案1

HDMI 输出由图形驱动程序管理,在您的情况下是 Nvidia 的闭源驱动程序。显然,该驱动程序仅在 X 运行时启用 HDMI 音频编码器。

向 Nvidia 投诉。

或者,使用主板的 S/PDIF 输出。


提问者 Magnus Hoff 的补充:

从这个角度进一步看,我最终运行了 X,但禁用了 dpms,因此 HDMI 输出保持通电、功能齐全的状态。我意识到我必须这样做,因为我读过nvidia 的文档

为了实现这一点,我添加了以下内容.xinitrc

xset s off
xset -dpms

来源:http://crunchbang.org/forums/viewtopic.php?pid=121360#p121360

相关内容