冒险岛079

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 8|回复: 0

在 XFCE + fcitx5 下让 SecureCRT 支持中文输入

[复制链接]

724

主题

13

回帖

2310

积分

管理员

积分
2310
发表于 昨天 14:22 | 显示全部楼层 |阅读模式
环境:Ubuntu / XFCE 桌面,fcitx5 + 五笔输入法,SecureCRT 9.x

━━━━━━━━━━━━━━━━━━━━

背景

从 GNOME + ibus 迁移到 XFCE + fcitx5 之后,几乎所有软件的中文输入都正常,唯独 SecureCRT 例外——光标停在那里,切换输入法、按快捷键,什么反应都没有,字符就是进不去。

这种问题看起来应该有标准解法,实际上折腾了好几个来回。

━━━━━━━━━━━━━━━━━━━━

第一步:设置环境变量(无效)

遇到 Linux 下输入法不工作,第一反应是环境变量没设置。标准做法是在启动命令前加上:
  1. GTK_IM_MODULE=fcitx QT_IM_MODULE=fcitx XMODIFIERS=@im=fcitx SecureCRT
复制代码

同时修改用户级
  1. .desktop
复制代码
文件(
  1. ~/.local/share/applications/SecureCRT.desktop
复制代码
),将
  1. Exec
复制代码
行改为带环境变量的启动命令,覆盖系统级配置。

结果:无效。

━━━━━━━━━━━━━━━━━━━━

第二步:发现 SecureCRT 自带 Qt6 库

  1. ldd
复制代码
查看 SecureCRT 的动态链接依赖:
  1. ldd /usr/bin/SecureCRT | grep -i qt
复制代码

输出揭示了问题所在:
  1. libQt6Widgets.so.6 => /usr/bin/../lib/scrt-sfx/libQt6Widgets.so.6
  2. libQt6Core.so.6   => /usr/bin/../lib/scrt-sfx/libQt6Core.so.6
  3. ...
复制代码

SecureCRT 完全不使用系统 Qt6,而是在
  1. /usr/lib/scrt-sfx/
复制代码
下自带了一套 Qt 6.8.4 运行库。这意味着系统里安装的
  1. fcitx5-frontend-qt6
复制代码
插件对 SecureCRT 毫无作用——它根本不会去加载系统的
  1. platforminputcontexts
复制代码
目录。

━━━━━━━━━━━━━━━━━━━━

第三步:尝试复制 fcitx5 Qt 插件(版本不兼容)

SecureCRT 有自己的插件目录:
  1. /usr/lib/scrt-sfx/plugins/platforminputcontexts/
  2. ├── libcomposeplatforminputcontextplugin.so
  3. └── libibusplatforminputcontextplugin.so
复制代码

没有 fcitx5 插件。恰好系统里有一个专门为 SecureCRT 准备的插件位于
  1. /usr/lib/scrt/plugins/platforminputcontexts/libfcitx5platforminputcontextplugin.so
复制代码
,看起来只需要复制过去。

但检查版本后发现:
  1. strings /usr/lib/scrt/plugins/.../libfcitx5platforminputcontextplugin.so | grep "Qt_6"
  2. # → Qt_6.4
  3. strings /usr/lib/scrt-sfx/libQt6Core.so.6 | grep "^6\."
  4. # → 6.8.4
复制代码

Qt 插件与运行库版本必须匹配。6.4 的插件无法加载到 6.8.4 的 Qt 环境中。此路不通。

━━━━━━━━━━━━━━━━━━━━

第四步:注意到 SecureCRT 自带 ibus 插件

重新审视 SecureCRT 的插件目录,它已经内置了
  1. libibusplatforminputcontextplugin.so
复制代码


这提供了另一条路:fcitx5 内置 IBus 前端模拟
  1. libibusfrontend.so
复制代码
),可以对外表现为 ibus 守护进程。SecureCRT 有 ibus 插件,fcitx5 能模拟 ibus——两者本可以对话。

验证 fcitx5 的 ibus 模拟是否运行:
  1. ibus address
  2. # → unix:path=/run/user/1000/bus,fcitx_random_string=ebe631b875d348c88d478d6815fd899e
