由于我使用 Ubuntu 和 Xubuntu(14 和 16)、Kubuntu 16、Ubuntu Studio(14 和 15)、Elementary(0.32)和 MINT(17.3 Cinnamon 和 MATE),我在所有发行版的笔记本上都遇到了与音频设置相关的问题,并且所有发行版都显示了与模拟音频相关的问题,因为登录后只有 HDMI 可以工作(在具有登录声音的系统上,当我登录时声音可以工作,但过了一会儿,模拟声音就不再工作了。
我的笔记本是带有AMD APU的Acer E1 421,模拟输出和HDMI输出似乎都使用相同的音频模块,而HDMI是带有ALSA的0卡,只有它可以工作。
我的lspci audio
lspci | grep Audio
00:01.1 Audio device: Advanced Micro Devices, Inc. [AMD/ATI] Wrestler HDMI Audio
00:14.2 Audio device: Advanced Micro Devices, Inc. [AMD] FCH Azalia Controller (rev 01)
我的aplay -l
aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: Generic [HD-Audio Generic], device 3: HDMI 0 [HDMI 0]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 1: Generic_1 [HD-Audio Generic], device 0: CX20584 Analog [CX20584 Analog]
Subdevices: 1/1
Subdevice #0: subdevice #0
我什至找到了一些解决方法来“修复”该问题,但我没有运气,因为“修复”是暂时的或者事情变得更糟,例如删除pulseaudio并丢失任务栏上的音量图标......
那么,有没有办法恢复设备呢?看起来系统正在将音频直接发送到卡 0 (HDMI) 那么是否可以修复它以便恢复设备顺序?
我什至在这里找到了一个更改设备顺序的脚本(在 Stackexchange) 当声卡和 HDMI 都使用 Intel HDA 驱动程序时,声音不工作。如何交换他们的设备加载顺序?
它看起来像
alias char-major-116 snd
alias snd-card-0 snd-hda-intel
alias snd-card-1 snd-hda-intel
options snd cards_limit=2
options snd-hda-intel id=SB index=0
options snd-hda-intel id=HDMI index=1
但我不知道它如何适用于我的场景,即使使用脚本来恢复顺序,模拟音频也根本不起作用
它显示在声音配置上,但测试显示没有音频,尽管声音配置显示音频活动,但扬声器上没有声音。
如果没有办法,有没有办法只阻止 HDMI 输出?请记住,两个输出都使用相同的模块,因此不可能将模块本身列入黑名单。
我看到有人说要通过更改菜单配置来重新编译不支持 HDMI 的内核。
如果可能的话,有人可以告诉我我可以做什么来重新编译并使用新内核吗?至少如何在 Mint 和 Elementary 上重新编译,因为它们是我最喜欢的发行版。
塔克斯
答案1
我相信您需要更改默认的 ALSA 声音设备。
不久前,我的 Sound Blaster Audigy 2 也遇到了类似的问题。
将其放入您的/etc/asound.conf
(或~/.asoundrc
仅适用于您的用户)中,如果文件不存在则创建该文件:
pcm.!default {
type plug
slave.pcm {
@func getenv
vars [ ALSAPCM ]
default "hw:Generic_1"
}
}
这应该将第二个设备(模拟 CX20584,名为Generic_1
)设置为默认设备,并且它将查找该名称,即使设备 ID 确实发生变化,该名称也不会更改。
ALSAPCM
它还允许您通过在启动程序之前设置环境变量来更改要用于输出的设备。
答案2
我自己曾经使用/etc/modprobe.d/
基于 - 的解决方案,但发现它的设置非常挑剔,并且对更新和其他配置更改很敏感。然后我找到了更好的方法。
您可以使用 udev 规则来订购声音设备,即使两者都使用相同的驱动程序。所需的规则如下所示:
# Make the HDMI audio the second sound device...
ACTION=="add", SUBSYSTEM=="sound", DRIVERS=="snd_hda_intel", KERNEL=="card*", KERNELS=="0000:00:01.1", ATTR{number}="1", ATTR{id}="HDMI"
# ... and the analog audio chip the first one.
ACTION=="add", SUBSYSTEM=="sound", DRIVERS=="snd_hda_intel", KERNEL=="card*", KERNELS=="0000:00:14.2", ATTR{number}="0", ATTR{id}="Analog"
ENV{PULSE_IGNORE}="1"
如果您希望 PulseAudio 完全忽略 HDMI 音频,请在第一个 udev 规则的末尾添加逗号 和。
将这些规则放入 例如/etc/udev/rules.d/51-local-sound.rules
,然后使用 更新您的 initramfs sudo update-initramfs -u
,然后重新启动。现在,您应该会发现已订购的 ALSA 声音设备,因此模拟音频芯片将是设备 #0,并且在aplay -l
列表中,它们现在应分别命名为“Analog”和“HDMI”,而不是“Generic_1”和“Generic”。