大家好,我是冯哥的缓存。今天这篇我们来聊一下:遇到没声音、爆音、蓝牙耳机不出声、多设备切换等常见问题,如何排查解决。
💡提示:本文基于 Ubuntu 22.04 / 24.04(默认使用 PipeWire + WirePlumber),大多数步骤在 Debian / Linux Mint 上同样适用。
基准测试环境
项目 | 配置 |
CPU | Intel Core i5-10400 |
内存 | 16GB DDR4 |
声卡 | Realtek ALC1200(内置)+ 蓝牙 5.0 |
系统 | Ubuntu 22.04 LTS |
音频服务器 | PipeWire 0.3.48 + WirePlumber |
💡提示:不同硬件/系统的排查步骤基本一致,只是设备名称(如 pci-0000_00_1f.3)会不同,注意替换成你实际看到的名字。
第一步:确认问题所在层
排查声音问题,首先要确认是哪一层出了问题,不要盲目搜"没声音怎么办"——层不同,解法完全不一样。
#第一步:确认音频服务器
pactl info | grep "Server Name"
#输出PipeWire 说明用的是 PipeWire;输出PulseAudio 说明用的是旧版
#第二步:确认声卡被识别到
aplay -l
#有输出且列出你的声卡 = ALSA层正常
#第三步:直接用ALSA播放测试音(绕过音频服务器)
speaker-test -t sine -f 1000 -c 2
#有声音= 硬件和驱动正常,问题在音频服务器那层
#没声音= 问题在ALSA或更底层(驱动/硬件)
测试结果 | 说明 | 排查方向 |
aplay -l没有声卡 | ALSA未识别声卡 | 驱动缺失 / 硬件问题 |
aplay -l有卡,speaker-test没声 | ALSA层问题 | alsamixer静音 / 错误设备 |
speaker-test有声,应用没声 | 音频服务器层问题 | PipeWire/PulseAudio配置 |
应用有声,特定软件没声 | 应用层问题 | 软件自身设置 |
问题一:完全没声音——逐层排查
1-1 检查 alsamixer 是否静音
这是最常见的问题,没有之一。
alsamixer
打开后用方向键选择声道,注意:
·数字下方显示 00或字母'o' = 正常(已解除静音)
·数字下方显示 MM = 已静音(按 M键解除)
·常见需要检查的通道:Master、Headphone、Speaker、PCM
⚠️注意:很多人PulseAudio/PipeWire 那层音量调满了,但 ALSA 的 Master或 Speaker还是 MM(静音)状态,这是新手最高频的问题。
#也可以用命令直接解除静音
amixer set Master unmute
amixer set Speaker unmute
amixer sset 'Master' 100% unmute
1-2 检查音频输出设备是否选对
#查看所有输出设备
pactl list sinks short
示例输出:
0alsa_output.pci-0000_00_1f.3.analog-stereoPipeWireLocalNodeRUNNING
1bluez_output.AA_BB_CC_DD_EE_FF.1PipeWireLocalNodeSUSPENDED
如果默认输出选到了蓝牙耳机(已断开),声音就没了:
#查看当前默认输出
pactl get-default-sink
#设置默认输出为内置声卡(替换为你的设备名)
pactl set-default-sink alsa_output.pci-0000_00_1f.3.analog-stereo
或者直接用图形工具pavucontrol(更直观):
sudo apt install pavucontrol
pavucontrol
在"输出设备"标签页确认内置声卡没有被设为"静音","播放"标签页里可以看到当前每个应用的输出走向。
1-3 重启音频服务
# PipeWire(Ubuntu 22.04+)
systemctl --user restart pipewire pipewire-pulse wireplumber
# PulseAudio(旧版系统)
pulseaudio -k && pulseaudio --start
1-4 检查驱动加载情况
#查看声卡驱动模块
lspci -v | grep -A 10 "Audio"
#看Kernel driver in use 这行,有值说明驱动已加载
#查看所有已加载的音频模块
lsmod | grep snd
#最常见的驱动:snd_hda_intel(Intel/Realtek HDaudio)
#没有这个模块则需要重新安装
问题二:爆音/杂音/声音卡顿
爆音(Crackling / Popping)是 Linux 上常见的声音问题之一,通常是电源管理导致的。
2-1 Intel HDA 声卡爆音:关闭电源保护
#检查当前电源管理状态
cat/sys/module/snd_hda_intel/parameters/power_save
#输出 1 = 开启了省电模式(可能导致爆音)
#输出 0 = 已禁用(修改成功)
#临时关闭
sudo sh -c 'echo 0 > /sys/module/snd_hda_intel/parameters/power_save'
sudo sh -c 'echo N > /sys/module/snd_hda_intel/parameters/power_save_controller'
#永久关闭(写入配置文件)
sudo nano /etc/modprobe.d/audio_disable_powersave.conf
写入以下内容保存:
options snd_hda_intel power_save=0 power_save_controller=N
#重启后验证
cat/sys/module/snd_hda_intel/parameters/power_save
#应该输出0
2-2 PipeWire 量化/采样率不匹配
如果播放特定格式音频时爆音,可能是采样率转换问题:
#查看PipeWire 当前配置
pw-metadata -n settings
#找clock.rate 和 clock.allowed-rates 这两行
如果应用用 44100Hz,系统配置只允许 48000Hz,就会有转换损耗。编辑配置:
#在家目录创建 PipeWire 用户配置
mkdir -p ~/.config/pipewire
cp /usr/share/pipewire/pipewire.conf ~/.config/pipewire/
#编辑
nano ~/.config/pipewire/pipewire.conf
找到context.properties段,修改:
default.clock.rate = 48000
default.clock.allowed-rates = [ 44100 48000 96000 ]
#重启PipeWire 生效
systemctl --user restart pipewire pipewire-pulse wireplumber
2-3 USB 声卡/DAC 爆音
#编辑USB 音频模块配置
sudo nano /etc/modprobe.d/usb_audio_fix.conf
添加:
options snd_usb_audio nrpacks=1
问题三:蓝牙耳机没声音或音质差
蓝牙音频在 Linux 上历来是个难题,PipeWire 对比 PulseAudio 已大幅改善。
3-1 确认蓝牙音频依赖包
# Ubuntu 22.04+ 基本包
sudo apt install pipewire-audio pulseaudio-utils bluez pipewire-pulse
#如果还是不行,装完整蓝牙套件
sudo apt install bluez bluez-tools libspa-0.2-bluetooth#Ubuntu 22.04版
sudo apt install bluez bluez-tools libspa-bluetooth#Ubuntu 24.04版
装完后重启音频服务:
systemctl --user restart pipewire pipewire-pulse wireplumber
3-2 蓝牙耳机连上了但没声音
#查看连接状态
pactl list cards | grep -A 20 "bluez"
#找Active Profile 这行
#手动切换到音频模式(a2dp-sink = 高质量音频输出)
pactl set-card-profile bluez_card.AA_BB_CC_DD_EE_FF a2dp-sink
#这个MAC 地址可以通过 pactl list cards \| grep bluez 看到,复制 bluez_card. 后面的部分。
#如果上面报错,用以下命令查看可用的 Profile
pactl list cards | grep "Profile:"
蓝牙音频 Profile | 说明 |
a2dp-sink | 高质量立体声(推荐听音乐用) |
headset-head-unit (HFP/HSP) | 通话模式,质量差但支持麦克风 |
off | 已断开 |
⚠️注意:同时使用蓝牙耳机的麦克风和扬声器(通话模式)时,系统会自动切到 HFP 模式,音质会变成电话音质(8kHz 或 16kHz)。这是蓝牙协议限制,不是 Linux 的 Bug。
3-3 蓝牙音频有延迟/断断续续
#查看PipeWire 蓝牙量子大小(延迟相关)
pw-metadata -n settings | grep quantum
#降低量子大小可以降低延迟(但会增加 CPU 占用)
pw-metadata -n settings 0 clock.force-quantum 256
也可以用图形工具EasyEffects或Helvum(PipeWire 专用音频路由工具)管理蓝牙音频:
sudo apt install helvum# 图形化管线可视化
3-4 蓝牙耳机每次重连要手动切换Profile
编辑 WirePlumber 配置,让系统记住上次的 Profile:
mkdir -p ~/.config/wireplumber/bluetooth.lua.d
cp/usr/share/wireplumber/bluetooth.lua.d/50-bluez-config.lua ~/.config/wireplumber/bluetooth.lua.d/
nano ~/.config/wireplumber/bluetooth.lua.d/50-bluez-config.lua
找到["bluez5.auto-connect"]那行,改为:
["bluez5.auto-connect"] = "[ hfp_hf hsp_hs a2dp_sink ]"
问题四:多声音设备切换
4-1 通过 pavucontrol 切换(推荐)
sudo apt install pavucontrol && pavucontrol
标签页 | 用途 |
播放(Playback) | 为每个正在播放的应用单独选择输出设备 |
录音(Recording) | 为每个录音程序单独选择麦克风 |
输出设备(Output Devices) | 管理所有输出设备,设置默认 |
输入设备(Input Devices) | 管理所有输入设备(麦克风) |
配置(Configuration) | 切换每块声卡的 Profile(立体声/环绕声等) |
4-2 通过命令行切换默认输出
#查看所有输出设备
pactl list sinks short
#设置默认输出
pactl set-default-sink <设备名>
#把所有正在播放的流也切换过去
pactl list sink-inputs short | awk '{print $1}' | xargs -I{} pactl move-sink-input {} <设备名>
4-3 快捷键自动切换(进阶)
可以写一个小脚本绑定快捷键,在内置音频和蓝牙之间一键切换:
#创建切换脚本
nano ~/bin/switch_audio.sh
写入内容:
#!/bin/bash
CURRENT=$(pactl get-default-sink)
BT="bluez_output.AA_BB_CC_DD_EE_FF.1"# 换成你的蓝牙设备名
BUILTIN="alsa_output.pci-0000_00_1f.3.analog-stereo"# 换成你的内置声卡名
if [ "$CURRENT" = "$BT" ]; then
pactl set-default-sink "$BUILTIN"
notify-send "音频切换""已切换到内置扬声器"
else
pactl set-default-sink "$BT"
notify-send "音频切换""已切换到蓝牙耳机"
fi
chmod +x ~/bin/switch_audio.sh
然后在桌面环境设置里把这个脚本绑定到一个快捷键。
问题五:麦克风没声音
#查看录音设备
arecord -l
#用alsamixer 检查麦克风是否静音
alsamixer
#按 F4切换到"录音"模式,检查 Capture 通道是否为 MM
#测试麦克风录音(录5秒然后播放)
arecord -d 5 /tmp/test.wav && aplay /tmp/test.wav
#用pavucontrol 检查录音源
#打开后切到"输入设备"标签页,观察是否有音量条在动
报错 / 现象 | 解决方法 |
麦克风没电平 | alsamixer → F4 → Capture 解除 MM 静音 |
可以录音但很小声 | alsamixer 里 Mic Boost调高 |
视频通话对方没声音 | pavucontrol → 录音 → 把该应用的麦克风源选正确 |
HDMI 声卡把麦克风抢走了 | pavucontrol → 输入设备 → 把不需要的设备静音 |
常见报错速查
报错 / 现象 | 原因 | 解决方法 |
aplay -l无输出 | 声卡未被识别 | lspci -v确认驱动,modprobe snd_hda_intel手动加载 |
Cannot open audio device | 设备被占用 | fuser /dev/snd/*查看是哪个进程,kill掉再试 |
Firefox/Chrome 没声 | 浏览器沙箱问题(snap版常见) | 改装 deb 版,或 snap connect firefox:audio-record(少数版本需要加 sudo) |
耳机插上没切换 | 插孔检测延迟 | alsamixer → Auto-Mute Mode设为 Enabled |
声音只在一个声道(单声道) | 硬件连接或配置问题 | alsamixer检查左右声道是否都解除静音 |
系统升级后没声音 | PipeWire/内核版本不兼容 | sudo apt install --reinstall pipewire pipewire-pulse wireplumber |
蓝牙连接后质量极差 | Profile 切到了 HFP 通话模式 | pactl set-card-profile bluez_card.XX a2dp-sink |
游戏/Wine 里没声音 | Wine 音频配置问题 | winecfg → Audio → 选择 PulseAudio 驱动 |
声音问题排查流程表
步骤 | 操作 | 正常结果 |
1 | aplay -l | 有声卡列表 |
2 | alsamixer检查 MM 静音 | 所有通道显示 00 |
3 | speaker-test -t sine -f 1000 -c 2 | 听到白噪声/提示音 |
4 | pactl list sinks short | 有设备,且是你想用的那个 |
5 | pavucontrol查看应用输出 | 应用输出路由到正确设备 |
6 | 重启音频服务 | 问题消失 |
小结
问题类型 | 最先检查 | 推荐工具 |
完全没声音 | alsamixer MM 静音 | alsamixer + pavucontrol |
爆音/卡顿 | Intel HDA 电源管理 | 修改 /etc/modprobe.d/ |
蓝牙没声 | libspa-0.2-bluetooth 缺失 | apt install + pactl set-card-profile |
多设备切换 | pavucontrol "播放"标签 | pavucontrol |
麦克风没声 | alsamixer F4 Capture MM | alsamixer + arecord测试 |
💡提示:音频问题绝大多数都可以用 alsamixer + pavucontrol两个工具解决。如果折腾很久还解决不了,可以考虑换一个外置 USB 声卡,30元以内的基础款就能解决 95% 的声音问题。
下篇预告:《Linux NTFS与exFAT硬盘挂载——Windows硬盘读写攻略》。