Ubuntu 16.04 扬声器没有声音,只有耳机在工作

jhu*_*tch 9 sound pulseaudio alsa

我对这个问题无能为力。我知道我已经看到这个问题一百万次,但似乎没有一个解决方案有效。

我有一台使用 Windows 8.1 双启动的华硕笔记本电脑,我从 15.10 升级到 16.04 并且无法使用扬声器;正如这些屏幕截图所证明的那样,声卡始终认为耳机已插入。

alsamixer

控制

这不是硬件问题,因为 1) 声音在 Windows 8.1 上工作 2) 我可以通过使用 hdajackretask 禁用耳机插孔来使扬声器工作(设置覆盖,然后将其设置为“未连接”)但随后无法使用热键改变音量

我试过重新加载 alsa 并清除 alsa 并重新安装。

无论如何,我打算实际删除我的 Windows 8 分区。我在这里看到: 启动到 Windows 8.1 后,Ubuntu 14.04 中的笔记本电脑扬声器没有声音 ,Windows 可能导致问题。删除分区会帮助解决问题吗?

编辑:我已经按照那个问题的建议禁用了混合启动。

not*_*dds 12

将我的 Xubuntu 14.04 升级到 Xubuntu 16.04 时,我也遇到了这个问题(耳机发出声音,但扬声器不发出声音)。我有一个带有 Realtek ALC259 芯片的 HD Intel 声卡。使用从 3.13.X 到 4.10.X 的各种内核启动时问题仍然存在。

但是,我已经解决了,方法如下:

重要的是要了解 Pulseaudio(PA) 是 Ubuntu 及其大多数(全部?)变体的默认声音控制系统。PA 本质上是覆盖在核心 ALSA 音响系统之上。因此,对于 PA 中的每一个动作,ALSA 中都会有后续反应。对于 PA 中定义的每个输出(又名端口),对 ALSA 系统有一个定义的调整。这种调整被称为“混合路径”。

!!!重要的 !!!

在您继续之前,现在是验证这确实是您的问题的好时机,并且没有其他原因导致您的扬声器不工作。通过执行以下测试,您可以非常轻松地做到这一点。(如果您一直在摆弄您的音响系统,您可能希望在测试前将其恢复为默认设置):

  1. 拔掉任何耳机或其他声音设备,除了不工作的扬声器。
  2. 开始播放通常会从您的扬声器发出声音的音频文件,尽管目前还没有。然后,
  3. 打开你的终端并运行命令:

    alsamixer
    
    Run Code Online (Sandbox Code Playgroud)

您应该看到以下内容:

alsamixer 由于声卡的差异,您的设备可能与图中的设备略有不同。就我而言,在解决问题之前,我的 alsamixer 看起来就像上图。

  1. 取消当前静音的所有设备的静音(使用“m”键切换静音)。然后在任何不是 100% 的设备上调高音量滑块。

如果您可以从扬声器中听到声音,则此修复程序适合您!

如果您没有听到任何声音,请返回“The Google”并继续搜索。这种方法不会帮助你。


如果您从上面的测试中成功获得声音,我们现在需要做的是使用 alsamixer 设置来确定:

  1. 哪个设备的音量控制实际上控制了您的扬声器的音量,以及
  2. 哪些设备需要取消静音才能使扬声器工作。多个设备可能需要取消静音。

一旦我们知道扬声器工作的 ALSA 设置,我们就可以使用此信息对 PA 混音器路径进行必要的更改。

就我而言,我发现我的耳机和扬声器通过以下方式在 ALSA 中链接:

  1. 我的耳机音量由“耳机”设备控制。
  2. 从我的耳机中获取声音需要取消“主”和“耳机”设备的静音。
  3. 我的扬声器音量也由“耳机”设备控制。(令人惊讶的是,ALSA 扬声器音量设置对我扬声器的音量没有影响。)
  4. 从我的扬声器中获取声音需要取消“主”和“扬声器”设备的静音。

PulseAudio(PA) 中扬声器的默认混音器路径假定我的扬声器独立于我的耳机。正如上面观察 3 所证明的那样,情况并非如此。随后,每当在 PA 中选择扬声器输出时,我的扬声器的 PA 中的默认混音器路径都会在 ALSA 中进行以下有问题的更改:

  1. 将耳机音量降至 0。
  2. 将扬声器设备设置为音量控制。

考虑到我之前描述的 ALSA 连接我的扬声器和耳机的方式,对 ALSA 的这些更改将阻止声音从我的扬声器中传出。

所以,这个问题的解决方案是通过修改扬声器的混音器路径来获得的。

PA 混音器路径文件位于:

/usr/share/pulseaudio/alsa-mixer/paths/

要确定哪个混音器路径文件控制您的扬声器,您需要:

  1. 确保在 PA 中选择了扬声器输出(即不是耳机)。 在此处输入图片说明

  2. 打开终端并运行以下命令:

    pactl list | grep 'Active Port.*output.*'
    
    Run Code Online (Sandbox Code Playgroud)
  3. 它应该输出如下所示的内容:

    活动端口:音频类型-输出-设备

IE

在此处输入图片说明

“活动端口”是当前控制 ALSA 设置的 PA 端口。由于您已经选择了扬声器作为 PA 输出,因此终端命令的此输出告诉您需要编辑混音器路径文件audiotype -output- device .conf。就我而言,混音器路径文件是analog-output-speaker.conf。

现在我们有了正确的混音器路径文件,我们需要进行更改。

注意:在此混音器路径文件夹中,有一个名为“analog-output.conf.common”的文件。该文件的内容解释了如何解释混频器路径文件。如果您想了解以下更改,我强烈建议您在编辑混音器路径之前查看此文件!

每个混音器路径文件都包含许多“元素”。理想情况下,每个文件中都有一个元素代表您计算机上的每个 ALSA 设备。可能还有您没有的元素。这是正常的。

就我而言,我需要通过以下方式更改模拟输出扬声器.conf的混音器路径中的耳机和扬声器元素:

  1. 允许 PA 音量调节耳机 ALSA 音量。

原来的:

[Element Headphone]
switch = off
volume = off
Run Code Online (Sandbox Code Playgroud)

编辑:

[Element Headphone]
switch = off
volume = merge
override-map.1 = all
override-map.2 = all-left,all-right
Run Code Online (Sandbox Code Playgroud)
  1. (可选)将扬声器音量设置为关闭,防止 PA 音量影响 ALSA 音量。(如果你不这样做,你的声音仍然可以工作,但 ALSA 中的扬声器设置会不必要地反弹。)

原来的:

[Element Speaker]
required-any = any
switch = mute
volume = merge
override-map.1 = all
override-map.2 = all-left,all-right
Run Code Online (Sandbox Code Playgroud)

编辑:

[Element Speaker]
required-any = any
switch = mute
volume = off
Run Code Online (Sandbox Code Playgroud)

然后,通过执行以下命令重新启动 PA:

pulseaudio -k && pulseaudio --start
Run Code Online (Sandbox Code Playgroud)

瞧!