SDB:音频故障排除

跳转到:导航搜索


本指南旨在帮助openSUSE用户在全新安装openSUSE后,如果声音完全无法工作,提供基本的声音支持。本指南不旨在展示如何安装编解码器。

通用

并非本故障排除指南中的所有步骤都是必需的。只需逐步完成各个部分,直到您的音频开始工作为止。

本指南以通用方式编写。如果您不偏离默认的openSUSE打包驱动程序;桌面和内核,则它最有可能帮助用户。也就是说,如果您安装了自定义内核或更新到factory KDE版本(而不是保持默认的KDE版本),或者应用了制造商提供的声音驱动程序,则本指南可能无法提供帮助的可能性会增加。


固件

openSUSE安装后,在某些情况下,需要调整音频混音器设置才能获得声音。对于某些声音编解码器,需要RPM“alsa-firmware”(默认情况下未安装)才能提供声音功能。在其他情况下,如果音频硬件较新,则需要更新版本的ALSA。一些较新的声卡可能需要“sof-firmware”才能支持作为Sound Open Firmware项目的一部分实现的驱动程序。如果需要,可以检查日志以获取与固件相关的消息。

sudo journalctl -b | grep firmware

ALSA概述

ALSA(高级Linux声音架构)由内核声音设备驱动程序组成,这些驱动程序需要支持各种音频硬件设备。它还包括低级用户空间库(为应用程序开发人员提供统一的应用程序编程接口)和用于用户的CLI实用程序。通常不需要手动安装和配置,因为udev会在启动时自动检测硬件,并相应地加载相关驱动程序。


在openSUSE上安装alsa-firmware

一些较旧的声卡还需要“alsa-firmware”软件包,除了“alsa”和“alsa-utils”之外。因此,在继续操作之前,请确保已安装“alsa”、“alsa-utils”和“alsa-firmware”。安装alsa-firmware软件包似乎可以帮助使用以下设备的用户:asihpi (dspxxxx)、ea (gina、indigo、layla、mona)、emagic (emi)、ess (maestro)、mixart、multiface、pcxhr、sb16、vx、yamaha、C-Media以及其他一些芯片组。

要查看是否已安装alsa-firmware,请在终端中键入以下命令

rpm -q alsa alsa-utils alsa-firmware

如果得到

alsa-1.0.14-31.2
alsa-utils-1.0.14-27
package alsa-firmware is not installed

则表示未安装alsa-firmware。

要在openSUSE中安装alsa-firmware

sudo zypper in alsa-firmware

安装alsa-firmware后,重新启动机器,或者确保重新加载内核的声音模块。检查您的声音(参考“如何测试您的声音”),如果需要,使用以下命令通过终端重新启动ALSA服务

sudo systemctl restart alsasound

如何测试您的声音

一个简单的测试来查看您的声音是否正常工作,是在终端中打开,然后键入或复制粘贴

speaker-test -Dplug:front -c2 -l5 -twav

请注意,Linux区分大小写,“D”与“d”不同。按CTRL-C停止测试。请注意,您应该检查混音器设置(在终端中运行alsamixer,但也可以使用图形程序,如kmix或pavucontrol),以确保PCM和主音量未静音。如果需要,调高音量(或按“M”键)并重试,直到听到声音。请注意,环绕声的测试不同。

如果该测试产生错误,请尝试以下更简单的测试

speaker-test -c2 -l5 -twav

如果没有声音,请继续下一节。

对于具有多个声卡/设备的系统,可以使用以下命令获取检测到的声音PCM设备的列表

aplay -L

speaker-test实用程序可以配置为使用-D选项指定特定的设备。示例

speaker-test -c2 -l5 -twav -D hdmi:CARD=NVidia,DEV=1
speaker-test -c6 -l5 -twav -D hdmi:CARD=PCH,DEV=2
speaker-test -c8 -l5 -twav -D plug:surround71

ALSA网站建议的测试声音方法

alsa-project还提供了一些关于测试声音的建议,这些建议位于此处:http://www.alsa-project.org/main/index.php/SoundcardTesting


YaST声音配置

YaST声音模块现已过时。它已被从openSUSE Tumblweed中删除,但仍然存在于当前支持的openSUSE Leap版本中(至少目前是这样),因此本节可能很快会被删除。无论如何,手动配置声卡在很大程度上是不必要的。

