Ovear's Blog

I'am Ovear,Ovear is me.

Theme Refrain made by Eiko

Proudly powered by WordPress

解决PipeWire无法切换到Redmi电脑音箱的问题

前言

前两个月在滚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文件拷贝到仓库所在的文件夹中,在PKGBUILDprepare方法中使用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

解决PipeWire无法切换到Redmi电脑音箱的问题有 3 条评论

  1. 博主好,我也是 Archlinux 系统,但是我的问题是完全没法用。使用 USB 连接 Redmi 电脑音箱,输出设备中可以识别出 Redmi 音箱,但是手动选择其为输出设备之后没有声音。且输入设备中也识别不出麦克风。

    插到另一台 Ubuntu 电脑上,输出输入设备都能识别,但是依然没有声音,麦克风倒是可以正常工作。

    Windows 上一切正常。

    以上所有设备插 AUX 线都是有声音的,但是 AUX 有尖锐刺耳杂音没法用,这个买之前就知道,但没想到这么严重。

    请问需要安装什么东西使其 USB 模式输出能正常在 Archlinux 下工作啊?是否可以帮忙解决?有偿。

      1. 多谢回复,现在勉强算是解决了。

        之前忘说了,我使用的是 Gnome 桌面,在 Gnome 的 Sound Settings 里选择 Redmi 电脑音箱没声音。后来我搜索的时候不知道在哪看到一个回答说没有声音,是因为什么频率问题,可以尝试使用 pavucontrol。然后我安装 pavucontrol,并在里面选择 Redmi 音箱之后就有声音了。现在偶尔开机不用开 pavucontrol 就能有声音,如果没有的话我就在 pavucontrol 里切换一下设备就有了。

        等有时间了好好研究一下 pipewire,还有你博文中的 issue 链接。再次感谢!

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

© 2024 Ovear's Blog All rights reserved.