Files
qiming/qiming-rcoder/docker/rcoder-agent-runner/FINAL_IME_SOLUTION.md
2026-06-01 13:54:52 +08:00

3.3 KiB
Raw Blame History

🎉 Docker 中文输入法最终解决方案

成功方案

纯 fcitx5 方案(不使用 ibus 桥接)

核心架构

Chromium (GTK3 应用)
    ↓ GTK_IM_MODULE=fcitx5
fcitx5 (输入法引擎)
    ↓
fcitx5-pinyin (拼音输入法)

关键修改

1. 软件包Dockerfile 第 25 行)

fcitx5 fcitx5-pinyin fcitx5-frontend-gtk3 fcitx5-frontend-gtk2 fcitx5-frontend-qt5 fcitx5-module-xorg fcitx5-config-qt im-config dbus-x11

移除了: ibus ibus-gtk ibus-gtk3(不再需要)

2. 环境变量(所有位置)

export GTK_IM_MODULE=fcitx5  # 不是 ibus
export QT_IM_MODULE=fcitx5
export XMODIFIERS=@im=fcitx5
export INPUT_METHOD=fcitx5

3. Chromium 启动脚本

创建 /usr/bin/chromium-browser-launcher:

#!/bin/bash
# 加载 D-Bus 地址
if [ -f /tmp/dbus-session-env ]; then
    source /tmp/dbus-session-env
fi

# 设置输入法环境变量
export DISPLAY=:0
export GTK_IM_MODULE=fcitx5
export QT_IM_MODULE=fcitx5
export XMODIFIERS=@im=fcitx5
export INPUT_METHOD=fcitx5

# 启动 Chromium
exec /usr/bin/chromium \
  --user-data-dir=/home/user/chromium-data \
  --no-sandbox \
  --disable-dev-shm-usage \
  --remote-debugging-port=9222 \
  --remote-debugging-address=0.0.0.0 \
  --no-first-run \
  --no-default-browser-check "$@"

4. XFCE 自启动

只需要 fcitx5.desktop:

[Desktop Entry]
Type=Application
Name=Fcitx 5
Exec=fcitx5 -d --replace
Icon=fcitx5
StartupNotify=false
Terminal=false
X-GNOME-Autostart-enabled=true
X-XFCE-Autostart-enabled=true

为什么这个方案有效?

  1. Chromium 启动脚本:确保 Chromium 启动时就有正确的环境变量
  2. 纯 fcitx5:避免了 ibus 桥接的复杂性和兼容性问题
  3. D-Bus 地址:从 /tmp/dbus-session-env 加载,确保连接正确

之前方案失败的原因

ibus 桥接方案失败

  • fcitx5 的 ibusfrontend 模块虽然加载,但从未成功注册到 ibus
  • ibus list-engine 从未显示 fcitx5 的输入法引擎
  • ibus 和 fcitx5 之间的桥接从一开始就没有工作

环境变量传递失败

  • 在 shell 脚本中设置环境变量,但 XFCE 子进程没有继承
  • /proc/<pid>/environ 读取权限问题导致无法验证
  • dbus-launch 创建新会话,覆盖了之前的 D-Bus 地址

测试验证

成功标志

  • 输入法托盘显示拼音图标
  • Ctrl+Space 可以切换输入法
  • Chromium 搜索框可以输入中文
  • 终端、gedit 等应用可以输入中文

测试步骤

  1. 启动容器
  2. 连接 VNC
  3. 打开 Chromium
  4. 访问 baidu.com
  5. 按 Ctrl+Space 切换输入法
  6. 输入拼音(如 nihao

构建和使用

# 构建镜像
docker build -t edgebox-sandbox .

# 启动容器
docker run -d --name sandbox -p 8080:8080 edgebox-sandbox

# 访问 VNC
open http://localhost:8080

文件清单

修改的文件

  • Dockerfile: 完全移除 ibus改用纯 fcitx5
  • start-up.sh: 环境变量改为 fcitx5
  • chromium-browser-launcher: 新的启动脚本

移除的内容

  • ibus 相关包
  • ibus 自启动配置
  • start-ibus.sh 脚本
  • GTK_IM_MODULE=ibus 配置

状态: 已验证可用
测试日期: 2025-11-28
环境: Debian 12 + XFCE + Chromium + fcitx5
方案: 纯 fcitx5无 ibus 桥接)