复制代码

地址存在。同时 fcitx5 会将地址写入文件:
  1. cat ~/.config/ibus/bus/*-unix-0
  2. # IBUS_ADDRESS=unix:path=/run/user/1000/bus,fcitx_random_string=...
  3. # IBUS_DAEMON_PID=2528
复制代码

━━━━━━━━━━━━━━━━━━━━

第五步:用 ibus 协议启动 SecureCRT(成功)
  1. IBUS_ADDRESS=$(ibus address) QT_IM_MODULE=ibus XMODIFIERS=@im=ibus SecureCRT
复制代码

中文输入成功。

关键在于显式传入
  1. IBUS_ADDRESS
复制代码
。SecureCRT 的 ibus 插件需要知道连接地址,仅靠
  1. XMODIFIERS
复制代码
不足以自动发现 fcitx5 提供的 ibus 模拟服务。

━━━━━━━━━━━━━━━━━━━━

第六步:固化为启动脚本
  1. ibus address
复制代码
返回的地址中包含 fcitx5 每次启动随机生成的字符串,不能硬编码。改为直接读取 fcitx5 写入的地址文件,更稳定、不依赖
  1. ibus
复制代码
命令是否在 PATH 中:
  1. # ~/.local/bin/securecrt-launch.sh
  2. #!/bin/bash
  3. IBUS_ADDRESS=$(grep -h "^IBUS_ADDRESS=" ~/.config/ibus/bus/*-unix-0 2>/dev/null \
  4.     | grep -v "^IBUS_ADDRESS=$" | head -1 | cut -d= -f2-)
  5. export IBUS_ADDRESS
  6. export QT_IM_MODULE=ibus
  7. export XMODIFIERS=@im=ibus
  8. exec SecureCRT "$@"
复制代码

用户级
  1. .desktop
复制代码
文件的
  1. Exec
复制代码
行改为调用此脚本:
  1. Exec=/home/chin/.local/bin/securecrt-launch.sh
复制代码

━━━━━━━━━━━━━━━━━━━━

第七步:修复 Plank dock 不走用户 .desktop 的问题

从 Plank dock 点击图标仍然不能输入中文。检查 Plank 的启动器配置:
  1. cat ~/.config/plank/dock1/launchers/SecureCRT.dockitem
  2. # Launcher=file:///usr/share/applications/SecureCRT.desktop
复制代码

Plank 绕过了用户级
  1. .desktop
复制代码
覆盖机制
,直接读取
  1. /usr/share/applications/
复制代码
下的系统文件。将 dockitem 指向用户级版本:
  1. [PlankDockItemPreferences]
  2. Launcher=file:///home/chin/.local/share/applications/SecureCRT.desktop
复制代码

重启 Plank:
  1. pkill plank && plank &
复制代码

问题彻底解决。

━━━━━━━━━━━━━━━━━━━━

总结

| 排查步骤 | 结论 |
|---|---|
| 设置
  1. QT_IM_MODULE=fcitx
复制代码
环境变量 | 无效,SecureCRT 不加载系统 Qt 插件 |
| 复制系统 fcitx5 Qt 插件 | 版本不兼容(Qt 6.4 vs 6.8.4) |
| 利用 fcitx5 内置 ibus 前端 | 有效,绕过 Qt 版本问题 |
| 脚本读取 ibus 地址文件 | 替代
  1. ibus
复制代码
命令,兼容非交互式启动 |
| 修改 Plank dockitem 路径 | 修复 dock 不走用户 .desktop 的问题 |

根本原因:SecureCRT 自带 Qt 6.8.4 运行库,与系统 Qt 完全隔离,导致所有基于系统 Qt 插件目录的输入法方案失效。最终解决方案是利用 fcitx5 已有的 ibus 协议兼容层,配合 SecureCRT 自带的 ibus 输入插件,绕过 Qt 版本壁垒。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

果子博客
扫码关注微信公众号

Archiver|手机版|小黑屋|风叶林

GMT+8, 2026-4-3 06:10 , Processed in 0.321191 second(s), 19 queries .

Powered by 风叶林

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表