当前位置:首页>Linux>Linux声音问题攻略(上)——PulseAudio/PipeWire怎么回事

Linux声音问题攻略(上)——PulseAudio/PipeWire怎么回事

  • 2026-10-11 06:01:06
Linux声音问题攻略(上)——PulseAudio/PipeWire怎么回事

大家好,我是冯哥的缓存。声音问题是 Linux 新手最常遇到的麻烦之一——装完系统没声音,或者声音奇奇怪怪。

这篇先聊一下Linux 的声音是怎么工作的、PulseAudio 和 PipeWire 有什么区别、为什么一套系统里有这么多层。搞懂这些,排查问题才不会无从下手。

💡提示:如果你只想快速解决"没声音"的问题,可以等下一篇,下一篇我们会聊到具体故障排查和修复。这篇更偏基础概念。

Linux 音频系统的"三层结构"

Windows 的音频系统对用户来说基本是个黑盒:驱动装好,声音就有了。Linux 的音频系统则是层层叠叠,每一层有不同的职责。

层级

名称

作用

典型软件

第一层

内核音频驱动(ALSA)

直接和声卡硬件通信,最底层

Linux 内核自带

第二层

音频服务器

管理多个应用同时播放,提供混音、音量控制

PulseAudio、PipeWire

第三层

应用程序

Firefox、VLC、Spotify 等

各种软件

打个比方:

ALSA = 声卡的"驱动程序",只负责让内核认识硬件

PulseAudio/PipeWire = "调音台",负责把多路音频混合后送给声卡

应用程序 = 演奏音乐的乐手,只管把声音发出去 -WirePlumber 作为 PipeWire 的会话管理器,实际上可以看作是介于“音频服务器(第二层)”和“应用程序(第三层)”之间的一层,负责策略路由和设备管理,让整个架构图更完整。

⚠️注意: ALSA 本身也能直接播放声音,但只能一个程序独占声卡。有了 PulseAudio/PipeWire 这层,多个程序才能同时发声。

ALSA 是什么?为什么还要了解它?

ALSA(Advanced Linux Sound Architecture)是 Linux 内核内置的音频子系统,自 2.6 内核起就是标配。

项目

说明

全称

Advanced   Linux Sound Architecture

层级

内核级,最底层

直接操作

aplay(播放)、arecord(录音)、alsamixer(音量调节)

配置文件

/etc/asound.conf、~/.asoundrc

典型问题

软件音量静音了,但   ALSA 硬件音量也被拉到0

你需要了解 ALSA 的原因:

即使 PulseAudio/PipeWire 负责日常音频管理,它们底层也是调用 ALSA 和声卡通信的。当出现"音量条拉满但没声音"的情况,通常是 ALSA 那层的静音开关被打开了,用alsamixer才能看到。

#打开ALSA 图形音量控制界面

alsamixer

#快捷键说明:

# F6 → 选择声卡

# M→ 静音/取消静音(底部显示"MM"表示静音)

# ↑↓ → 调节音量

# q→ 退出

💡提示:在 alsamixer里,声道底部显示 MM = 静音,显示 00 = 未静音。新手最常见的坑:PulseAudio音量正常,但 ALSA 里 Master或 Speaker通道被静音了。

PulseAudio:老一代音频服务器

PulseAudio 是 Linux 桌面使用了十多年的主流音频服务器,Ubuntu 20.04 及之前版本默认使用它。

项目

说明

出现时间

2004年(2.6内核时代)

主要功能

多应用混音、音量独立控制、网络音频、蓝牙音频

配置文件

/etc/pulse/default.pa、~/.config/pulse/

图形工具

pavucontrol(PulseAudio   Volume Control,强烈推荐安装)

命令行工具

pactl、pacmd

当前状态

仍在维护,但逐渐被   PipeWire 取代

PulseAudio 核心概念:

概念

含义

类比

Sink

音频输出目标(扬声器、耳机)

调音台的输出通道

Source

音频输入来源(麦克风)

调音台的输入通道

Sink   Input

某个应用的音频输出流

某个乐手接入调音台的信号

Source   Output

某个应用的音频输入流

某个录音设备采集的信号

#查看所有音频输出设备(Sink)

pactl list short sinks

#查看所有音频输入设备(Source)

pactl list short sources

#查看PulseAudio 运行状态

systemctl --user status pulseaudio

#重启PulseAudio(不用 sudo)

pulseaudio --kill && pulseaudio --start

pavucontrol是什么?

pavucontrol(PulseAudio Volume Control)是 PulseAudio 的图形音量控制面板,比系统自带的音量条强大得多:

功能

说明

播放(Playback)

查看每个应用的音量,可以单独静音某个应用

录音(Recording)

查看哪个应用在录音,麦克风分配

输出设备(Output   Devices)

查看所有输出设备,切换默认输出

输入设备(Input   Devices)

查看所有麦克风,切换默认输入

配置(Configuration)

设置声卡配置文件(立体声/5.1/HDMI等)

#安装pavucontrol

sudo apt install pavucontrol

#打开

pavucontrol

💡提示:遇到声音问题,第一步先开 pavucontrol看看,很多问题一眼就能看出来(比如应用被单独静音了,或者输出设备选错了)。

PipeWire:新一代音频服务器

PipeWire 是 Linux 音频系统的"下一代",Ubuntu 22.04 起默认使用,也是目前 Fedora、Arch 等发行版的标配。

项目

说明

出现时间

2017年(Wim Taymans,Red Hat开发)

设计目标

同时接管音频和视频,统一   PulseAudio 和 JACK 的功能

兼容性

内置 PulseAudio  兼容层(pipewire-pulse),原有命令和工具仍可用

当前状态

主流发行版已全面切换

