Ubuntu 20.04 HDMI 上没有声音

Ubuntu 20.04 HDMI 上没有声音

我刚刚在笔记本电脑上安装了有点过时的 Ubuntu 20.04:

  • CPU:英特尔酷睿 i5 CPU M 480 @ 2.67GHz
  • 内存:4GB
  • 显卡:GeForce GT 420M
  • 音频:GF108 高保真音频控制器 NVIDIA 和音频 5 系列/3400 系列芯片组高保真音频 HD 500GB

总体来说,系统运行良好,但我在 HDMI 音频方面遇到了大问题。HDMI 上的显示工作正常,但音频完全不工作。

我在 Ask Ubuntu 上尝试了很多解决方案,但问题仍然存在。我尝试过的一些解决方案位于以下链接中:

升级至 20.04 后 HDMI 声音无法使用

Ubuntu 18.04:除非我在输出之间切换,否则音频不起作用

没有检测到我的声卡 HDMI

另外,我再次下载了 Ubuntu 20.04 iso 并重新安装了系统,但它不起作用。

在我使用 Windows 10 之前(用 Ubuntu 替换它),HDMI 运行良好。

当我运行时,aplay -l我得到了以下结果:

播放硬件设备

当我运行时,lspci我得到了以下结果:

设备

在里面设置->声音->输出->输出设备我只有两个选择:

  • 内置音频扬声器
  • 数字输出(S/PDIF)-内置音频

在 Pulseaudio > 配置中显示:GF108 高清晰度音频控制器和内置音频

并且在这两者中,所有带有 HDMI 的选项都显示为(未插电)(不可用)。

最后,声音在我的笔记本电脑上正常,如果我连接 HDMI 电缆,它可以正确显示,但声音仍然在我的笔记本电脑上。

答案1

从 Ubuntu 18.04 升级到 20.04 后,我注意到登录后打开电视时 pulseaudio 不再检测 HDMI 音频输出(插入 nVidia 显卡)。声音设置中不再列出 HDMI 输出。这在 18.04 中曾经有效。

我发现一个解决方法是在打开电视后打开控制台并输入以下命令:

pulseaudio -k

答案2

这是一个老问题,所以也许你已经解决了你的问题。但如果你还没有,或者其他人也遇到了这个问题,却找不到适合他们的解决方案(就像我最近的情况一样),这里有另一个可以尝试的方法。

这主要取自这里有建议,但略有扩展/修改。PulseAudio 似乎有一个错误,可能导致它无法自动检测 hdmi 音频输出(其语言中为“接收器”),因此您可以通过手动告知它您的 hdmi 设备来解决问题。

步骤 1:确保 PulseAudio没有检测到你的 HDMI 接收器

您可以使用 列出加载到 PulseAudio 的所有接收器pactl list short sinks。这将生成以下形式的列表:

0   alsa_output.pci-0000_06_00.6.HiFi__hw_Generic__sink module-alsa-card.c  s16le 2ch 48000HzIDLE

如果您的 HDMI 音频未显示在列表中,那么我们可能已经找到问题所在,请继续阅读。如果您不确定是否显示,您还可以运行pactl list sinks | grep description以查看检测到的设备的更人性化描述。我认为 HDMI 接收器的描述形式为“blah 高清音频控制器”,而非 HDMI 接收器的描述形式可能为“blah blah blah 扬声器 + 耳机”。

第 2 步:确保您的计算机输出音频至 hdmi

运行aplay -l以获取硬件播放设备列表。对我来说,输出如下所示

**** List of PLAYBACK Hardware Devices ****
card 0: NVidia [HDA NVidia], device 3: HDMI 0 [HDMI 0]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 0: NVidia [HDA NVidia], device 7: HDMI 1 [HDMI 1]
  Subdevices: 0/1
  Subdevice #0: subdevice #0
card 0: NVidia [HDA NVidia], device 8: HDMI 2 [HDMI 2]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 0: NVidia [HDA NVidia], device 9: HDMI 3 [HDMI 3]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 0: NVidia [HDA NVidia], device 10: HDMI 4 [HDMI 4]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 0: NVidia [HDA NVidia], device 11: HDMI 5 [HDMI 5]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 1: Generic [HD-Audio Generic], device 0: ALC245 Analog [ALC245 Analog]
  Subdevices: 0/1
  Subdevice #0: subdevice #0

具体来说,有许多种 HDMI 设备可用。我们希望找到与您插入电缆的 HDMI 端口实际对应的设备。

首先要运行alsamixer以确保您的 HDMI 设备未静音。您应该会看到如下所示的屏幕。

在此处输入图片描述

使用F6选择正确的声卡。如果您MM在任何插槽中看到,则表示它已静音。选择它并按下取消静音。完成后M点击。Esc

