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
2. 应用层
- 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
5. 不要全局设置:c
GTK_IM_MODULE=fcitx5
QT_IM_MODULE=fcitx5
6. VSCode 改成:i
- --ozone-platform=x11
- 单独注入 GTK_IM_MODULE=fcitx
- 单独注入 QT_IM_MODULE=fcitx
7. Edge 改成:
- --ozone-platform=x11
- 同样单独注入 fcitx 环境变量x
8. 注意 Edge 可能要同时改:
- microsoft-edge.desktop
- com.microsoft.Edge.desktop
———
一句话收尾.
这次问题的根源不是 Fcitx5 本身坏了,也不是 RustDesk 单独坏了,而是 KDE Wayland 虚拟键盘 和 RustDesk 的输入注入机制冲突。r
最终稳定解法就是:虚拟键盘设为“无”,然后把 Edge / VSCode 单独切到 XWayland + fcitx。键
更多推荐


所有评论(0)