采访 Systemd 和 PulseAudio 创始人 Lennart

本文介绍了Systemd的开发者关于Linux音频系统、初始化系统等方面的贡献与见解,并探讨了Systemd的技术优势及其对未来Linux发行版的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

下文是采访内容的简要翻译

首先是 Avahi,然后 PulseAudio,现在是 Systemd,你是如何在如此多个几乎不相关的领域做出这么大的贡献的?

实现 Avahi 的想法上是在研究 PulseAudio 的过程中出现的。在学习 mDNS/DNS-SD 网络协议过程中,我注意到现有的 Howl 实现有一些缺点和协议上的问题,于是打算重新由零开始实现它,Avahi 就是这样诞生的。

目前 Avahi 是 Linux 安装中唯一默认使用 chroot() 的守护进程(现在有另外一个 RealtimeKit 了,不过那个也是我编写的)。

在此之后我一直应该有初始化系统去解决这些问题,于是最终 Kay 和我提出并实现了 systemd 。

早期 PulseAudio 收到了很多批评。你认为这是由于 PulseAudio 还不够成熟,还是认为这些批评是不理智的?

PulseAudio 当然不是没有问题的,但当时发行版开始使用它的时候,很多问题是由于音频驱动而不是 PulseAudio 造成的。PulseAudio 基于时序的调度需要从音频驱动获得正确时序信息,而那时候的不少音频驱动并没有正确提供这些信息。而驱动没法提供正确信息的根本原因在于硬件的问题,导致在驱动层面难以找出合适的解决方法。

另外,请不要忘记在 Linux 音频通用堆栈方面只有 3.5 位全职开发人员。在如此少的人力投入下,目前成果相当不容易。当然距离 CoreAudio 还有差距,但已经相当接近了。所以在此希望那些不断抱怨的人可以更宽容些。

目前大多数硬件厂商已经意识到这个问题了,从某种程度上讲 PulseAudio 已经成为厂商驱动检查标准中的一部分了。当然,在较新的 USB 或者 HD 音频上设备依然可能出现问题。

另一方面,当时的选择也是迫不得已。在如此紧张的人力条件下,只能借助发布后的反馈来找出并修复错误。别忘记当年 CoreAudio 推出的时候,也是经历了类似的过程,而它现今已经成为音频堆栈的测试标准(现在也不是毫无问题,我上次尝试一个 USB 声卡时就出现了内核问题)。实现基于时序调度的音频堆栈是件相当复杂的工作,需要一段时间来达到稳定。

现在 Linux 平台上的音频堆栈和 Win 以及 OS X 平台上的相比如何呢?

Win 和 OS X 平台上音频堆栈的整合工作都比 Linux 平台的要好,但我们拥有一些独特的功能它们难以匹敌,比如网络传输、低延迟模式和无浮点音频管道(float-less audio pipelines)。

总体上 CoreAudio 是要比我们强,但是现在差距缩小。Win 平台上的无法像 CoreAudio 一样成为测试标准,但是它的整合性带来了比我们更好的开发体验。

相比 OSSv4 来说 ALSA/PulseAudio 有什么优势?你认为为什么 BSD 依然坚守 OSS 而不是去实现 ALSA/PulseAudio ?

OSS 是90年代风格的简化设计,它跟现代的桌面使用并没有太大关系。BSD 关注点在服务器,所以对于声音并不在意。另外一个也是更重要的原因是,BSD 和 Solaris 也没有别的选择。

OSS 的模式过于简化而无法实现基于时序的调度策略(这对于当前要求以节能的方式处理多种不同延迟设备十分重要),而在内核实现混音和采样率转换也是存有争议的。混音器的接口也过于简单,不能适应现代硬件的需求。

音频设备已经和过去不同了,现在有蓝牙、UPnP 设备、USB 声卡等。OSS 的模式适用于经典的声霸卡年代,现在并不适用了。

OpenBSD 使用了称为 aucat 的音频服务器,你认为它怎么样?

