在使用Ubuntu 18.04设置一台新计算机之后,我注意到没有声音从扬声器,耳机或HDMI发出。从“ Gnome设置”的“声音”设置中查看,我注意到只有一个虚拟输出作为声音输出设备。

我做的第一件事是在网上寻找解决方案,例如这一方法,但没有一个有效(尽管该解决方案可能对您有用,因此请尝试一下)。然后我想起了一段时间,我设法修复了旧台式机的声音(已将其升级到较新的Ubuntu版本,而不是全新安装),因此我尝试了该解决方案,并且……奏效了!

这是我为了使声音能够在Ubuntu 18.04中工作而所做的工作-希望这对您中的某些人也适用。

我还应该提到我的计算机使用snd_hda_intel内核模块(Realtek ALC892编解码器)。我将在下面的步骤说明如何检查您是否也在运行此程序。

我只需要在Ubuntu中使用此修复程序,但是我认为它也可以在其他Linux发行版中使用。至少,它还应该解决Linux Mint,基本的OS以及可能的Debian中的类似问题(但它应该适用于许多其他Linux发行版,尽管我无法对其进行测试)。

拔下HDMI电缆后更新无声音。如果您插入了HDMI电缆,然后拔下了电缆,而您在Ubuntu桌面上再也听不到声音,则解决方案非常简单。重新插入HDMI设备,您应该能够切换回集成/外部扬声器,然后可以再次拔下HDMI电缆。

2020年3月有一个内核回归(在Linux 5.3.0-41中,以及可能在Ubuntu 19.10上运行的较新版本)在Ubuntu 19.10上引起新的“虚拟输出”问题。我已经用此问题的修复程序更新了本文-您可以在本文结尾处找到它。在Ubuntu内核5.3.0-41和更高版本中未检测到PCI/内部声卡虚拟输出19.10)。这似乎也发生在Ubuntu 18.04中,也可能发生在Ubuntu 20.04中。

您应该尝试的第一个解决方法是使用以下命令重新启动PulseAudio:

pulseaudio -k

这可以在许多情况下修复声音。例如,如果您的耳机没有出现在系统声音设置中。

修复Ubuntu中的没有声音的问题(虚拟输出)


如果您的计算机正在使用snd_hda_intel内核模块,则在本ubuntu教程中对这种无声音问题将起作用。因此,在尝试应用此修复之前,请先检查是否是snd_hda_intel正在使用的内核模块。为此,您可以运行:

lsmod | grep snd_hda_intel

其中应显示至少一个snd_hda_intel条目。这是我计算机的输出:

$ lsmod | grep snd_hda_intel
snd_hda_intel          40960  8
snd_hda_codec         126976  4 snd_hda_intel,snd_hda_codec_hdmi,snd_hda_codec_generic,snd_hda_codec_realtek
snd_hda_core           81920  5 snd_hda_intel,snd_hda_codec,snd_hda_codec_hdmi,snd_hda_codec_generic,snd_hda_codec_realtek
snd_pcm                98304  4 snd_hda_intel,snd_hda_codec,snd_hda_core,snd_hda_codec_hdmi
snd                    81920  27 snd_hda_intel,snd_hwdep,snd_seq,snd_hda_codec,snd_timer,snd_rawmidi,snd_hda_codec_hdmi,snd_hda_codec_generic,snd_seq_device,snd_hda_codec_realtek,snd_pcm

您还可以运行:

lspci -nnk | grep -A2 Audio

其中应显示音频设备以及正在使用的内核模块/驱动程序。这是我系统的输出:

$ lspci -nnk | grep -A2 Audio
00:1b.0 Audio device [0403]: Intel Corporation 6 Series/C200 Series Chipset Family High Definition Audio Controller [8086:1c20] (rev 05)
Subsystem: Dell 6 Series/C200 Series Chipset Family High Definition Audio Controller [1028:04a7]
Kernel driver in use: snd_hda_intel
Kernel modules: snd_hda_intel

如果上述命令的输出确实获得snd_hda_intel,而在Ubuntu中没有声音(只有虚拟输出),则可以尝试以下方法进行修复。您需要将options snd-hda-intel model=generic 添加到/etc/modprobe.d/alsa-base.conf末尾。请勿修改此文件中的其他任何内容!

您可以通过运行以下命令在 /etc/modprobe.d/alsa-base.conf末尾添加options snd-hda-intel model=generic

echo "options snd-hda-intel model=generic" | sudo tee -a /etc/modprobe.d/alsa-base.conf


只运行一次此命令,因为它在每次运行时都会添加此行!如果要修改它,请使用文本编辑器以root身份打开/etc/modprobe.d/alsa-base.conf

然后,重新启动系统。希望您的声音现在可以在Ubuntu中运行,并且您不再仅获得Dummy Output设备System Settings > Sound

如果您仍然没有声音输出,而在“系统设置”中仅看到“虚拟输出”,则可以尝试设置model为auto而不是generic,因此请/etc/modprobe.d/alsa-base.conf使用文本编辑器(以root用户身份)编辑文件并进行更改。

修复在Ubuntu 19.10/18.04中使用Ubuntu 5.3.0-41和5.3.0-41内核未检测到PCI/内部声卡(虚拟输出)的问题


5.3.0-41和5.3.0-41内核中存在回归,这会在Ubuntu 19.10和18.04上引起新的“虚拟输出”问题。该错误报告中提供了有关此错误的说明,因此,我不再赘述,我将直接告诉您如何解决。看来某些Ubuntu 20.04用户也可能会发生这种情况。

此“虚拟输出”回归的解决方案是:

以root身份编辑/etc/modprobe.d/alsa-base.conf并在此文件的末尾添加options snd-hda-intel dmic_detect=0。您可以使用命令来执行此操作(仅运行一次此命令):

echo "options snd-hda-intel dmic_detect=0" | sudo tee -a /etc/modprobe.d/alsa-base.conf

以root用户身份进行编辑/etc/modprobe.d/blacklist.conf,然后在文件末尾添加blacklist snd_soc_skl。您可以使用命令来执行此操作(仅运行一次此命令):

echo "blacklist snd_soc_skl" | sudo tee -a /etc/modprobe.d/blacklist.conf

进行这些更改后,重新引导系统。
开发人员正在努力解决此问题。固定的内核版本可能是5.3.0-43。发生这种情况时,请撤消这些更改。