mutter从50.1更新到50.2,导致了firefox输入法光标定位失败

环境

wayland+mutter+gnome+ibus-rime

问题具体描述

mutter从50.1更新到50.2,导致了firefox输入法光标定位失败。无法实时更新输入法框的位置,经常在左上角出现输入法框

问题查找

在网上找了很多的资料,不限于mutter的gitlab托管页面,火狐的官方论坛,都没有找到结果。所以我就去问了kimi,告诉我是mutter更新的输入协议和火狐(firefox)不兼容的原因


根因分析

mutter 50.2 引入了这个关键改动:

Implement support for version 2 of text_input_v3 protocol [Carlos; !3600]
这是 text_input_v3 协议 v2 版本 的实现。这个协议是 Wayland 下输入法与合成器通信的核心协议,负责传递光标位置、候选框位置、预编辑文本等关键信息。

为什么这个改动会破坏 Firefox 的候选框?

你的环境是 ibus-rime + GNOME Wayland + Firefox。在这个组合下:

  1. gedit 等原生 GTK4 Wayland 应用 → 直接使用 text_input_v3 协议与 mutter 通信,mutter 升级后 v2 协议正常工作。

  2. Firefox → 默认在 Wayland 下通过 XWayland 运行(即使你设置了 MOZ_ENABLE_WAYLAND=0,Firefox 在 GNOME 下的行为比较复杂),它使用的是 XIM (X Input Method) 协议,而不是原生的 text_input_v3

text_input_v3 v2 的实现对光标位置坐标的传递方式做了调整。在 v1 中,坐标可能以某种方式兼容 XWayland 的坐标映射;而 v2 可能改变了坐标原点的定义(比如从 surface-local 坐标改为全局坐标,或反之),或者改变了坐标发送的时机

这导致 GNOME Shell 的 ibusCandidatePopup.js 在计算 XWayland 窗口的候选框位置时,拿到了错误的坐标——可能是偏移量不对,或者坐标系混淆。


问题总结

我现在有点分不清出xwayland和wayland的区别,也纳闷为什么这个问题没人反应,按理gnome+ibus+firefox的使用量还是很大的。同时我对kimi的解答也很纳闷, MOZ_ENABLE_WAYLAND=0的参数设置是拒绝在wayland下运行,而不是强制在wayland下运行。同时我知道目前steam的输入协议也是xim,这个协议使我无法在steam中输入中文,目前这个问题也没有得到解决。

在Wayland下,火狐跟XWayland半毛钱关系都没有。你别听LLM胡言乱语。

请给出具体改动的提交号。

没有听说过有这么叠版本号的协议。请给出具体来源。

请关闭所有已在运行的火狐实例,然后运行WAYLAND_DEBUG=1 firefox 2>&1 | grep text_input > a.log。然后找个地方打字来复现问题,之后把生成的日志上传上来看看。

a.log (70.7 KB)
数据有点多

光标一直在差不多同一行上从左往右移动啊,从300px左右的位置一直移动到了1000px多。如果你没有看到输入法窗口跟着动的话,说明mutter没有正确处理协议、把输入法窗口弄过来。

估计是的,但是目前也就firefox发现了问题,其他软件没有发现这个问题,需要等mutter再次更新之后吗

你的「其他软件」都是什么软件?是不是根本没走text input协议啊?

其他软件就是一些gnome-edit、typora这种的,是正常的。mutter50.1也是正常的,更新到50.2就有问题了。

GTK 4、Electron,都是和火狐不一样的GUI框架。

你要不试试GTK_IM_MODULE=ibus firefox这么启动火狐看看问题能不能解决?

我也遇到了同样的问题,GNOME,Firefox。刚想在论坛开个贴子,发现已经有了。

firefox 151.0.3-1
mutter 50.2

我记得这个试过了,没有得到解决。再测试有点麻烦,就先不测试了

我是 fcitx + kimpanel extension 用户,firefox 也有不跟随,或者候选框消失的问题。

gnome + ibus + firefox 一样的问题 在网上找了一圈就只找到这个帖子 尝试了一下降级mutter到50.1 恢复正常了 希望未来有好的解决方案

今天我的其他应用显示不了候选框了。

看了一下,在 release notes 里面写了: https://gitlab.gnome.org/GNOME/mutter/-/releases/50.2

  • Implement support for version 2 of text_input_v3 protocol [Carlos; !3600 (merged)]

哦,这个的版本号。确实mutter发送的global里是version 2,但是火狐bind的还是version 1,所以应当跟之前一样运作。

所以大概是mutter改代码的时候给改坏了什么东西。

抓到火狐的复制bug了!

我在上游创建了一个 issue: https://gitlab.gnome.org/GNOME/mutter/-/work_items/4854

感谢各位大佬,我目前为止还没有更新过,打算等bug消失了再更新

有 patch 了: https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/5122

好的,我去研究一下 :hugs: