SDB:音频故障排除

(重定向自 )
跳转到:导航搜索


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

通用

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

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


固件

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

sudo journalctl -b | grep firmware

ALSA 概述

ALSA(高级 Linux 声音架构)由内核声音设备驱动程序组成,这些驱动程序需要支持各种音频硬件设备。它还包括低级用户空间库(为应用程序开发人员提供统一的应用程序编程接口)和用户实用程序。通常不需要手动安装和配置,因为 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 版本进行了许多更改。在这种情况下,应该考虑更新到较新版本的 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

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

请查看上述 URL。它提供了一个带有确切命令示例的链接,适用于各种 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 来自定义编译 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编译并安装完成,重启电脑以加载声卡模块,然后再次按照本页面的所有先前步骤操作,以查看是否可以在新的alsa下使声音正常工作。请注意,可能仍然没有声音,并且您可能希望根据alsa页面的建议修改您的/etc/modprobe.d/sound文件,或者您可能希望尝试编辑您的/etc/modprobe.d/sound文件(通过添加型号规范),如下所示。


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

要显式指定您的声卡型号,请首先确定要应用的型号规范。您的电脑上有一个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”,这些型号仍然可能适用于您的音频,您仍然应该迭代地尝试这些型号。

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

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(因为截至openSUSE 12.1及更早版本,PulseAudio未自动安装在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(设备输入)。可以在/etc/modprobe.d/中创建合适的.conf文件,在ALSA级别手动配置,如下一节所述。

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

检查录音。


外部链接