![Ubuntu 20.04 HDMI 上没有声音](https://linux22.com/image/1018888/Ubuntu%2020.04%20HDMI%20%E4%B8%8A%E6%B2%A1%E6%9C%89%E5%A3%B0%E9%9F%B3.png)
我刚刚在笔记本电脑上安装了有点过时的 Ubuntu 20.04:
- CPU:英特尔酷睿 i5 CPU M 480 @ 2.67GHz
- 内存:4GB
- 显卡:GeForce GT 420M
- 音频:GF108 高保真音频控制器 NVIDIA 和音频 5 系列/3400 系列芯片组高保真音频 HD 500GB
总体来说,系统运行良好,但我在 HDMI 音频方面遇到了大问题。HDMI 上的显示工作正常,但音频完全不工作。
我在 Ask Ubuntu 上尝试了很多解决方案,但问题仍然存在。我尝试过的一些解决方案位于以下链接中:
Ubuntu 18.04:除非我在输出之间切换,否则音频不起作用
另外,我再次下载了 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 将该应用程序添加到存储库中。