PipeWire 解决了什么问题?

旧问题(PulseAudio时代)

PipeWire   的改进

专业音频(JACK)和桌面音频(PulseAudio)两套系统打架

统一接管,不再冲突

蓝牙音频延迟大、断连

重写蓝牙音频栈,延迟更低

视频捕获(屏幕录制/摄像头)权限管理混乱

统一视频管道,配合   Flatpak 沙箱

低延迟音频(游戏/DAW)配置复杂

默认支持低延迟场景

PipeWire 架构表

组件

作用

pipewire

核心服务,音视频管道

pipewire-pulse

PulseAudio  兼容层(让 PulseAudio 应用无缝使用)

wireplumber

会话管理器(管理设备、路由规则)

pipewire-alsa

ALSA 兼容层

pipewire-jack

JACK 兼容层(专业音频)

#查看PipeWire 运行状态

systemctl --user status pipewire

systemctl --user status pipewire-pulse

systemctl --user status wireplumber

#重启音频服务时,推荐使用

systemctl --user restart wireplumber

#查看PipeWire 版本

pipewire --version

#列出所有音频设备(PipeWire 原生命令)

pw-dump | grep -A5 '"media.class": "Audio'

#图形工具:qpwgraph(PipeWire 图形连接管理)

sudo apt install qpwgraph

PulseAudio vs PipeWire 对比

对比项

PulseAudio

PipeWire

使用场景

Ubuntu   20.04 及更早

Ubuntu   22.04+、Fedora、Arch

兼容性

成熟稳定

内置 PulseAudio  兼容,几乎无感

蓝牙音频

有延迟,偶有断连

明显改善

专业音频(DAW)

需要切换到 JACK

原生支持低延迟

屏幕录制权限

需要 xdg-portal  配合

原生集成

系统资源

轻量

稍重,但差异不大

配置工具

pavucontrol(仍可用)

pavucontrol(仍可用)+ qpwgraph

主流趋势

逐渐退出

现役标准

💡提示: Ubuntu 22.04 以后,pavucontrol照样能用——因为 PipeWire 内置了 PulseAudio 兼容层(pipewire-pulse),旧工具和旧命令(pactl、pacmd)都能正常使用,不用重新学。

如何判断我的系统用的是哪个?

#方法一:查进程

ps aux | grep -E 'pulseaudio|pipewire'

#方法二:查服务状态

systemctl --user status pulseaudio 2>/dev/null

systemctl --user status pipewire 2>/dev/null

#方法三:用 pactl 查服务器信息

pactl info | grep "Server Name"

#如果输出含 PulseAudio,说明是 PulseAudio

#如果输出含 PipeWire,说明是 PipeWire(即使命令是 pactl)

输出示例解读:

输出内容

说明

Server Name:   pulseaudio

系统使用   PulseAudio

Server Name:   PulseAudio (on PipeWire 1.x.x)

系统使用 PipeWire,带 PulseAudio 兼容层

常用音频诊断命令速查

以下命令适用于 PulseAudio 和 PipeWire(两套系统下pactl都可用):

命令

作用

alsamixer

ALSA 底层音量控制(检查硬件静音)

aplay -l

列出所有 ALSA 声卡

aplay   /usr/share/sounds/alsa/Front_Center.wav

用 ALSA 直接播放测试音(绕过 PulseAudio/PipeWire)

pactl list short   sinks

列出所有音频输出设备

pactl list short   sources

列出所有音频输入设备

pactl info

查看音频服务器信息

pavucontrol

图形音量控制面板(强烈推荐)

speaker-test -t   sine -f 1000 -c 2

播放 1000Hz 正弦波测试音

#快速声卡信息总览(一条命令看全貌)

aplay -l &&echo"---" && pactl info

音频配置文件分布

文件/目录

作用

作用范围

/etc/asound.conf

ALSA 系统级配置

全局

~/.asoundrc

ALSA 用户级配置

当前用户

/etc/pulse/default.pa

PulseAudio  系统级启动脚本

全局

~/.config/pulse/

PulseAudio  用户配置目录

当前用户

/usr/share/pipewire/

PipeWire 默认配置

全局(不建议直接改)

~/.config/pipewire/

PipeWire 用户配置目录

当前用户

/usr/share/wireplumber/

WirePlumber  默认规则

全局

~/.config/wireplumber/

WirePlumber  用户规则

当前用户

⚠️注意:修改 /etc/pulse/和 /usr/share/pipewire/下的系统级配置时要谨慎,建议先把原文件备份(cp original original.bak),改坏了可以还原。

声音系统层级总结表

层级

组件

你会遇到的问题

排查工具

硬件

声卡本体

声卡不被识别

lspci、lsusb、aplay -l

内核驱动

ALSA

静音开关、音量为0

alsamixer、aplay

音频服务器

PulseAudio   / PipeWire

多应用冲突、输出设备选错

pavucontrol、pactl

会话管理

WirePlumber

设备切换规则、热插拔异常

wpctl status、systemctl --user status wireplumber

应用层

Firefox /   VLC 等

单个应用无声

pavucontrol → 播放标签页

小结

知识点

要点

Linux 音频三层结构

内核 ALSA → 音频服务器 → 应用程序

ALSA

最底层,直连声卡;alsamixer检查硬件静音

PulseAudio

老一代音频服务器,Ubuntu   20.04及更早默认

PipeWire

新一代音频服务器,Ubuntu   22.04+默认,内置 PulseAudio 兼容

判断用哪个

pactl info | grep   "Server Name"

万能工具

pavucontrol——遇到声音问题先开它

下篇预告:装完系统没声音怎么排查?爆音怎么解决?蓝牙耳机连上但没声音?多个输出设备怎么切换?

最新文章

随机文章