参考https://lists.opensuse.org/archives/list/factory@lists.opensuse.org/thread/7RU37EJFMUS3UEGC23K4FKEXRHRNT5O6/

要配置您的声音,请转到

  • YAST > 硬件 > 声音 > 其他 > 测试并测试您的声音。如果您没有声音,那么
  • YAST > 硬件 > 声音 > 其他 > 音量并将您的PCM和主音量调高到大约75%,然后测试您的声音。如果您没有声音,那么
  • YAST > 硬件 > 声音并选择您的声卡并删除它(这将删除配置,而不是卡)。如果您想确保完全删除声音配置,则需要以root权限删除文件/etc/modprobe.d/50-sound.conf。然后添加卡,并配置卡。这将重新创建50-sound.conf文件。

配置后测试您的声音,并且不要忘记检查您的桌面混音器、alsamixer或pulseaudio(根据需要)。

如果仍然没有声音,请继续下一步。


检查您的音频设置以获取详细信息

在进一步操作之前,获取有关您的声音配置的更多信息通常很有用。

基本的CLI命令

详细的音频硬件、驱动程序和服务器信息

$ inxi -Aa

要查找您的alsa版本

$ cat /proc/asound/version

要查找您加载了哪些声音模块

$ cat /proc/asound/modules

要确定您的声卡使用的音频编解码器(这很重要)

$ cat /proc/asound/cards

并查找您的音频编解码器。例如,如果您获得

0 [nForce2        ]: NFORCE - NVidia nForce2
                     NVidia nForce2 with ALC650F at irq 18

那么对于本示例,我们感兴趣的是ALC650。

检查哪些应用程序/进程正在访问声音设备

