IMBlockerFabric

IMBlockerFabric

68.6k Downloads

[FEATURE] linux support

plusls opened this issue · 7 comments

commented

由于我本人主要使用 linux,着实被这个输入法搞得很恶心,花了一个晚上看了一下怎么解决 linux 的问题

总的来讲,第一要根据系统把 immanager 类拆开,用反射进行加载来避免加载别的系统的 class(如果在 linux 下加载 windows 的 class 会因为找不到 native 库而加载失败)

其次, minecraft 对输入法支持的缺陷是由其底层的 glfw 运行库导致的,我去翻看了一下代码发现了一个比较 hack 的解决方案,native hook XFilterEvent 的返回值让其返回 true,这样 glfw 就不会把按键信息使用 XIM 协议发送给 fcitx 了

然后我用 gbd 做了一个简单的实验,随手写了个 hook

image

然后在游戏里实验确实不会弹输入法了

接下来就是考虑怎么 hook 的问题,由于运行时已经加载,用 ld_preload 来 hook 不太现实,inline hook 可能会有版本兼容性的问题,最优解应该是直接 hook got 表,看看这两天能不能把代码摸出来

至于前面的1.15的问题,我看到你直接回滚了代码,等写完 linux 的 hook 后我检查一下看看能不能修

commented

适配写完了,但是我之前的 pr 不兼容旧版的原因好像是因为旧版的 isfocused 方法未被混淆,因此产生了问题

要是想做跨版本适配我目前还没什么思路

commented

https://github.com/plusls/ImBlockerFabric

等两边代码同步后发 pr

commented

说起来我还没测 windows 可能还得你帮我测一下,最近手头没有 windows

https://github.com/plusls/ImBlockerFabric/actions/runs/652054556

commented

说起来这个好像对 wayland 无效,对 x11 有效

commented

pr错了,把你的所有commit全都merge过来了。。。

commented

pr错了,把你的所有commit全都merge过来了。。。

啊 啥意思

commented

哦哦 已经 merge 了 感谢