如果一个音频堆栈没有实现基于时序的调度,那么和消费级别音频设备就没有大多关系。据我所知,PulseAudio 是唯一实现源自 CoreAudio 的基于时序调度设计的开源音频堆栈。同时,PulseAudio 的零拷贝设计(在内存中交换音频数据的引用对象,而不是在应用程序和音频堆栈间交换音频数据本身)也是难以匹敌的。

具有讽刺意味的是,实现针对专业设备的音频堆栈要比消费音频设备及移动设备的音频堆栈简单的多。在专业设备上,低延迟是唯一需要考虑的因素,而节能并不重要。于是说基于时序的调度和零拷贝也就没有必要了。这也是将 Jack 和 PulseAudio 进行比较时需要注意的方面

除了 Ubuntu,似乎 systemd 将成为未来主要 Linux 发行版的初始化系统,你是否预料到了如此快的接受速度?

我们从一开始就知道我们创造了一个很好的东西,但是将其这么快就推广开来比预先料想的要容易。另外我认为最终 Ubuntu 也会接受 systemd 的,因为现在它已经无法和 systemd 相比了。另外 Scott 也不再是 Upstart 项目的领导人,项目前景难料。当然,这只是我的一面之词,毕竟我不在 Canonical 工作。

你介绍 systemd 的博文相当出色,不知道你是否觉得出色的社区沟通技巧也是你工作的一部分呢?

是的,我被要求将自己的工作通过博客的形式表现出来。

systemd 相比 upstart 有什么技术优势?你认为 Ubuntu 会逐渐接受 systemd 么?

具体优势可以在这篇博文中找到(译注:可以参见本站先前报道)。

我觉得会 Canonical 会接受的,理由如上。

可以解释这句话么:systemd 是首个能正确的杀死一个服务的 Linux 初始化系统。

一个像 Apache 那样的服务可能会有很多个子进程,比如 CGI 脚本。这些子进程可能是由第三方创建的所以对其只有极为有限的控制。所以他们极为可能从 Apache 主服务中剥离出来,而这在现实中很常见。

而这在 systemd 中将不再可能,子进程将无法逃出监控。这将是我们第一次可以完全的结束一个服务及其它的全部子进程,于是我们可以确保没有遗留的 CGI 脚本。详情可以参看这篇博文

我听说你计划使用 systemd 补充或取代桌面进程管理器,在这个领域 systemd 有什么优势么?

登录后的用户服务启动过程和整个系统的启动有着很多相似的地方,systemd 引入的那些提升系统服务启动速度的特性对于用户服务同样适用。实际上 OS X 上的 launchd 在启动系统服务之外也被用来启动用户服务。

为了达到这个目的,我们计划将用户服务进程也像系统进程那样并入不同 cgroups 分区,同时要保证多用户情况下的支持。

在 FOSDEM 采访中你这样说道:“我推荐黑客们只考虑 Linux 系统并享受它所带来的自由和机遇”。你知道 BSD 开发者们看到这番话时有多愤怒么?

我当然知道,他们看到我这番话感到愤怒,再正常不过了。

systemd 使用了大量 Linux 特用的 API,你是否认为 Linux API 已经取代了 POSIX API 的地位并且其他操作系统已经不再重要了?

是的,我的确认为 BSD 已经不再重要了。而在社区软件开发中为了 POSIX 兼容性的让步对发展的阻碍远远大于其带来的益处。

当然我也肯定像 BSD 这类系统不是对所有人都不再重要了,毕竟还有人在维护他们。但是对于希望将 Linux 带入主流的人们来说,不应该由于跟它们的兼容性而束缚了自身的脚步。 我们的目标是将 Free Software 带给每个人,在这一点上,BSD 的确不再重要了。

这只是我的个人想法。肯定每个做 Free Software 的人都有自己的想法,我有我的,其他人也有他们自己的。

可能 Debian 将不会使用 systemd 因为它需要考虑和 Debian GNU/kFreeBSD 的兼容性,你怎么看?

