【已解决】Linux Ubuntu 蓝牙耳机单侧无声+音量偏小问题 | PulseAudio替换PipeWire方案 问题背景最近在 Ubuntu 20.04 系统上使用 iQOO TWS 2 蓝牙耳机时遇到了一个非常奇怪的问题右耳完全无声- 系统播放音频时只有左耳有声音右耳完全没有声音音量异常偏小- 即使系统音量设置为 40%实际听到的声音也非常小远达不到预期的音量水平耳机本身正常- 将同一副耳机连接到手机或其他设备上左右耳声音正常音量也正常经过一番排查最终发现是PulseAudio 音频服务器对蓝牙 TWS 耳机的支持存在缺陷通过替换为 PipeWire成功解决了问题。 问题排查过程1. 确认系统环境# 查看系统版本lsb_release-a# 输出Ubuntu 20.04.6 LTS (Focal Fossa)# 查看内核版本uname-r# 输出5.15.0-139-generic# 查看 PulseAudio 版本pulseaudio--version# 输出pulseaudio 13.99.1# 查看蓝牙版本bluetoothctl--version# 输出bluetoothctl: 5.53设备信息汇总耳机iQOO TWS 2系统Ubuntu 20.04.6 LTS (Focal Fossa)内核5.15.0-139-generic蓝牙地址68:62:8A:AB:BB:7A2. 检查蓝牙连接状态首先确认耳机是否正确连接# 列出所有已配对的蓝牙设备bluetoothctl devices# 查看 iQOO TWS 2 的详细信息bluetoothctl info68:62:8A:AB:BB:7A输出结果Device 68:62:8A:AB:BB:7A (public) Name: iQOO TWS 2 Alias: iQOO TWS 2 Paired: yes Trusted: yes Blocked: no Connected: yes ...✅连接状态正常- 设备已配对、已连接、已信任。3. 检查音频输出设备# 列出所有音频输出设备pactl list sinks short输出结果0 alsa_output.pci-0000_00_1f.3.analog-stereo module-alsa-card.c s16le 2ch 48000Hz SUSPENDED 1 bluez_sink.68_62_8A_AB_BB_7A.a2dp_sink module-bluez5-device.c s16le 2ch 44100Hz SUSPENDED✅设备识别正常- 蓝牙耳机被识别为 A2DP 立体声 sink。4. 检查音频配置详情# 查看蓝牙耳机的详细音频配置pactl list sinks|grep-A20bluez_sink.68_62_8A_AB_BB_7A输出结果名称bluez_sink.68_62_8A_AB_BB_7A.a2dp_sink 描述iQOO TWS 2 驱动程序module-bluez5-device.c 采样规格s16le 2ch 44100Hz 声道映射front-left,front-right 静音否 音量front-left: 65536 / 100% / 0.00 dB, front-right: 65536 / 100% / 0.00 dB 平衡 0.00 基础音量65536 / 100% / 0.00 dB⚠️奇怪的现象左右声道音量均为 100%平衡居中系统显示一切正常但实际听感却是右耳无声、音量偏小5. 发现关键问题 - 蓝牙卡重复实例# 查看所有音频卡的活动配置文件pacmd list-cards|grep-Ename:|active profile|grep-A1bluez输出结果name: bluez_card.68_62_8A_AB_BB_7A active profile: off name: bluez_card.68_62_8A_AB_BB_7A.2 active profile: a2dp_sink发现问题系统创建了两个蓝牙卡实例第一个处于off状态第二个才是实际使用的a2dp_sink这是PulseAudio 的已知 bug会导致音频流路由异常从而引发单侧无声问题。6. 检查系统日志# 查看蓝牙服务日志journalctl-ubluetooth-n20--no-pager日志中出现以下警告bluetoothd[992]: Unable to register device interface for 00:00:00:00:00:00 bluetoothd[992]: Unable to create object for found device 00:00:00:00:00:00这些错误表明蓝牙设备注册过程中出现了问题。 根本原因分析原因一PulseAudio 蓝牙实现缺陷Ubuntu 20.04 使用的 PulseAudio 13.99.1 对蓝牙 TWS 耳机的支持存在以下问题问题说明重复蓝牙卡实例可能创建多个bluez_card实例导致音频流路由异常A2DP 配置文件切换问题旧版 PulseAudio 在切换 A2DP/HFP 配置文件时存在 bug空闲暂停机制module-suspend-on-idle会在空闲时暂停音频流恢复时可能导致单侧无声原因二蓝牙音频栈版本过旧组件当前版本存在的问题PulseAudio13.99.1蓝牙支持不完善存在已知 bugBlueZ5.53缺少对新设备的兼容性修复SPA 蓝牙插件未安装PipeWire 无法处理蓝牙音频原因三编解码器兼容性问题PulseAudio 默认使用 SBC 编解码器而 SBC 在某些设备上可能存在兼容性问题导致音量控制异常。✅ 解决方案替换 PulseAudio 为 PipeWirePipeWire是新一代多媒体处理框架对蓝牙音频的支持远优于 PulseAudio。它提供了更好的蓝牙设备兼容性支持 AAC、LDAC、aptX 等高质量编解码器更稳定的音频流路由步骤 1添加 PipeWire PPAsudoadd-apt-repository-yppa:pipewire-debian/pipewire-upstreamsudoaptupdate步骤 2安装 PipeWire 及相关组件# 安装 PipeWire 核心组件sudoaptinstall-ypipewire pipewire-pulse pipewire-alsa pipewire-bin# 安装蓝牙 SPA 插件关键sudoaptinstall-ylibspa-0.2-bluetooth⚠️重要提示libspa-0.2-bluetooth包含 AAC、LDAC、aptX 等高质量编解码器支持是蓝牙音频工作的必要依赖。步骤 3启用 PipeWire 蓝牙模块编辑 PipeWire 媒体会话配置文件sudonano/usr/share/pipewire/media-session.d/media-session.conf找到以下行并取消注释删除行首的#- #bluez5 # bluetooth support - #bluez5-autoswitch # automatic bluetooth HSP/HFP profile switch bluez5 # bluetooth support bluez5-autoswitch # automatic bluetooth HSP/HFP profile switch步骤 4屏蔽 PulseAudio 自启并停止它直接pulseaudio --kill后 PulseAudio 会自动重生必须屏蔽其 systemd 服务# 屏蔽 PulseAudio 开机自启systemctl--usermask pulseaudio.service pulseaudio.socket# 禁止 PulseAudio 被客户端自动唤醒echoautospawn no~/.config/pulse/client.conf# 停止 PulseAudio屏蔽后不会再重生pulseaudio--kill步骤 5启动 PipeWire# 启动 PipeWire PulseAudio 兼容层systemctl--userstart pipewire-pulse# 重启 PipeWire 核心服务systemctl--userrestart pipewire步骤 6重启蓝牙服务并重新连接设备# 重启蓝牙服务sudosystemctl restart bluetooth# 重新连接耳机bluetoothctl disconnect68:62:8A:AB:BB:7A bluetoothctl connect68:62:8A:AB:BB:7A步骤 7设置蓝牙耳机为默认输出并调整音量# 设置音量为 40%pactl set-sink-volume bluez_output.68_62_8A_AB_BB_7A.a2dp-sink40%# 设为默认输出设备pactl set-default-sink bluez_output.68_62_8A_AB_BB_7A.a2dp-sink 验证解决方案1. 检查音频服务器pactl info|grepServer Name输出服务器名PulseAudio (on PipeWire 1.0.7)✅ 确认已切换到 PipeWire。2. 检查蓝牙设备状态pactl list sinks short输出48 alsa_output.pci-0000_00_1f.3.analog-stereo PipeWire s32le 2ch 48000Hz SUSPENDED 65 bluez_output.68_62_8A_AB_BB_7A.a2dp-sink PipeWire s16le 2ch 48000Hz SUSPENDED✅ 蓝牙设备正常识别且只有一个实例。3. 检查蓝牙编解码器pactl list cards|grep-A50bluez_card.68_62_8A_AB_BB_7A输出关键信息配置文件 a2dp-sink-sbc: High Fidelity Playback (A2DP Sink, codec SBC) a2dp-sink-sbc_xq: High Fidelity Playback (A2DP Sink, codec SBC-XQ) a2dp-sink: High Fidelity Playback (A2DP Sink, codec AAC) ← 自动选择 活动配置a2dp-sink✅ PipeWire 自动选择了更高质量的 AAC 编解码器。4. 音频测试# 测试左声道speaker-test-twav-c2-l1-s1-p40# 测试右声道speaker-test-twav-c2-l1-s2-p40✅测试结果左右耳均有声音音量正常问题完美解决 升级前后对比项目升级前 (PulseAudio)升级后 (PipeWire)音频服务器PulseAudio 13.99.1PipeWire 1.0.7蓝牙音频模块module-bluez5-deviceSPA bluez5 native音频编解码器SBCAAC自动选择蓝牙卡实例2个重复导致异常1个正常右耳声音❌ 无声✅ 正常音量控制❌ 异常偏小✅ 正常 相关配置文件参考PipeWire 蓝牙配置文件路径/usr/share/pipewire/media-session.d/media-session.confmonitor.bluez.properties { default-profile.restore-bluetooth true } monitor.bluez.rules [ { matches [ { device.name ~bluez_card.* } ] actions { update-props { bluez5.auto-connect [ hfp_hf hsp_hs a2dp_sink ] } } } ] session.modules [ default flatpak alsa-seq alsa-monitor v4l2 bluez5 bluez5-autoswitch ]PulseAudio 禁用空闲暂停如需回退到 PulseAudio文件路径~/.config/pulse/default.pa# 注释掉以下行以禁用空闲暂停 #load-module module-suspend-on-idle 总结与建议问题根源Ubuntu 20.04 默认的 PulseAudio 13.99.1 对 TWS 蓝牙耳机的 A2DP 支持存在缺陷导致音频流路由异常右耳无法接收音频信号音量控制异常实际音量远小于设置值解决方案核心将音频服务器从 PulseAudio 替换为 PipeWire 1.0.7并安装libspa-0.2-bluetooth包以支持高质量蓝牙音频编解码器。关键要点PipeWire 的蓝牙支持比 PulseAudio 更成熟- 特别是对 TWS 耳机的兼容性libspa-0.2-bluetooth是必要依赖- 没有它PipeWire 无法处理蓝牙音频需要启用bluez5模块- 在media-session.conf中取消注释相关配置必须 mask PulseAudio 服务- 仅kill不够PulseAudio 会自动重生需用systemctl --user mask彻底屏蔽禁用 autospawn- 设置autospawn no防止 PulseAudio 被客户端唤醒其他建议如果问题仍然存在可以尝试将耳机放入充电仓重置后重新配对建议定期更新系统和蓝牙驱动以获得最佳兼容性对于其他 Linux 发行版如 Arch LinuxPipeWire 通常是默认音频服务器问题会更少 参考资料PipeWire 官方文档PipeWire Debian PPAArch Wiki - Bluetooth headsetPulseAudio 蓝牙故障排除PipeWire GitHub️ CSDN 标签Linux, Ubuntu, 蓝牙耳机, TWS, PulseAudio, PipeWire, 音频驱动, iQOO TWS 2, 单侧无声, 音量偏小, 蓝牙音频, A2DP, 编解码器, AAC, SBC, Linux音频问题问题解决环境Ubuntu 20.04.6 LTS / PipeWire 1.0.7适用范围Linux 系统蓝牙耳机单侧无声或音量异常问题如果这篇文章对你有帮助欢迎点赞收藏如有问题欢迎在评论区留言讨论。问题解决环境Ubuntu 20.04.6 LTS / PipeWire 1.0.7