使用 PipeWire/WirePlumber 恢复卷

使用 PipeWire/WirePlumber 恢复卷

使用普通 ALSA 可以在alsa-restore.service系统重新启动后恢复声卡状态(音量、静音开关等)。

我感兴趣的是如何使用 PipeWire/WirePlumber 实现相同的目标。由于某种原因,重新启动后我的耳机输出被静音,并且其他一些设置被重置为某些默认状态。

alsa-restore.service不起作用,因为 PipeWire/WirePlumber 在启动时会覆盖设置。

WirePlumber Lua 配置非常复杂,我无法理解它。我正在寻求帮助。

答案1

通常,在具有图形桌面用户界面的 Linux 系统上,显示的第一个程序是欢迎程序,它呈现登录屏幕。该欢迎程序在 systemd 用户上下文中执行,这会触发为所有用户定义的用户单元(服务)的启动。其中一个单元是 Pipewire,它会触发 WirePlumber 的启动。

当 WirePlumber 启动时,它默认执行的第一件事之一是恢复以前存储的路由,这些路由是按用户存储的,包括卷配置。如果失败,WirePlumber 会将接收器的音量设置为默认值 40%,将源设置为 100%。

因此,如果您的欢迎程序不支持 WirePlumber,它可以在每次显示登录屏幕时重置卷,这是 WirePlumber 实例在登录时为实际用户拾取的更改,覆盖任何以前存储的卷。

如果没有进一步的环境信息,很难说这个特定问题是否影响您,但这似乎是一个常见问题,但很难解决,所以我认为这是一个值得探索的可能性。就我而言,LightDM 就发生过这种情况。Debian Wiki 有一个关于 PipeWire 的部分专门讨论 SDDM 的这个问题

鉴于迎宾员通常不需要播放音频,我的首选解决方案是完全禁用 PipeWire 为迎宾员用户帐户运行。为此,请在终端上运行以下命令:

  1. 登录到greeter 用户的systemd 会话:sudo machinectl shell lightdm@ /bin/sh。替换lightdm为运行欢迎程序的用户。
  2. 停止 PipeWire 和 WirePlumber:systemctl --user stop pipewire.service pipewire.socket wireplumber.service wireplumber.socket
  3. 禁用 PipeWire 和 WirePlumber:systemctl --user disable pipewire.service pipewire.socket wireplumber.service wireplumber.socket
  4. 作为额外的安全网,屏蔽 PipeWire 和 WirePlumber:systemctl --user mask pipewire.service pipewire.socket wireplumber.service wireplumber.socket
  5. 如果一切顺利,systemctl --user status wireplumber.service应该报告 WirePlumber 单元处于非活动状态并被屏蔽,即使您重复步骤 1,它也不会再次启动。从此时开始,只有实际用户登录才会导致 WirePlumber 启动。

相关内容