我有一台无头机器连接到我的音响系统,我用它来运行一个通过网络控制的音乐播放守护进程。(除此之外)
但是,如果不运行 X,我似乎就无法让声音从扬声器中发出。
我正在运行脉冲音频系统范围实例并且我的守护进程没有在 X 中运行。尽管如此,当我的守护进程播放音乐而我却听不到时,我可以通过运行startx
一个不相关的会话来修复它。X 启动后,我可以听到声音。如果我关闭 X 服务器,声音又会消失。
有趣/恼人的是,X 运行几分钟后声音也会停止。这可能是由于某种屏幕保护程序,但我无法验证或证伪这一理论。
因此,我目前的解决方法是,ssh
每当我想要音乐时就将其放入盒子中startx
,然后每隔十五分钟左右重新启动一次。我希望做得更好。
我已经能够验证以下内容:
- 调整
alsamixer
对此问题没有影响。相关输出通道从未静音 - 在
alsamixer
,我看不出声音正常和不正常时有什么区别 - 一切都没有被静音
pactl list
pactl list
启动 X 之前和启动之后的输出没有区别。(除了pactl
连接到脉冲的实例的标识符,每次运行时它都不同pactl
)- 运行音乐守护进程的用户是该组的成员
audio
,pulse
并且pulse-access
- 音乐守护程序不会报告任何错误消息,并且表现得就像在播放音乐一样
- 某种形式的
dbus
守护进程正在运行。在我启动 X 之前和之后的ps aux|grep dbus
报告dbus-daemon --system --fork --activation=upstart
有关我的硬件的一些详细信息:
- 母板:http://www.asus.com/Motherboards/AT5IONTI_DELUXE/
- 声音芯片:Nvidia GPU 0b HDMI/DP(来自 alsamixer)
- 使用 HDMI 进行输出
- (机器还有一个我没有使用的 Intel Realtek ALC887)
输出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