fuser -v /dev/snd/*

运行以获取详细信息的脚本

如果这没有提供编解码器,那么另一种获取有关您的硬件和声音配置的更多信息的方法是运行以下脚本。

运行脚本的第一种方法

诊断脚本是用户wishie从IRC #alsa创建的。对于1.0.17或更高版本的alsa的用户,它包含在alsa中。要运行,复制并粘贴以下行,并具有root权限

/usr/sbin/alsa-info.sh

通常,第一次运行此脚本时,它会注意到有更新可用,并询问您是否希望更新。选择是。如果您在具有root权限的终端/konsole中运行此脚本,则脚本将更新。然后第二次运行脚本。完成后,它会向您传递一个URL。查看URL的内容,因为它会传递给您有用的信息。同时保留脚本提供的URL记录,因为它可以帮助您在论坛或IRC频道上寻求帮助时将其传递给其他人。然后转到本指南的下一步。

保留脚本提供的URL记录,因为它可以帮助您在论坛或IRC频道上寻求帮助时将其传递给其他人。

现在仔细查看这些脚本页面,并尝试确定您的PC声音硬件具有哪个音频编解码器。例如,它可能是ALC650、ALC268、AD1986A、STAC9220等...

运行脚本的另一种方法

对于那些发现上述运行两个诊断脚本的说明过于困难的人,那么作为普通用户,尝试将以下行复制并粘贴到终端中(以同时下载和运行脚本)。复制完整的行。脚本执行时会提示您输入root密码。

# wget -O alsa-info.sh http://www.alsa-project.org/alsa-info.sh && sudo bash alsa-info.sh

搜索alsa网站以获取编解码器信息

现在,掌握了编解码器信息后,转到alsa网站,进行搜索,看看是否有任何与该编解码器相关的有用信息

http://www.alsa-project.org/main/index.php/Main_Page

该页面左侧有一个搜索框(向下滚动)。假设您的音频编解码器是ALC268。然后对此进行搜索可能会显示

http://www.alsa-project.org/main/index.php/Special:Search?search=ALC268&go=Go

在该页面上搜索将显示许多使用此新alsa版本的ALC268的更改。在这种情况下,您应该考虑更新到较新版本的alsa。

如果在进行这些搜索后,似乎当前版本的alsa似乎足够了,那么您可能需要对/etc/modprobe.d/sound文件进行自定义手动编辑,并添加模型规范(参考第8节)。但是,如果更新到较新版本的alsa似乎有用,请转到下一节。


在openSUSE中更新ALSA

如果确定需要更新alsa,则可以通过rpm或tarball来完成。与往常一样,平均openSUSE用户通常应首先尝试通过rpm更新,然后再尝试通过tarball更新。

通过RPM更新alsa

对于openSUSE,openSUSE alsa打包者/alsa开发人员还以openSUSE rpm的形式打包了最新的alsa,以便帮助声音无法正常工作的用户,通过提供最先进的声音驱动程序。

通常更新的rpm应用程序包括alsa、alsa-utils、alsa-tools和libasound2 alsa-firmware。请注意,alsa-firmware位于该rpm URL的“noarch”部分。此外,还有要更新的ALSA驱动程序内核模块。

最简单的方法是将下一节中注明的存储库URL添加到您的软件包管理器,并通过您的软件包管理器安装rpm应用程序。

用于openSUSE(各种内核)更新alsa的RPM命令

针对各种openSUSE版本和各种内核版本的具体示例,以及针对openSUSE的具体zypper命令,请参见此处:SDB:Alsa-update

如果重新启动后,按照上述URL安装的rpm没有帮助,那么还有每日alsa快照打包并在此处提供:SDB:Alsa-update-snapshot

上述示例很重要,请务必查看该链接,以查看您需要使用的确切rpm/zypper安装命令。再次强调,这一点很重要。

请查看上述链接。它提供了一个带有确切命令示例的链接,适用于各种openSUSE和各种内核版本。请注意,您也可以通过键入来检查您的内核

$ uname -a

要确定您的openSuSE版本和系统体系结构版本,您可以键入

$ cat /etc/os-release

对于所有 openSUSE 用户,安装最新的 alsa 后,最简单的方法是重启(以重新加载更新的 alsa 驱动程序),然后再次执行此页面的所有先前步骤,以查看是否可以在新的 alsa 下使您的声音工作。请注意,您可能仍然没有声音,并且可能需要编辑您的 /etc/modprobe.d/sound 文件(参考第 8 节),并添加型号规范。此外,如果上述 alsa 更新恢复了您的声音,那么请小心应用 alsa 的进一步更新。此网站上的 alsa rpm 非常“前沿”,它们会定期构建,并且可能最近引入了尚未修复的错误。因此,一旦您的声音工作正常,您应该删除此“前沿”多媒体存储库(同时保留已安装的 rpm)。

通过 tarball 更新 alsa

您也可以通过访问以下 URL 并下载 alsa tarball alsa-driver、alsa-firmware、alsa-lib、alsa-utils 和 alsa-tools 来为您的 PC 自定义编译 alsa:http://www.alsa-project.org/main/index.php/Download 注意事项...这种通过从 tarball 自定义编译 alsa 进行更新通常不适合新用户。请尝试使用上面描述的通过 zypper 命令进行 rpm 更新的方法。

readme.txt 和 install.txt 提供了从 tarball 编译的说明。此外,alsa 网站上还可以找到自定义安装说明。在我们的例子中,对于 ALC268,它的内核声音模块是:snd-hda-intel(我们在上面输入 `cat /proc/asound/modules` 时学到的)。在 alsa 网站上搜索 snd-hda-intel 会得到这个页面,该页面提供了编译 alsa 的自定义说明:http://www.alsa-project.org/main/index.php/Matrix:Module-hda-intel

对于大多数声音模块也是如此。编译并安装 alsa 后,重启您的 PC 以加载声音模块,然后再次执行此页面的所有先前步骤,以查看是否可以在新的 alsa 下使您的声音工作。请注意,您可能仍然没有声音,并且您可能希望根据 alsa 页面的建议修改您的 /etc/modprobe.d/sound 文件,或者您可能希望尝试编辑您的 /etc/modprobe.d/sound 文件(通过添加型号规范),如下所述。


将“model”添加到 /etc/modprobe.d/<file> 文件

要使用 openSUSE 显式指定声音卡的型号,您首先需要确定要应用哪个型号规范。您的 PC 上有一个 ALSA-Configuration.txt 文件,您可以检查它(位于如下目录中,具体取决于您的内核版本)/usr/src/linux-2.6.22.13-0.3/Documentation/sound/alsa/ALSA-Configuration.txt

这里也有一个最新的 ALSA-Configuration.txt 文件http://hg.alsa-project.org/alsa-kernel/raw-file/5082de4abb26/Documentation/ALSA-Configuration.txt

截至 alsa 的 1.0.19 版本,HD-Audio-Models 选项列在 HD-Audio-Models.txt 文件中。

这里有一个关于如何进行此手动配置的优秀示例:SDB:Intel-HDA_sound_problems

在我们的 ALC268 示例中,您会看到

ALC268
  3stack        3-stack model
  toshiba       Toshiba A205
  acer          Acer laptops
  dell          Dell OEM laptops (Vostro 1200)
  zepto         Zepto laptops
  test          for testing/debugging purpose, almost all controls can
                adjusted.  Appearing only when compiled with
                $CONFIG_SND_DEBUG=y
  auto          auto-config reading BIOS (default)

下一步是编辑 /etc/modprobe.d/50-sound.conf 并查找类似于以下行的内容

options snd-hda-intel enable=1 index=0

在该行的末尾添加型号规范。

例如(对于 ALC268 编解码器),如果您清楚地拥有一台“acer”或“toshiba”笔记本电脑,那么您首先可以尝试的选择就很明确。但即使您的硬件不是“acer”或“toshiba”,这些型号仍然可能适用于您的音频,您仍然应该迭代地尝试这些型号。

因此,例如(要使用 toshiba 型号选项),型号的指定方式如下

options snd-hda-intel model=toshiba

保存文件,并通过在具有 root 权限的终端中键入以下命令来重启您的 alsa 驱动程序

# systemctl restart alsasound

然后使用此网页开头的声音测试来测试您的声音。不要忘记检查您的混音器是否禁用了或阻止了声音。

如果这不起作用,则可以重复该过程,选择不同的型号并再次尝试。(请记住在每次编辑之间重启 alsasound。)

一些更复杂的硬件编解码器示例,例如 ALC880

ALC880
  3stack        3-jack in back and a headphone out
  3stack-digout 3-jack in back, a HP out and a SPDIF out
  5stack        5-jack in back, 2-jack in front
  5stack-digout 5-jack in back, 2-jack in front, a SPDIF out
  6stack        6-jack in back, 2-jack in front
  6stack-digout 6-jack with a SPDIF out
  w810          3-jack
  z71v          3-jack (HP shared SPDIF)
  asus          3-jack (ASUS Mobo)
  asus-w1v      ASUS W1V
  asus-dig      ASUS with SPDIF out
  asus-dig2     ASUS with SPDIF out (using GPIO2)
  uniwill       3-jack
  fujitsu       Fujitsu Laptops (Pi1536)
  F1734         2-jack
  lg            LG laptop (m1 express dual)
  lg-lw         LG LW20/LW25 laptop
  tcl           TCL S700
  clevo         Clevo laptops (m520G, m665n)
  test          for testing/debugging purpose, almost all controls can be
                adjusted.  Appearing only when compiled with
                $CONFIG_SND_DEBUG=y
  auto          auto-config reading BIOS (default)

您需要确定您的硬件有多少个插孔(看一看)以查看是否适用尝试 3 堆栈、5 堆栈、6 堆栈或 S/PDIF 输出接口...然后您可能能够缩小尝试的选项范围,以更快地找到最佳设置。

通过将“model= ......”添加到相关的配置条目(如上所述)来尝试每个型号选项。不要忘记在每次尝试后重启 alsasound。

警告!不要将“sound”(或任何其他内容的备份文件)放在 /etc/modprobe.d/ 中,因为这些文件也会被读取和加载!将您的备份放在其他地方。


PulseAudio

从 openSUSE-11.0 开始,PulseAudio 在 openSUSE 中被引入。有关如何处理一些 Pulse Audio 问题的指导,请参阅

从 openSUSE 11.4 开始,KDE 默认安装并激活了 PulseAudio。Gnome 甚至更早之前就安装了 PulseAudio。在这种情况下,KDE 用户安装 PulseAudio Volume Control (pavucontrol) 应用程序并使用该应用程序为每个多媒体应用程序调整音频会很有用。Gnome 用户可能会发现 pauvcontrol 默认已安装。LXDE 用户会发现他们首先需要安装 PulseAudio(因为 PulseAudio 在 openSUSE 12.1 及更早版本中未自动安装在 LXDE 中),然后安装 pavucontrol。

要安装 pavucontrol(如果尚未安装),请键入

su -

然后提示输入 root 密码,然后键入

# zypper in pavucontrol

安装完成后,键入“exit”或按 CTRL+D 关闭 root 会话。通过键入以下命令启动它

pavucontrol

第一次运行每个应用程序时,请为该应用程序调整 PulseAudio,确保每个应用程序都调整为使用正确的音频设备。安装其他 PulseAudio 实用程序,例如“pasystray”会很有用。


解决卡顿/跳跃声音的一种可能方法

PulseAudio 音频服务器编写为使用基于定时器的音频调度而不是传统的基于中断的方法。这是 Apple CoreAudio 和 Windows Vista 音频子系统所采用的方法,具有许多优点,包括降低功耗、最大限度地减少掉落以及灵活地根据应用程序的需求调整延迟。但是,基于定时器的调度可能会暴露某些 Alsa 驱动程序中的问题。要关闭基于定时器的调度,请替换该行load-module module-hal-detect/etc/pulse/default.pa通过load-module module-hal-detect tsched=0或者,在 udev 代替 hal 的情况下,尝试替换该行load-module module-udev-detect/etc/pulse/default.pa通过(或如果该行不存在则添加)load-module module-udev-detect tsched=0

在其他情况下,pulsaudio 中的卡顿声音可能是由于/etc/pulse/daemon.conf中的采样率设置不正确。尝试更改该行default-sample-rate = 44100/etc/pulse/daemon.conf通过default-sample-rate = 48000并重启 PulseAudio 服务器。


PipeWire

参考 openSUSE:Pipewire




确定声音设备的顺序

随着带有 HDMI 输出的显卡出现,现在许多计算机都有多个声音设备。声音卡顺序可能会影响用户,声音可能会发送到错误的设备。对于大多数用户,PulseAudio 和 PipeWire 都有助于处理此问题,并提供配置工具以根据需要设置所需的 sink(设备输出)和 source(设备输入)。可以在 ALSA 级别通过在 /etc/modprobe.d/ 中创建合适的 .conf 文件来实现手动配置,如下一节所述。

Intel HDA 芯片组

考虑您的 Intel 硬件具有默认音频顺序“HDMI”在前,然后“PCH”(模拟)在后的示例。

为了更改顺序,请打开 /etc/modprobe.d/50-sound.conf 并将其更改为

alias snd-card-1 snd-hda-intel
alias snd-card-0 snd-hda-intel

options snd-hda-intel id=PCH index=0
options snd-hda-intel id=HDMI index=1

对于要使用的“id”,请参阅以下输出

aplay -l

配置麦克风

使用以下命令检查可用的 ALSA 输入设备(包括麦克风)是否存在

arecord -lL
pactl list sources

使用 pavucontrol 确保选择了正确的配置文件(配置选项卡)和适当的端口(输入设备选项卡),未静音,并且设置了所需的电平。

为了防止使用错误的输入设备,请考虑将这些设备明确设置为“关闭”。例如,如果您有外部耳机,则关闭内部麦克风可能会有所帮助。


配置蓝牙耳机

参考 SDB:Bluetooth



配置 USB 耳机

通常,udev 应该动态处理此类设备(归功于 pipewire-modules 规则),然后 PipeWire 会相应地定向音频。

如果不是,请从检查以下输出开始

pactl info
pactrl list sinks
wpctl status

并可能在 openSUSE 论坛寻求帮助。

另外,请检查重启以下服务是否有帮助

systemctl --user restart pipewire pipewire-pulse

配置笔记本电脑的多媒体键

请参阅以下 wiki 指南

确定哪个应用程序正在使用声音设备


有时,当您拥有基本的声音功能,但随后在会话中间出现停止(在重启后恢复)时,可能是因为某个应用程序占用了您的音频设备,并且该应用程序没有共享或释放音频设备。要确定哪个应用程序正在使用您的声音设备,请复制并粘贴以下内容到终端

$ lsof /dev/dsp* /dev/audio* /dev/mixer* /dev/snd/*

如果您在声音工作和不工作时在不同的时间运行上述行,您可以更好地了解输出的含义,并更好地“指责”占用音频设备的违规应用程序。


ALSA 驱动程序文档

您可以通过安装 rpm “alsa-docs” 并将其复制到您的 Web 浏览器中来了解 alsa 的技术方面file:///usr/share/doc/packages/alsa-docs/index.html


一些魔法

从命令行测试您的声音

aplay -vv /usr/share/sounds/alsa/Front_*

测试麦克风

arecord -d 10 myrecording.wav

aplay -vv myrecording.wav

检查录音。


外部链接