Ubuntu 18.04 上未检测到声卡

Ubuntu 18.04 上未检测到声卡

我的 ThinkPad Yoga X1 上的声音以前可以正常工作。我不确定发生了什么变化,但现在它不再起作用了。它在并行安装 ubuntu 18.04 时仍然有效,并继续工作了一段时间(是的,我安装了两次相同的发行版)。它在并行安装 windows 10 时仍然有效。

当我按下键盘上的音量按钮时,它会改变“虚拟输出”设备的音量。

lspci 列出音频设备:

$ lspci | grep -A8 Audio
00:1f.3 Audio device: Intel Corporation Device 9dc8 (rev 11)
00:1f.4 SMBus: Intel Corporation Device 9da3 (rev 11)
00:1f.5 Serial bus controller [0c80]: Intel Corporation Device 9da4 (rev 11)
00:1f.6 Ethernet controller: Intel Corporation Ethernet Connection (6) I219-LM (rev 11)
03:00.0 Non-Volatile memory controller: Micron/Crucial Technology Device 2263 (rev 03)
05:00.0 PCI bridge: Intel Corporation JHL6540 Thunderbolt 3 Bridge (C step) [Alpine Ridge 4C 2016] (rev 02)
06:00.0 PCI bridge: Intel Corporation JHL6540 Thunderbolt 3 Bridge (C step) [Alpine Ridge 4C 2016] (rev 02)
06:01.0 PCI bridge: Intel Corporation JHL6540 Thunderbolt 3 Bridge (C step) [Alpine Ridge 4C 2016] (rev 02)
06:02.0 PCI bridge: Intel Corporation JHL6540 Thunderbolt 3 Bridge (C step) [Alpine Ridge 4C 2016] (rev 02)

但是 aplay 没有找到它

sudo aplay -l
[sudo] password for generic: 
aplay: device_list:270: no soundcards found...
$ pacmd list-sinks
1 sink(s) available.
  * index: 0
    name: <auto_null>
    driver: <module-null-sink.c>
    flags: DECIBEL_VOLUME LATENCY DYNAMIC_LATENCY
    state: SUSPENDED
    suspend cause: IDLE 
    priority: 1000
    volume: front-left: 46332 /  71% / -9.04 dB,   front-right: 46332 /  71% / -9.04 dB
            balance 0.00
    base volume: 65536 / 100% / 0.00 dB
    volume steps: 65537
    muted: no
    current latency: 0.00 ms
    max request: 344 KiB
    max rewind: 344 KiB
    monitor source: 0
    sample spec: s16le 2ch 44100Hz
    channel map: front-left,front-right
                 Stereo
    used by: 0
    linked by: 0
    configured latency: 0.00 ms; range is 0.50 .. 2000.00 ms
    module: 14
    properties:
        device.description = "Dummy Output"
        device.class = "abstract"
        device.icon_name = "audio-card"

我在 root 上运行带有 ZFS 的 ubuntu 18.04。这意味着我可以尝试一种解决方案,如果它不起作用,则可以回滚。这意味着我尝试了几种解决方案。

没有帮助的相关链接:

我尝试过的:

  • sudo apt-get --purge remove linux-sound-base alsa-base alsa-utils && reboot

  • sudo apt-get install build-essential linux-headers-uname -ralsa-base alsa-firmware-loaders alsa-oss alsa-source alsa-tools alsa-tools-gui alsa-utils alsamixergui

  • 将用户添加generic到组audio

  • 以上三者相结合

  • A上述内容的变体

  • 两个修复程序都在linuxuprising 帖子

  • modprobe snd_hda_intel && modprobe sof_pci_dev

  • 添加snd_hda_intel.dmic_detect=0GRUB 启动参数

  • ppa:nilarimogard/webupd8根据建议安装一组软件包这里

  • 使用 dkms 重新安装 alsa 相关软件包。请参阅这里

  • 重新安装pavucontrolpulseaudio按照质量保证

我的系统是

$ uname -r
5.3.0-51-generic

可能不相关,可能相关:
我的屏幕亮度控制也消失了。它们之前坏过一次,我通过添加acpi_backlight=videoGRUB_CMDLINE_LINUX_DEFAULTin/etc/default/grub并更新 grub 并重新启动来修复它。但那个修复仍然有效,但它仍然再次坏了。

我怎样才能让声音再次正常播放?

当我从 ubuntu 18.04 的实时系统启动时,声音又能正常使用了。

# live system version:
$ uname -a
Linux ubuntu 5.3.0-28-generic #30-18.04.1-Ubuntu SMP Fri Jan 17 06:14:09 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux

