LMDE 7 / KDE Plasma 6 Wayland 下 RustDesk、Fcitx5、Edge、VSCode 输入法冲突的最终解决方案

前言

这次踩坑的核心不是单个软件坏了,而是 RustDesk 远程输入、KDE Wayland 虚拟键盘(InputMethod)、Fcitx5 三者在同一个 Wayland 会话里发生了冲突。

一句话先说结论:

  • KDE 的"虚拟键盘"必须选"无"

  • 不能选 fcitx5-wayland-launcher

  • 一旦在 KDE 里把虚拟键盘设置成 Fcitx5,RustDesk 远程键盘输入就会出问题

  • 最终正确方案是:全局关闭 KDE 虚拟键盘,Edge 和 VSCode 单独走 XWayland + fcitx

如果下次我重装系统,只要看到这篇记录,我就知道怎么修。


我的环境

  • 系统:LMDE 7 (gigi)

  • 桌面:KDE Plasma 6

  • 显示协议:Wayland

  • 输入法:Fcitx5 + Rime

  • 远程桌面:RustDesk 1.4.6 (deb)

  • 浏览器:Microsoft Edge

  • 编辑器:VSCode


问题现象

最开始的现象非常诡异:

  • RustDesk 能连上,但远程输入键盘时异常

  • 表现像是 Insert 一直被按住

  • 在编辑器或终端里输入时,会进入 覆盖模式(Overwrite)

  • 本地终端中文输入正常

  • Chrome 可以输入中文

  • Edge 和 VSCode 则时好时坏,或者完全不能输入中文

最后排查下来,问题根源是 KDE Wayland 的虚拟键盘设置。


核心矛盾

在 KDE Plasma 6 + Wayland 下:

  • 如果 系统设置 -> 输入设备 -> 虚拟键盘 里选择了 fcitx5-wayland-launcher

  • Edge 中文可能正常

  • VSCode 中文可能正常

  • 但 RustDesk 远程键盘输入会坏

  • 典型症状就是 Insert 卡住、覆盖输入、按键状态异常

  • 如果 虚拟键盘 选择 无

  • RustDesk 远程输入恢复正常

  • 终端中文正常

  • 但 Edge / VSCode 这种应用,默认 Wayland IME 可能又不能用

所以本质上是两套输入链路打架:

  • RustDesk 依赖远程注入键盘事件

  • KDE Wayland InputMethod 会接管输入法协议

  • Fcitx5 再参与虚拟键盘输入

  • 三者叠加后,键盘状态容易错乱


最终结论

最关键的一条:KDE 的虚拟键盘必须设为"无"。

也就是:

  • 打开 系统设置

  • 进入 输入设备

  • 找到 虚拟键盘

  • 选择"无"

  • 不要选择 Fcitx 5 Wayland Launcher

  • 不要选任何输入法项

  • 只要这里选了 Fcitx5,RustDesk 就会坏

这条是全篇最重要的结论。


最终可用方案

我最后采用的是下面这套组合,全部都能共存:

  • KDE 虚拟键盘:无

  • RustDesk:正常

  • 终端 Fcitx5:正常

  • Chrome 中文:正常

  • VSCode 中文:正常

  • Edge 中文:正常

实现方式分两层:

  1. 全局层
  • 关闭 KDE 虚拟键盘

  • 清理全局 IME 环境变量

  • 不让系统全局强推 Wayland IME

  1. 应用层
  • Edge 和 VSCode 不再走原生 Wayland IME

  • 单独改成 XWayland/X11 + fcitx


第一步:关闭 KDE 虚拟键盘

这一步最关键。

如果你打开过 ~/.config/kwinrc,里面通常会有类似内容:

InputMethod[$e]=/usr/share/applications/fcitx5-wayland-launcher.desktop

必须去掉它,或者在 KDE 设置界面里直接改成 无。

我的最终状态是:

  • ~/.config/kwinrc 里没有 InputMethod

  • KDE 图形界面里"虚拟键盘"显示为 无

这一步完成后:

  • RustDesk 输入恢复正常

  • 不再出现 Insert 卡住 / 覆盖输入


第二步:清理全局输入法环境变量

我之前的一个误区,是把 GTK_IM_MODULE 和 QT_IM_MODULE 全局设置了。

比如 /etc/environment 里曾经写成这样:

export GTK_IM_MODULE=fcitx5

export QT_IM_MODULE=fcitx5

export XMODIFIERS="@im=fcitx5"

这其实不适合当前这个场景。

最终正确做法是:

XMODIFIERS=@im=fcitx5

注意两点:

  • /etc/environment 里不要写 export

  • 不要全局设置:

  • GTK_IM_MODULE=fcitx5

  • QT_IM_MODULE=fcitx5

用户级配置也一样,我最后的 ~/.config/environment.d/fcitx5.conf 只保留:

XMODIFIERS=@im=fcitx5

这样做的目的是:

  • 全局环境尽量干净

  • 不再强迫所有应用走同一条输入法链路

  • 避免继续放大 RustDesk + KDE InputMethod + Fcitx5 的冲突


第三步:VSCode 单独改成 XWayland + fcitx

在 KDE Wayland 下,VSCode 不一定能直接用 Fcitx5,所以要单独处理。

我的做法是:

  • 复制系统的 code.desktop 到本地

  • 修改本地启动器

  • 强制 VSCode 走 X11/XWayland

  • 同时只对 VSCode 注入 fcitx 环境变量

~/.config/code-flags.conf 最终写成:

--disable-gpu

--ozone-platform=x11

另外,本地 code.desktop 和 code-url-handler.desktop 的 Exec 也改成类似下面这种:

