前言
前两个月在滚Arch的时候,发现滚完之后就无法将Redmi电脑音响设置为默认设备了,一番查找之后发现是PipeWire更新导致的。检查升级记录之后,确认从PipeWire 1.0.5开始就会出现这个问题,不管是用KDE的GUI设定为默认设备,还是通过PipeWire和WirePlumber的CLI都不行。
因为一直没空寻找具体原因,也就直接采用降级大法解决,但是经常会出现开机时初始化PipeWire卡死的问题,还是有点不方便;这两天终于抽空彻底排查了以下。
原因
既然确定了出现问的版本,接下来的事情就很简单了。通过在git提交中搜寻,最终确定了引入该问题的commit是这个cc841a76。
查找的方法使用算法里面经典的图书管理员秘法之二分查找,最开始的时候还是手动二分查找的,后来想到vcs八成有自带这个功能,一搜发现是git bisect
;果然大佬们早就想到这个排查bug的方法,今天又学到了新知识很开心,几次搜索之后就将出现问题的commit找到了。
解决方法
既然找到了引入问题的commit,在提交官方处理的同时,revert这个commit就自然成为目前的dirty workaround了。
将pipewire打包项目从Arch仓库中clone下来,引入下面这个patch,之后在PKGBUILD
中应用就大功告成了,具体方法:把下面的patch文件拷贝到仓库所在的文件夹中,在PKGBUILD
的prepare
方法中使用git apply ../0001-Revert-acp-add-more-properties-for-the-card.patch
。
0001-Revert-acp-add-more-properties-for-the-card
最后使用pacman -U
安装pipewire-audio这个包就足够了;无意中发现pipewire拆成多个包之后,不同的版本搭配其实也是可以用的,比如说pipewire-audio可以用老点的版本(最新版把我小主机内置音响更没了,虽然不常用吧,但是还是能用用的;等官方处理完这个问题再看看好了没吧,没好再去发个issue看看;主要是遇到了PipeWire的大版本更新,整个设备结构和Profile都变了,估计没这么好查了),其他包用最新版,除了开机时偶尔会卡死无法正常初始化,但是成功之后没有用出什么太大问题。
尾巴
希望能够快点解决吧,这里留一个issue连接作为记录。
[1] https://gitlab.freedesktop.org/pipewire/pipewire/-/issues/4135
willww64
博主好,我也是 Archlinux 系统,但是我的问题是完全没法用。使用 USB 连接 Redmi 电脑音箱,输出设备中可以识别出 Redmi 音箱,但是手动选择其为输出设备之后没有声音。且输入设备中也识别不出麦克风。
插到另一台 Ubuntu 电脑上,输出输入设备都能识别,但是依然没有声音,麦克风倒是可以正常工作。
Windows 上一切正常。
以上所有设备插 AUX 线都是有声音的,但是 AUX 有尖锐刺耳杂音没法用,这个买之前就知道,但没想到这么严重。
请问需要安装什么东西使其 USB 模式输出能正常在 Archlinux 下工作啊?是否可以帮忙解决?有偿。
ovear 回复给 willww64
先确认下用的什么音频管线;如果和我一样的话,可以尝试下博文中的解决方案?
willww64 回复给 ovear
多谢回复,现在勉强算是解决了。
之前忘说了,我使用的是 Gnome 桌面,在 Gnome 的 Sound Settings 里选择 Redmi 电脑音箱没声音。后来我搜索的时候不知道在哪看到一个回答说没有声音,是因为什么频率问题,可以尝试使用 pavucontrol。然后我安装 pavucontrol,并在里面选择 Redmi 音箱之后就有声音了。现在偶尔开机不用开 pavucontrol 就能有声音,如果没有的话我就在 pavucontrol 里切换一下设备就有了。
等有时间了好好研究一下 pipewire,还有你博文中的 issue 链接。再次感谢!