# aplay output on live system:
ubuntu@ubuntu:~$ aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: PCH [HDA Intel PCH], device 0: ALC285 Analog [ALC285 Analog]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 0: PCH [HDA Intel PCH], device 3: HDMI 0 [HDMI 0]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 0: PCH [HDA Intel PCH], device 7: HDMI 1 [HDMI 1]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 0: PCH [HDA Intel PCH], device 8: HDMI 2 [HDMI 2]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 0: PCH [HDA Intel PCH], device 9: HDMI 3 [HDMI 3]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 0: PCH [HDA Intel PCH], device 10: HDMI 4 [HDMI 4]
  Subdevices: 1/1
  Subdevice #0: subdevice #0

(在非直播系统上)/var/log/apt/term.log/var/log/apt/history.log/var/log/dpkg.log使用 查看时,所有文件都是空的sudo vim <filepath>。但有一个文件history.log.1.gz包含所有历史记录。我正在查看它,但我不知道要注意什么。

我已经从笔记本电脑上目前最旧的 zfs 快照启动(不是特别旧,因为当时我遇到了 zfs 问题),声音也不起作用。当我使用与5.3.0-28实时 USB 记忆棒相同的旧内核版本启动时,它也不起作用。

git diff --no-index apt_live.txt apt_tank.txt包含相应输出的文件apt list --installed给了我太多输出。许多版本号已更改。


我已经添加了标签19.04,并且20.04根据消息来源,现在回想起来,修复也适用于这些标签。

答案1

这个答案解决了声音问题但破坏了亮度控制。
我将其留在这里以供记录,并希望在我找到更好的解决方案时能够对其进行审查。

请考虑这个后续答案