env GTK_IM_MODULE=fcitx QT_IM_MODULE=fcitx XMODIFIERS=@im=fcitx5 /usr/share/code/code --ozone-platform=x11

处理完之后:

  • VSCode 中文输入恢复正常

  • RustDesk 不受影响


第四步:Edge 单独改成 XWayland + fcitx

Edge 和 VSCode 类似,但更坑一点。

因为系统里通常不止一个 Edge 启动器,至少可能有这两个:

  • microsoft-edge.desktop

  • com.microsoft.Edge.desktop

我一开始只改了一个,结果发现 edge://version 里仍然显示:

--ozone-platform=wayland

说明实际启动的不是我改的那个入口。

后来排查才发现:

  • 菜单、任务栏、默认浏览器关联,很可能实际走的是 com.microsoft.Edge.desktop

  • 所以必须 两个都改

最终我的做法是:

  • 在 ~/.local/share/applications/ 下覆盖:

  • microsoft-edge.desktop

  • com.microsoft.Edge.desktop

  • 把里面的 Exec= 全部改成 XWayland + fcitx

类似这样:

/usr/bin/env GTK_IM_MODULE=fcitx QT_IM_MODULE=fcitx XMODIFIERS=@im=fcitx5 /usr/bin/microsoft-edge-stable --ozone-platform=x11

改完之后再完全退出 Edge,重新从菜单启动,检查 edge://version,命令行里应该变成:

--ozone-platform=x11

这样 Edge 中文输入就恢复了。


为什么 Chrome 没那么麻烦

Chrome 在我的环境里,本来就能通过 Wayland 参数正常使用中文输入,所以它不一定需要退回 X11。

也就是说,这个坑主要集中在:

  • RustDesk

  • KDE Wayland 虚拟键盘

  • Fcitx5

  • Edge

  • VSCode

而 Chrome 的兼容性相对更好一些。


最终状态

我最终机器上的状态如下:

| 功能 | 状态 | 说明 |

|---|---|---|

| RustDesk 远程输入 | ✅ 正常 | 前提是 KDE 虚拟键盘必须为"无" |

| 终端中文输入 | ✅ 正常 | Fcitx5 + Rime 正常 |

| Chrome 中文 | ✅ 正常 | 本身可正常工作 |

| Edge 中文 | ✅ 正常 | 改成 XWayland + fcitx 后恢复 |

| VSCode 中文 | ✅ 正常 | 改成 XWayland + fcitx 后恢复 |

| RustDesk 开机自启 | ✅ 正常 | deb 版 systemd 服务 |


最关键的经验总结

如果你也遇到下面这个组合:正

  • KDE Plasma 6

  • Wayland

  • Fcitx5

  • RustDesk

那记住最重要的一条:

KDE 的虚拟键盘不要选 Fcitx5,必须选"无"。y

再说一遍:

  • 虚拟键盘 = 无不

  • 不要选 fcitx5-wayland-launcher

  • 只要虚拟键盘选了 Fcitx5,RustDesk 基本就会出现输入异常|

然后再对 Edge、VSCode 这些麻烦应用做单独兼容:

  • 不走 Wayland IME

  • 改成 XWayland/X11 + fcitx

这样才是目前最稳的方案。c


适合重装系统后的速查版

如果下次重装系统,只要照着下面做就行:

  1. 安装 Fcitx5 + Rime

  2. KDE 里把 虚拟键盘 设置成 无

  3. 检查 ~/.config/kwinrc,不要有 InputMethod

  4. /etc/environment 只保留:

XMODIFIERS=@im=fcitx5

  1. 不要全局设置:c

GTK_IM_MODULE=fcitx5

QT_IM_MODULE=fcitx5

  1. VSCode 改成:i
  • --ozone-platform=x11

  • 单独注入 GTK_IM_MODULE=fcitx

  • 单独注入 QT_IM_MODULE=fcitx

  1. Edge 改成:
  • --ozone-platform=x11

  • 同样单独注入 fcitx 环境变量x

  1. 注意 Edge 可能要同时改:
  • microsoft-edge.desktop

  • com.microsoft.Edge.desktop


一句话收尾.

这次问题的根源不是 Fcitx5 本身坏了,也不是 RustDesk 单独坏了,而是 KDE Wayland 虚拟键盘 和 RustDesk 的输入注入机制冲突。r

最终稳定解法就是:虚拟键盘设为"无",然后把 Edge / VSCode 单独切到 XWayland + fcitx。键

相关推荐
千寻girling8 小时前
被内推的面试 , 第一次
java·前端·python·面试·职场和发展·typescript·node.js
JustNow_Man9 小时前
Bun 常用命令速查清单(TypeScript 编译篇)
前端·javascript·typescript
anyup9 小时前
uni-app 全能日历组件,支持农历、酒店预订、打卡签到、价格日历多种场景
前端·前端框架·uni-app
果然1239 小时前
Vue 3 Composition API 最佳实践:从项目实战中汲取的经验
前端
鱼人10 小时前
Web Components:未来的前端组件化标准?
前端
果汁华10 小时前
Chrome DevTools MCP:让 AI 编码助手拥有浏览器调试超能力
前端·人工智能·chrome devtools
二月龙10 小时前
移动端适配必杀技:Viewport与响应式布局全解
前端
大萝卜呼呼10 小时前
Next.js第十七课 - 部署
前端·typescript·next.js
只会写Bug10 小时前
后台管理项目中关于新增、编辑弹框使用的另一种展示形式
前端·vue.js
weixin1997010801610 小时前
《废旧物资商品详情页前端性能优化实战》
前端·性能优化