如果是那样的话,那么无疑是它们的损失。不要忘记 Debian kFreeBSD 是个试验性质的玩具系统。创建玩具系统没什么问题,毕竟所有人都喜欢玩具。但是如果 Debian 为了符合几个玩具操作系统开发者的想法而限制了其自身的发展,那么就是 Debian 自身的问题了。

如果我是 Debian 项目领导者的话,我会努力让 Debian 变得更具专业性,而忘掉 Debian kFreeBSD 玩具系统,不过我并不是 Debian 开发者。

另一方面,我没有觉得在 Debian kFreeBSD 中使用一个 BSD 的初始化系统而在 Debian Linux 版本中使用 systmed 有何不可。软件包只需要同时携带一份 systemd 的单元文件和 SysV 标准的脚本即可,systemd 可以很好的处理这种情况。所以我认为由于 Debian kFreeBSD 的原因而拒绝 systemd 的说法可能并不是真的。

通过阅读你在 LWN 及其他地方的文章,我发现你并不害怕激烈的争执和口水战。你喜欢这个过程,还是觉得很无聊?

我并不害怕。应对恶毒的评论是在开源软件社区推行巨大变革中必经之路。实际上,我怀疑我在这方面做的是否足够好。很多时候,我应该在讨论演变成口水战之前更早的回复,比如说句“无论怎样,我们要不同意 A 同意 B”, 从而阻止口水战的恶化。

为什么桌面 Linux 没有被主流用户所接纳?Linus 大神认为这是一个文化问题而不是技术问题,你同意他的观点么?

我认为我们原先在用户界面方面还不够创新,同时也没有传达出一个明确的信息和清晰的平台。如果你认同 OS X 是用户界面领域的参照标准的话,我们只是在复制它,但没有比上它。现在情况正在改观,GNOME 3 是首个严格遵循 UI 设计原则执行桌面环境,对于 Linux 桌面界面来讲是一个巨大的进步。

现在界面方面得到改观了,剩下就是明确的信息和清晰的平台了。Linux 平台还是过于零碎,一个希望为 Linux 平台制作软件的作者需要在一堆 API 中做出选择,它们很多看起来貌似很相近但其实是极度混乱,选择一个 API 可能意味着在一些系统上能工作而在另外一些不能。所以我认为我们应该从上到下简化整个平台,传递出一个明确的信息告诉人们桌面 Linux 操作系统是什么。 当然,我认为我在用户底层做的这些改善是在朝简化平台这个方向努力的。

最后,你对自己在 Linux 桌面领域做出的改变感到自豪么?你最开始的动机是什么呢?

当然咯~

动机嘛,最开始只有由于我喜欢折腾,很自然的发现闭源软件是没法折腾的。我希望在缔造一个可以和现有闭源产品的开源操作系统方面做出自己的小小贡献。

