前言
前两个月在滚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连接作为记录。