Linux 麦克风无法工作:如何测试和修复
Microphone-Test.org ·

在 Linux 上,麦克风无法工作的情况,更多是因被静音而非硬件故障所致。在许多发行版中,ALSA 捕获通道默认处于禁用状态,因此麦克风本身正常工作,驱动程序却没有传输任何信号。其余情况大多可归因于默认音源设置错误,或是应用程序被限制在沙盒环境中。信号会经过多层处理:先是内核驱动程序 ALSA,接着是 PipeWire 或 PulseAudio,最后到达应用程序本身。任何一层都可能丢失信号,结果总是相同的——静默。正确的修复方法完全取决于阻塞发生在哪一层。本指南将帮助您定位该层,并通过图形界面和终端操作两种方式进行修复。首先进行快速麦克风测试或使用桌面输入电平表来确认硬件是否正常。然后查明您的发行版运行的是 PipeWire 还是 PulseAudio,因为下方的命令会根据这一答案分支。
Linux 麦克风无法工作:快速修复检查清单
| ✓ | 使用我们的麦克风测试或桌面声音输入电平表进行测试。 |
| ✓ | 在 alsamixer 中取消 Capture 通道的静音,并提高其音量。 |
| ✓ | 在 pavucontrol(或在 PipeWire 上使用 wpctl)中设置正确的输入源。 |
| ✓ | 确认您的用户已加入 audio 组。 |
| ✓ | 重新启动音频服务:systemctl --user restart pipewire pipewire-pulse 或 pulseaudio -k。 |
一分钟内测试您的 Linux 麦克风
在更改任何设置之前,请先确认麦克风能否拾取声音。“无信号”问题的解决方法,与“有信号但无人能听到我”的解决方法完全不同。实时输入电平表能给出最快、最真实的答案,因为它会实时响应您的声音。先录音、再回放的方式可能掩盖设备选择错误,因此请先使用电平表进行检测。打开我们的在线麦克风测试,并在浏览器提示时允许访问。现在请正常说话。如果电平指示器随您说话而波动,说明麦克风、驱动程序和音频服务器均工作正常,问题便出在更上游,可能是路由设置,也可能是某个特定应用程序。如果电平表保持静止不动,则说明信号被阻塞,或是选错了输入源。
您的桌面环境也能原生访问麦克风。在 GNOME 上,打开 设置 › 声音 › 输入并选择您的设备;说话时,输入电平条应随之波动。在 KDE Plasma 上,打开 系统设置 › 音频,并观察录音设备旁边的电平表。假设此处的电平条有波动,但某个应用程序仍无法拾取声音,这就说明故障是应用程序特有的,而非系统性的,因此请跳至下文的路由和权限部分。下表列出了桌面系统中显示麦克风状态的各个图形界面位置,以及每处读数所确认的信息。
| 查看位置 | 路径 | 确认内容 |
| GNOME 输入电平表 | 设置 › 声音 › 输入 | 系统是否接收信号,以及信号来自哪个设备 |
| KDE 音频面板 | 系统设置 › 音频 | 当前活动的录音设备及其针对各应用程序的路由设置 |
| 音量控制 | pavucontrol › 输入设备 | 静音状态、增益和所选硬件端口 |
| 录音选项卡 | pavucontrol › 录音 | 哪个应用程序从哪个设备进行实时捕获 |
在排查故障前,请先了解您的音频服务器
Linux 音频是分层的,正确的修复方法取决于哪一层出现了故障。最底层是 ALSA,这是一个与声卡通信的内核级驱动程序。在其之上运行着一个音频服务器,负责混合音频流并在应用程序之间进行路由。目前主要有两种服务器。现代发行版均搭载 PipeWire。Fedora 最先采用该服务器,Ubuntu 则自 22.10 版本起将其设为默认。PipeWire 运行着一个名为 pipewire-pulse 的兼容层,因此旧版工具仍可照常使用。较早的发行版和部分保守配置,仍在运行 PulseAudio。这两款服务器都建立在 ALSA 之上;ALSA 中若有通道被静音,无论使用哪一款服务器都会因此静音。
请先确认自己使用的音频服务器,以免在错误的工具上白费时间。在终端中运行 wpctl status。如果清晰列出了 sinks 与 sources,则说明 PipeWire 正在运行。如果没有该命令,您使用的很可能是 PulseAudio,可通过 pactl info 进行确认。这一点很重要,因为两者的命令有所不同。PipeWire 由 wpctl 驱动,而 PulseAudio 则使用 pactl。图形化工具 pavucontrol 同时支持这两种方式,因为 pipewire-pulse 处理相同的调用。下表总结了核心工具及其各自的功能。
| 工具 | 类型 | 功能 |
| pavucontrol | 图形化 | 取消输入静音、设置增益、选择端口,并显示各应用的录音路由 |
| alsamixer | 终端(TUI) | 直接控制 ALSA 声卡:捕获静音、捕获启用及硬件增益 |
| arecord / aplay | 终端 | 列出捕获设备,并通过 ALSA 直接录制或播放文件 |
| wpctl | 终端 | 列出 PipeWire 设备,设置默认音源,并将其静音或取消静音 |
为什么正常工作的麦克风,在 Linux 上仍会静音
被静音的 ALSA 捕获通道是首要原因
ALSA 独立控制每个采集通道,其中某一个通道可能被单独静音。一旦发生这种情况,无论您将软件音量调多高,桌面电平表都会显示为零。这一情况导致的“故障”Linux 麦克风,比任何硬件故障都要多。其陷阱在于,从图形化混音器中往往无法察觉这一问题。解决方法在于使用 alsamixer——这是一个可直接访问声卡原始设置的终端混音器。启动该程序后,按 F6 选择您的声卡,按 F4 切换至采集视图,使用方向键选中 Capture 通道。如果条形图下方显示 MM,则表示该通道已被静音;按 M 键即可取消静音。捕获通道还必须处于就绪状态。在选中的项目上按 Space 键,直到显示为红色的 CAPTURE,然后用向上箭头键提高电平。许多笔记本电脑还会在此处提供 Internal Mic Boost 控制项,出厂时默认设置为零。提高该值可让看似失效的麦克风恢复正常。
错误的默认音源和路由故障
声音服务器会选择一个默认音源,但它并不总是选择您想要的那个。插入 USB 耳机、带内置麦克风的网络摄像头或 HDMI 采集设备后,服务器可能会立即将其设为默认音源。路由错误也可能隐藏在各个应用程序中。PipeWire 和 PulseAudio 允许每个程序从不同的设备进行录制,且每个流均可单独设置。因此,当系统默认设置正常工作时,某个应用程序可能会被指向一个没有任何输出的音源。pavucontrol 中的录音选项卡会直接显示这一情况,列出当前正在捕获的每个应用程序及其使用的设备。每当麦克风在某个程序中能正常工作而在另一个程序中却无法工作时,首先应怀疑是路由问题。蓝牙耳机则增加了另一层复杂性。采用高品质 A2DP 配置文件的耳机根本不带麦克风。系统必须将其切换到 HSP/HFP 配置文件后,麦克风才会出现,而此时音质也会随之下降。
权限、用户组和沙盒应用
访问控制会以不显示任何错误消息的方式阻止麦克风访问。过去,用户必须属于 audio 组才能访问音频设备。大多数现代桌面系统通过会话来处理此问题,但精简版或服务器版安装可能仍需该组权限。沙盒化则是一个更新、影响也更广泛的问题。以 Flatpak 或 Snap 形式打包的应用程序会在隔离层内运行,即使系统其他部分正常工作,该隔离层仍可能拒绝麦克风访问权限。此时应用程序只会收到静音,不会出现任何错误提示。您可以通过 Flatseal(Flatpak 门户的图形化编辑器)或终端命令 flatpak permissions 来检查并授予这些权限。浏览器会在其上添加一个独立的层。无论系统状态如何,网站都必须在浏览器内被允许访问。我们的 Firefox 和 Chrome 指南详细介绍了该浏览器内提示。
按最常见原因从上到下排查并修复
请按顺序尝试这些解决方案,不要直接跳到激进的措施。此顺序经过深思熟虑,旨在优先解决大多数情况,同时将干扰降至最低。静音和路由问题合计导致了大多数 Linux 麦克风故障。只有在此之后,才应升级到重启音频服务器。每次更改后,请返回麦克风测试或桌面输入电平表,重新检查是否有信号,这样您就能始终清楚是哪一步起了作用。
使用 pavucontrol 取消静音并设置路由
请先安装并打开 pavucontrol,因为它能通过图形化界面解决最常见的故障。转到 输入设备 选项卡,找到您的麦克风,并确认其电平条旁边的静音按钮未被启用;如果输入音量过低,请调高音量。检查 端口 下拉菜单,因为笔记本电脑通常会将内置麦克风和耳机插孔归为一个设备。现在,在应用程序运行时打开 录音 选项卡。列表中的每个应用程序右侧都有一个设备选择器,请将顽固的应用程序明确指向正确的麦克风。仅需进行这一项重新分配,就能解决许多“其他地方都能用,唯独这里不行”的问题反馈。视频会议应用程序通常也有自己的设备选择器,因此请在应用程序内部也设置好对应设备。我们针对 Zoom 和 Discord 的指南会分步介绍这些设置面板。
在 alsamixer 中启用捕获功能,然后通过终端进行测试
当图形化混音器显示为平线时,切换至 alsamixer。按照上述步骤取消静音并启用捕获:F6 用于选择声卡,F4 用于切换到采集视图,然后在 Capture 通道上依次按下 M 和 Space。通道就绪后,直接通过 ALSA 验证硬件路径。运行 arecord -l 可列出内核识别的所有捕获设备。如果此处未显示您的麦克风,则故障源于驱动程序或连接问题,而非设置问题。如果显示了,请录制一段简短音频,并使用 arecord -d 5 test.wav && aplay test.wav 进行回放。若能听到自己的声音,则说明 ALSA 路径正常工作,这将故障范围缩小到服务器或应用程序。在 PipeWire 上,执行 wpctl status 读取源 ID,然后执行 wpctl set-default <id> 和 wpctl set-mute <id> 0。
当电平表持续卡住不动时,重启音频服务器
假设通道已取消静音,且选择了正确的音源,但电平表仍无变化,这可能是音频服务器卡死所致。这是在系统休眠后、热插拔 USB 接口后,或驱动程序更新后可能出现的已知状态。重启服务器可强制重建整个音频图,而无需重启系统。在 PipeWire 上,运行 systemctl --user restart pipewire pipewire-pulse wireplumber。在 PulseAudio 上,运行 pulseaudio -k,守护进程将自动重新启动,此过程会导致音频短暂中断。请将此操作视为冻结堆栈的重置按钮,而非常规步骤。下表将常见症状与其通常原因及最快的解决方法进行了对应。
| 症状 | 可能原因 | 解决方法 |
| 桌面电平表显示平线,所有设备 | ALSA 中捕获通道被静音 | 在 alsamixer 中取消静音并启用 Capture 通道(按 M 键,然后按 Space) |
| 在某个应用中正常工作,但在另一个应用中不正常 | 按应用路由至错误音源 | 在 pavucontrol › 录音中重新分配设备 |
| 插入耳机后麦克风失效 | 默认音源已转移至新设备 | 通过 wpctl set-default 或 pavucontrol 设置音源 |
| 蓝牙耳机麦克风缺失 | 设备处于 A2DP 配置文件中 | 在 pavucontrol 配置文件列表中将其切换至 HSP/HFP |
| 仅有一个应用听到静音 | Flatpak 或 Snap 的沙盒机制阻断了麦克风 | 在 Flatseal 中或通过 flatpak permissions 授予访问权限 |
| 信号仅在每次重启后恢复 | 休眠后声音服务器卡死 | 重启 pipewire 和 wireplumber,或运行 pulseaudio -k |
确保 Linux 麦克风稳定工作
养成以下习惯可确保麦克风恢复后正常工作:保持系统更新,因为 PipeWire 和 WirePlumber 会频繁发布路由和蓝牙修复程序。将您想要的麦克风固定为默认音源,以免新连接的耳机悄无声息地占用该插槽。请不时检查您的 Flatpak 权限,并仅向需要麦克风访问权限的应用程序授予该权限。当麦克风必须在浏览器、桌面应用程序和终端中均能正常工作时,请在每个环境中分别进行测试。即使使用 arecord 录音效果完美,仍可能在更高一层——沙盒或浏览器标签页中——被阻挡。不同发行版和桌面环境的行为也各不相同,因此 Fedora 中的修复方案,在 Ubuntu 中可能位于另一个菜单下。如果您在不同设备之间切换,我们的 Chromebook 指南介绍了在 ChromeOS 上进行相同检查的方法。
常见问题
如何判断我的系统使用的是 PipeWire 还是 PulseAudio?
在终端中运行 wpctl status。如果显示了 sinks 与 sources 的列表,则说明 PipeWire 正在运行。如果该命令不存在,请运行 pactl info 并查看 Server Name 一行。Fedora 和 Ubuntu 22.10 及更高版本默认使用 PipeWire;较旧版本则使用 PulseAudio。
我的麦克风使用 arecord 可以正常录音,但在应用程序中却无法使用,这是为什么?
arecord 能正常录音,说明 ALSA 的硬件路径没有问题,问题出在声音服务器或应用程序上。请打开 pavucontrol 中的 录音 选项卡,并将应用程序指向正确的音源。如果该应用程序是 Flatpak,请在 Flatseal 中检查其麦克风权限。
为什么我的蓝牙耳机麦克风没有显示?
高质量的 A2DP 模式不支持麦克风。耳机必须切换到 HSP 或 HFP 配置文件,其麦克风才能使用。打开 pavucontrol,在配置或配置文件列表中找到该设备,并选择耳机的配置文件。请注意,切换后音质会下降。
如何在终端中取消麦克风静音?
在 ALSA 上,打开 alsamixer,在捕获视图中按 F4,选择 Capture,然后按 M 键取消静音。在 PipeWire 上,使用 wpctl status 查找源 ID,然后运行 wpctl set-mute <id> 0。ALSA 捕获通道被静音,是输入无声音的最常见原因。
如何在不重启的情况下重启 Linux 音频?
在 PipeWire 上,运行 systemctl --user restart pipewire pipewire-pulse wireplumber。在 PulseAudio 上,运行 pulseaudio -k,守护进程会自动重启。在服务器重建其图结构期间,音频会中断一秒钟。请仅在取消静音和路由检查均失败后使用此方法。
测试您的麦克风
测试您的麦克风 →