实际上,您可能只需要取消静音其中一个插槽(实际上与您的 HDMI 端口关联的插槽,可能是第一个插槽),但取消静音所有插槽也不会有什么坏处。

处理完这些后,我们现在可以测试您的音频。运行

speaker-test --channels 2 --test wav --device hw:[card],[device]

其中 [card],[device] 指的是 输出的数字aplay -l,例如,我首先使用hw:0,3。您将对之前列出的每个 hdmi 硬件设备执行此操作,直到其中一个设备实际发出可听见的声音。

步骤 3:将 HDMI 接收器添加到 PulseAudio 并确保其正常工作(如果需要,可以跳过)

现在你已经识别了与 HDMI 端口关联的卡和设备编号,只需运行

pactl load-module module-alsa-sink device=hw:[card],[device]

现在您应该可以转到声音设置并查看新的可选输出设备(我的设备名为TU116 High Definition Audio Controller)。选择它并查看您的 HDMI 音频现在是否正常工作。如果不工作,我帮不了您。但如果工作正常,恭喜您。

步骤 4:使此更改(几乎)永久生效

目前,如果您重新启动计算机,则必须重新运行此load_module命令才能使 hdmi 再次工作。为了使情况好一点,请编辑“/etc/pulse/default.pa”(以 root 身份),并在文件末尾添加以下行

load-module module-alsa-sink device=hw:[card],[device]

在此之后(特别是如果你跳过了第 3 步),你可能需要运行

rm -r ~/.config/pulse
killall pulseaudio
pulseaudio --start

重新启动 PulseAudio。

最后,一些小问题/评论

  • 对我来说,即使这样做了,我仍然需要killall pulseaudio; pulseaudio --start在重新启动计算机后运行,以便 PulseAudio 加载到 hdmi 接收器中。我不知道如何解决这个问题。
  • 对我来说,即使我的电缆没有插入,hdmi 设备仍然会作为选项列在 Ubuntu 的声音设置中。我不知道如何解决这个问题。
  • 本答案开头的链接提到了一个当插入电缆时自动切换到 HDMI 音频的脚本。我对 Linux 了解不够,无法理解该脚本中发生的情况,所以我自己没有尝试过。

编辑:执行此答案的 Bash 脚本

为了回应上面的最后一点,我最近编写了一个 bash 脚本,它将自动执行此处描述的步骤。您可以在github. 与剧本相比在引用的链接中,我编写的程序(尝试)对运行它的机器做出更少的假设;特别是,它不假设 PulseAudio 已经(手动)配置为检测您的 HDMI 电缆。如果没有发生这种情况,它会运行上面描述的过程,然后将您的音频切换到 HDMI。

可以使用 udev 配置此脚本,使其在插入或拔出 HDMI 电缆时运行。为此,请在文件夹中/etc/udev/rules.d添加包含以下行的文件

KERNEL=="card*", SUBSYSTEM=="drm", ACTION=="change", RUN+="[path-to-script]"

(在我的计算机上,我将脚本保存在 中/usr/local/bin/hdmi.sh)。创建此文件后,运行udevadm control --reload-rules。完成此操作后,您应该只需插入 HDMI 电缆即可正常工作。拔下电缆后,音频应切换回您的计算机。

新的障碍/言论

  • 首次添加此 udev 规则后,您可能需要重新启动计算机一次,更改才能生效。
  • 如果 udev 规则有问题,您可以随时手动运行脚本。如果再多花点功夫,这种方法会更可靠一些。
  • 对我来说,如果我连续 5 次插入和拔出 HDMI 电缆而不重新启动,则音频会变得非常失真。我不知道是什么原因造成的。
  • 该脚本实际上只是执行上述过程。具体来说,在某个时刻,它会运行以确定在 PulseAudio 中加载哪个卡/设备。因此,运行时,您可能会听到可听见的“左/右”声音(或任何默认speaker-test声音)。speaker-test
  • 脚本中有一个ENABLE_DESKTOP_NOTIFICATIONS变量。如果您希望每次运行时都收到通知,请将其设置为 1。

答案3

我正在使用带有 Xfce 的 Mint 20.1,这为我解决了这个问题:

  • 打开音频混音器(这里叫它pavucontrol
  • 切换到“配置”选项卡(最右边的选项卡),
  • 有一个下拉菜单用于选择内置音频设备的配置文件。
  • 在这里我可以选择一个 HDMI 配置文件,但要小心选择一个未标记为不可用的配置文件。
  • 此后,通过 HDMI 传输的音频便可正常工作。

我意识到这不完全是 Ubuntu,但是足够接近,所以我认为这样的事情在 Ubuntu 上也应该是可能的。

答案4

应用程序 pavucontrol 5.0 解决了这个问题,它允许用户选择和锁定输出设备。不幸的是,该应用程序是发行版专用的,因此 Ubunutu 用户必须等待 Canonical 将该应用程序添加到存储库中。

相关内容