[编辑:2020 年 3 月] 存在内核回归(在Linux 5.3.0-41 及更高版本版本(在 Ubuntu 19.10 上运行)会导致 Ubuntu 19.10 上出现新的“虚拟输出”问题。

[...]

5.3.0-41 和 -42 内核中存在回归问题(感谢 JustNiz 通知我),导致出现新的“虚拟输出”问题Ubuntu 19.10 和 18.04。此错误的解释可在此错误报告,所以我就不多说了,直接告诉你怎么修复。

[[编辑] 似乎这也可能发生在某些人身上Ubuntu 20.04用户。

来源:linuxuprising

 

sudo gedit /etc/modprobe.d/alsa-base.conf  

将以下行添加到此文件末尾:

options snd-hda-intel dmic_detect=0

保存并关闭文件然后重启 您的系统。音频应该恢复了。

来源:itsfoss

我之前已经尝试过,但没有成功。现在,我不仅做了上述操作,还遵循了以下方法,第二次成功了亚当的建议pulseaudio --start重启后运行
请注意,声音可能需要几秒钟才能开始起作用。

因为可能只有 Adam 的建议才是重要的,所以我options snd-hda-intel dmic_detect=0再次删除了该行并重新启动。它再次停止工作。所以我再次编辑了它并再次重新启动。这次声音无需运行就可以正常工作pulseaudio --start

我不明白,但这似乎是解决办法。如果事实证明我需要pulseaudio --start在每次启动时运行,我只需将该命令添加到我的.profile.bashrc。虽然在重新启动几次以测试这一点后,我很确定你实际上并不需要pulseaudio --start- 只需在启动后等待一段时间。大约一分钟。


关于我的问题中“可能相关”的部分

我的屏幕亮度控制也消失了。它们之前坏过一次,我通过在 /etc/default/grub 中的 GRUB_CMDLINE_LINUX_DEFAULT 中添加 acpi_backlight=video 并更新 grub 并重新启动来修复它。但那个修复仍然有效,但它仍然再次坏了。

在我注意到音量键现在能用并且能发出声音后,我立即按了亮度键。但它们不再起作用了。我会试试修复该答案与我在此答案中引用的一篇文章中有链接,一旦我知道它是否有效,我就会编辑我的答案。


关于启动后直到声音起作用的延迟:也许这与它有关。

$ dmesg[   44.945151] Bluetooth: RFCOMM ver 1.11
[   45.576833] rfkill: input handler disabled
[   84.861079] snd_hda_intel 0000:00:1f.3: couldn't bind with audio component
[   84.885411] snd_hda_codec_realtek hdaudioC0D0: autoconfig for ALC285: line_outs=2 (0x14/0x17/0x0/0x0/0x0) type:speaker
[   84.885414] snd_hda_codec_realtek hdaudioC0D0:    speaker_outs=0 (0x0/0x0/0x0/0x0/0x0)
[   84.885416] snd_hda_codec_realtek hdaudioC0D0:    hp_outs=1 (0x21/0x0/0x0/0x0/0x0)
[   84.885418] snd_hda_codec_realtek hdaudioC0D0:    mono: mono_out=0x0
[   84.885419] snd_hda_codec_realtek hdaudioC0D0:    inputs:
[   84.885421] snd_hda_codec_realtek hdaudioC0D0:      Mic=0x19
[   84.933958] snd_hda_codec_hdmi hdaudioC0D2: No i915 binding for Intel HDMI/DP codec
[   84.934160] hdaudio hdaudioC0D2: Unable to bind the codec
[   84.934845] input: HDA Intel PCH Headset Jack as /devices/pci0000:00/0000:00:1f.3/sound/card0/input25
[   84.934904] input: HDA Intel PCH Mic as /devices/pci0000:00/0000:00:1f.3/sound/card0/input26
[   84.934952] input: HDA Intel PCH Headphone as /devices/pci0000:00/0000:00:1f.3/sound/card0/input27

答案2

我的第一次尝试是这个答案虽然解决了声音问题,但是破坏了亮度控制。

后来,我注意到与不同的 grub 引导加载程序菜单结合时出现了奇怪的行为,于是开始写一个新问题。在写这个问题时,我进行了更多测试,直到它变成了一篇博客文章而不是一个问题,因为它还包含几个隐含问题的答案。

您会在水平线下方找到它。

总结

移除nomodesetacpi_backlight=video对我来说很管用。声音和亮度控制现在起作用了 -可能以牺牲冬眠为代价。

许多开源驱动程序已取消对非内核模式设置的支持,因此在这些情况下,当您使用 nomodeset 时,您最终将退回到最基本的 VESA 非加速驱动程序。这对性能和功能造成了很大影响。 来源质量保证


测试此内容的长文

这是对最初提出的问题的新视角Ubuntu 18.04 上未检测到声卡。这已经变得更加奇怪了。但为了让你理解我的彻底困惑,你需要一些借口:

我有三个分区,每个分区都有 ubuntu 18.04。最后,我会删除其中两个,但它们是EXT 4、、ZFS unencryptedZFS encrypted每个都有不同的背景,这样我才知道我登录的是哪个。

我也在两个地方安装了 grub。可能是因为我没有为 EXT4 系统设置单独的启动分区。所以我/dev/nvme0n1p8/boot也有/dev/nvme0n1p5 (boot partition)。两者都包含一个内核和 initrd 5.3.0-51-genericp5也包含5.3.0-53-generic, 也p8/boot包含53.0-28-generic和一些旧的4-15-0-101-generic。但是,我甚至不确定这些启动分区有多重要。
为了区分这两个 grub,我为 上的 grub 添加了一个主题p5

当我启动笔记本电脑时,它会引导到 上的 grub GUI p5。它在正确列出多个 zfs 分区方面存在一些问题,因此我创建了一个自定义条目,但这在这里也不重要。
要打开 上的 grub GUI p8,我按Esc进入 grub 终端,然后在那里输入

set prefix=(hd0,gpt8)

当我从 grub 启动时p5,亮度键和声音都坏了。
当我从 grub 启动时p8,它们工作正常。

我已确保在两个实例中使用相同的内核和系统。事实上,我尝试了几次,希望这可能是由于某些内核启动参数造成的。

问题并不局限于这三个 ubuntu 安装中的任何一个。我可以启动其中任何一个,这样声音就可以正常工作,也可以不工作,这取决于我使用的 grub。

这个问题并不局限于一个内核版本。我可以从两个内核启动51,也53可以启动到任意分区,声音是否正常取决于我使用的 grub。

问题不是由于同一版本的内核映像不同造成的。我可以从位于分区上的p8内核的 grub启动,声音可以正常工作。 53p5

测试

现在我们只考虑简单的 ext4 分区。加密的 zfs 分区的行为相同(我还没有检查未加密的 zfs 分区)。

首先,我尝试了几种启动参数的组合,但我认为以下三种测试对于这个问题应该足够了。 表格图像

  • 第一列(“条目”)要么是old用于启用 grub 的 ext4 菜单条目p8,要么new1是用于启用 grub 的 ext4 菜单条目p5
  • 通过编辑菜单项,在以 开头的行前包含,并在内核和 initrd 路径前添加 ,可以将设置为。 类似地,通过插入和删除内核和 initrd 路径中的 前缀,可以将 设置为kernel partition8set root=(hd0,gpt8)linux/boot
    kernel partition5set root=(hd0,gpt5)/boot
  • (不包括)之间的任何列都]kernel version, sound works?[与相应内核启动参数的存在有关。这些参数至少在其中一个 grub 菜单项中设置过,但正如您在表中看到的,即使没有这些参数,行为也保持不变。

我也测试过是否存在quiet splash任何影响,但似乎也没有任何影响。

为了绝对确定启动参数不会产生任何影响,我尝试直接从 grub 终端启动。

set prefix=(hd0,gpt8)/boot/grub
set root=(hd0,gpt5)
linux /vmlinuz-5.3.0-53-generic root=/dev/nvme0n1p8
initrd /initrd.img-5.3.0-53-generic
boot

声音和亮度键就是这样工作的。

set prefix=(hd0,gpt5)/grub
set root=(hd0,gpt5)
linux /vmlinuz-5.3.0-53-generic root=/dev/nvme0n1p8
initrd /initrd.img-5.3.0-53-generic
boot

声音和亮度键也以这种方式工作!(这一点出乎意料)

set prefix=(hd0,gpt8)/boot/grub
normal
# select menuentry and press E to edit it so that it looks as follows:
setparams 'Ubuntu'
set root=(hd0,gpt5)
linux /vmlinuz-5.3.0-53-generic root=/dev/nvme0n1p8
initrd /initrd.img-5.3.0-53-generic
# CTRL+X to boot that 

声音和亮度键也以这种方式工作。(自 grub 启动以来预期p8)。

set prefix=(hd0,gpt5)/grub
normal
# select menuentry and press E to edit it so that it looks as follows:
setparams 'Ubuntu'
set root=(hd0,gpt5)
linux /vmlinuz-5.3.0-53-generic root=/dev/nvme0n1p8
initrd /initrd.img-5.3.0-53-generic
# CTRL+X to boot that 

声音和亮度键仍然以这种方式工作!(出乎意料!)。现在,如果我不打开 grub 终端并直接编辑条目,则会出现相同的行为。因此,该normal命令并没有什么神奇之处。
另外,不写set root=(hd0,gpt5)似乎也没问题。

当我在 上运行 grub GUI 中生成的条目时p5,亮度和声音不起作用。所以我现在要尝试从头开始构建该条目。(准备好大量打字)

setparams 'Ubuntu'
recordfail
load_video
linux /vmlinuz-5.3.0-53-generic root=/dev/nvme0n1p8
initrd /initrd.img-5.3.0-53-generic

声音和亮度键仍然有效。

setparams 'Ubuntu'
recordfail
load_video
insmod gzio
linux /vmlinuz-5.3.0-53-generic root=/dev/nvme0n1p8
initrd /initrd.img-5.3.0-53-generic

声音和亮度键仍然有效。

setparams 'Ubuntu'
recordfail
load_video
gfxmode $linux_gfx_mode
insmod gzio
linux /vmlinuz-5.3.0-53-generic root=/dev/nvme0n1p8
initrd /initrd.img-5.3.0-53-generic

启动到紧急模式并显示“无法挂载 /boot/efi”(错误的 fs 类型、错误的选项、/dev/nvme0n1p2 上的错误超级块...)

因此我删除gfxmode $linux_gfx_modeagain 并继续:

setparams 'Ubuntu'
recordfail
load_video
insmod gzio
if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
insmod part_gpt
insmod ext2
linux /vmlinuz-5.3.0-53-generic root=/dev/nvme0n1p8
initrd /initrd.img-5.3.0-53-generic

声音和亮度键仍然有效。

setparams 'Ubuntu'
recordfail
load_video
insmod gzio
if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
insmod part_gpt
insmod ext2
if [ x$feature_platform_search_hint = xy ]; then
  search --no-floppy --fs-uuid --set=root  81e29369-ff69-4424-858c-3489283588d7
else
  search --no-floppy --fs-uuid --set=root 81e29369-ff69-4424-858c-3489283588d7
fi
linux /vmlinuz-5.3.0-53-generic root=/dev/nvme0n1p8
initrd /initrd.img-5.3.0-53-generic

声音和亮度键仍然有效。

setparams 'Ubuntu'
recordfail
load_video
gfxmode $linux_gfx_mode
insmod gzio
if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
insmod part_gpt
insmod ext2
if [ x$feature_platform_search_hint = xy ]; then
  search --no-floppy --fs-uuid --set=root  81e29369-ff69-4424-858c-3489283588d7
else
  search --no-floppy --fs-uuid --set=root 81e29369-ff69-4424-858c-3489283588d7
fi
linux /vmlinuz-5.3.0-53-generic root=/dev/nvme0n1p8
initrd /initrd.img-5.3.0-53-generic

我再次插入它gfxmode $linux_gfx_mode并且它仍然可以启动良好并且声音和亮度键仍然有效。

setparams 'Ubuntu'
recordfail
load_video
gfxmode $linux_gfx_mode
insmod gzio
if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
insmod part_gpt
insmod ext2
if [ x$feature_platform_search_hint = xy ]; then
  search --no-floppy --fs-uuid --set=root  81e29369-ff69-4424-858c-3489283588d7
else
  search --no-floppy --fs-uuid --set=root 81e29369-ff69-4424-858c-3489283588d7
fi
linux /vmlinuz-5.3.0-53-generic root=/dev/nvme0n1p8 ro nomodeset
initrd /initrd.img-5.3.0-53-generic

并且屏幕亮度和声音不再起作用!

同样,没有nomodeset

setparams 'Ubuntu'
recordfail
load_video
gfxmode $linux_gfx_mode
insmod gzio
if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
insmod part_gpt
insmod ext2
if [ x$feature_platform_search_hint = xy ]; then
  search --no-floppy --fs-uuid --set=root  81e29369-ff69-4424-858c-3489283588d7
else
  search --no-floppy --fs-uuid --set=root 81e29369-ff69-4424-858c-3489283588d7
fi
linux /vmlinuz-5.3.0-53-generic root=/dev/nvme0n1p8 ro
initrd /initrd.img-5.3.0-53-generic

声音和亮度键仍然有效。

setparams 'Ubuntu'
recordfail
load_video
gfxmode $linux_gfx_mode
insmod gzio
if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
insmod part_gpt
insmod ext2
if [ x$feature_platform_search_hint = xy ]; then
  search --no-floppy --fs-uuid --set=root  81e29369-ff69-4424-858c-3489283588d7
else
  search --no-floppy --fs-uuid --set=root 81e29369-ff69-4424-858c-3489283588d7
fi
linux /vmlinuz-5.3.0-53-generic root=/dev/nvme0n1p8 ro acpi_backlight=video
initrd /initrd.img-5.3.0-53-generic

声音和亮度键仍然有效。
值得注意的是,我acpi_backlight=video一开始只有这两个键,因为亮度键不起作用。而我有nomodeset(目前看来是罪魁祸首)因为它修复了休眠问题。也许nomodeset损坏了我的亮度键和声音,然后我尝试使用来修复acpi_backlight=video

因此nomodeset再次包括:

setparams 'Ubuntu'
recordfail
load_video
gfxmode $linux_gfx_mode
insmod gzio
if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
insmod part_gpt
insmod ext2
if [ x$feature_platform_search_hint = xy ]; then
  search --no-floppy --fs-uuid --set=root  81e29369-ff69-4424-858c-3489283588d7
else
  search --no-floppy --fs-uuid --set=root 81e29369-ff69-4424-858c-3489283588d7
fi
linux /vmlinuz-5.3.0-53-generic root=/dev/nvme0n1p8 ro nomodeset acpi_backlight=video
initrd /initrd.img-5.3.0-53-generic

声音和亮度现在不工作,所以我不清楚为什么acpi_backlight=video上次亮度修复对我有用。我是在 5 月 9 日应用的,现在nomodeset已经是 3 月了……也许我删除并重新添加了一段时间,但没有意识到它对亮度键的影响。

我宁愿有一个问题,而不是两个问题,因此这里再次删除nomodeset acpi_backlight=video并添加最后一个参数:

setparams 'Ubuntu'
recordfail
load_video
gfxmode $linux_gfx_mode
insmod gzio
if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
insmod part_gpt
insmod ext2
if [ x$feature_platform_search_hint = xy ]; then
  search --no-floppy --fs-uuid --set=root  81e29369-ff69-4424-858c-3489283588d7
else
  search --no-floppy --fs-uuid --set=root 81e29369-ff69-4424-858c-3489283588d7
fi
linux /vmlinuz-5.3.0-53-generic root=/dev/nvme0n1p8 ro resume=UUID=1ba104f0-35be-42f7-bf71-65e43f6fbcc3
initrd /initrd.img-5.3.0-53-generic

正如预期的那样,声音和亮度又恢复正常了。我现在还没有测试休眠功能。我猜想它要么会因为联想最近更新了 BIOS 和固件而恢复正常,要么仍然无法像我的问题中那样工作。但那将是另一天的另一个问题。

现在剩下的问题是:为什么它似乎在旧的引导程序中工作?
好吧……事实证明,在我的大多数测试中都没有修改“nomodeset”。但在上面的表格中,您可以在引导程序p5、内核 51 中看到声音p8,没有acpi_backlight和没有nomodeset
我再也无法重现这种情况。也许我在做笔记时犯了一个错误。

相关内容