<think>嗯,用户遇到了PulseAudio获取不到扬声器的问题,我得先理清楚可能的原因。首先,我得回想一下PulseAudio的常见问题,比如设备未被识别、配置错误、权限问题或者服务未运行。 首先,确认硬件连接是否正常。用户可能没插好扬声器或者线缆有问题。如果是蓝牙设备,可能需要重新配对。接着,检查系统音量有没有被静音,或者音量调得太低,这个容易被忽略。 然后,看看PulseAudio服务是否在运行。有时候服务可能崩溃了,需要重启。用systemctl命令检查用户级的pulseaudio服务状态,或者直接kill掉进程重新启动。 接下来,查看音频设备是否被识别。用命令像pactl list sinks或者aplay -l,如果设备没列出来,可能是驱动问题。需要检查内核模块是否正确加载,比如snd_hda_intel之类的。如果驱动没问题,可能需要安装额外的固件。 权限问题也不能忽视,特别是如果用户用了root权限运行程序,PulseAudio可能无法访问设备。检查用户是否在audio组里,或者是否有权限设置错误。 配置问题方面,PulseAudio的配置文件可能被修改过,导致设备被屏蔽。检查/etc/pulse/default.pa或者用户目录下的.pulse文件,看看有没有屏蔽模块的指令。有时候禁用自动加载模块会引起问题,需要手动加载。 还有可能是其他程序占用了音频设备,比如ALSA应用直接访问硬件,导致PulseAudio无法使用。这时候需要停止那些程序,或者配置它们使用PulseAudio。 如果以上步骤都没解决,可能需要升级系统或PulseAudio,或者查看日志找错误信息。用pulseaudio -v启动可以看详细日志,或者检查journalctl的日志。 最后,考虑是否是内核或固件的问题,特别是新硬件可能需要更新的驱动。用户可能需要更新内核或安装特定驱动。 总之,这个问题需要一步步排查硬件、服务状态、驱动、权限、配置等多个方面,才能找到具体原因并解决。</think>### PulseAudio 获取不到扬声器(Speaker)的常见原因及解决方法 --- #### **1. 检查硬件连接与系统设置** - **物理连接**: 确保扬声器已正确插入(如3.5mm接口、USB或蓝牙配对),线缆无损坏。 若是蓝牙设备,尝试重新配对:`bluetoothctl connect <设备MAC地址>`。 - **系统音量控制**: 检查是否静音或音量调至最低: - 终端输入 `alsamixer`,按 `M` 键取消静音,方向键调整音量。 - 使用图形化工具:`pavucontrol`(需安装)。 --- #### **2. 确认 PulseAudio 服务状态** - **重启 PulseAudio 服务**: ```bash pulseaudio -k # 终止服务 pulseaudio --start # 重新启动 ``` - 若无效,尝试强制重启: ```bash systemctl --user restart pulseaudio.socket pulseaudio.service ``` --- #### **3. 检查音频设备识别** - **列出可用设备**: ```bash pactl list sinks # 查看已识别的输出设备 aplay -l # 通过 ALSA 检查设备列表 ``` - 若设备未列出,可能是驱动问题。 - **驱动问题排查**: - 检查内核模块是否加载: ```bash lsmod | grep snd # 查看声卡驱动(如 snd_hda_intel、snd_usb_audio) ``` - 重新加载驱动: ```bash sudo modprobe -r <驱动模块名> # 卸载模块 sudo modprobe <驱动模块名> # 重新加载 ``` --- #### **4. 权限与用户组** - **确认用户权限**: - 将用户加入 `audio` 组: ```bash sudo usermod -aG audio $USER ``` - 重启系统生效。 --- #### **5. 配置文件排查** - **检查 PulseAudio 配置**: - 编辑默认配置文件: ```bash nano /etc/pulse/default.pa # 或 ~/.config/pulse/default.pa ``` - 确保未注释以下关键模块: ```bash load-module module-alsa-sink # 加载 ALSA 输出 load-module module-device-restore # 设备恢复 ``` - **清除旧配置**: 删除用户配置目录并重启 PulseAudio: ```bash rm -r ~/.config/pulse/ pulseaudio -k && pulseaudio --start ``` --- #### **6. 排查资源占用冲突** - **释放音频设备占用**: - 关闭直接访问 ALSA 的程序(如某些游戏、播放器)。 - 查找占用进程: ```bash fuser -v /dev/snd/* # 列出占用声卡的进程 ``` --- #### **7. 日志与调试** - **查看详细日志**: ```bash pulseaudio -v 2> pulse_log.txt # 保存日志到文件 journalctl -u pulseaudio # 通过 systemd 查看日志 ``` --- #### **8. 其他可能原因** - **内核或固件过旧**: 更新系统固件: ```bash sudo apt update && sudo apt upgrade # Debian/Ubuntu sudo dnf update # Fedora ``` - **尝试 PipeWire 替代**: 若问题持续,可尝试用 PipeWire 替代 PulseAudio: ```bash sudo apt install pipewire-pulse # Debian/Ubuntu systemctl --user restart pipewire # 重启服务 ``` --- ### **总结步骤** 1. 检查硬件连接 → 2. 重启 PulseAudio → 3. 验证驱动加载 → 4. 调整权限 → 5. 清理配置 → 6. 排查日志。 若仍无效,考虑系统更新或切换音频架构(如 PipeWire)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值