前言
 这次踩坑的核心不是单个软件坏了,而是 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。键


 

更多推荐