V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
LaTero
V2EX  ›  Linux

Linux 下 Tk 应用无法使用输入法

  •  
  •   LaTero · 134 天前 via Android · 1557 次点击
    这是一个创建于 134 天前的主题,其中的信息可能已经有所发展或是发生改变。

    Arch linux KDE ,输入法框架是 ibus Qt 应用和火狐正常。应该不是我程序的问题,在 Windows 下没问题,而且用 Tk 的 IDLE 也输不了中文,弹不出候选栏,英文直接上屏了。fcitx5 也试过,不仅 Tk 用不了,Qt 和火狐也用不了了…… 有人有过这方面经验吗?网上完全找不到相关信息,欧洲用户切换母语和英语是怎么搞的?他们都没有这种问题吗?

    第 1 条附言  ·  132 天前
    解决方案一:
    1. 安装 Tk4 硬编码的 XLFD pattern 能匹配到的字体。
    2. Tk 不支持 fontconfig ,还要手动 xset (见 ArchWiki font 页面 Old Applications )。
    3. LC_CTYPE 必须为中文 /日文等语言,英语一定无效。
    解决方案二:
    有国际化需要最好还是使用基于 GTK 、Qt 或 SDL2 的框架。
    根源是 Tk 硬编码了一个 XLFD 字体 pattern ,并且不支持 fontconfig ,创建字体失败,而 tk preferred input style 必须要有字体,所以 XCreateIC 失败。
    GTK 等更现代的框架不会有这种问题。
    18 条回复    2022-04-04 17:23:11 +08:00
    Cooky
        1
    Cooky  
       134 天前
    fcitx5 装了对应的模块了吗? fcitx5-gtk fcitx5-qt ?
    LaTero
        2
    LaTero  
    OP
       134 天前 via Android
    @Cooky 装了,fcitx5-im 组里面有。另外火狐用 ibus 连环境变量都不需要,也是挺神奇的。
    maxco292
        3
    maxco292  
       134 天前 via Android
    pam_environment 设置了吗
    LaTero
        4
    LaTero  
    OP
       134 天前 via Android
    @maxco292 .xprofile 里设的,能设的环境变量都设了,qbittorrent 和 Konsole 都能用,就 Tk 不行。
    maxco292
        5
    maxco292  
       134 天前 via Android
    @LaTero 我这边 pam env 设置的环境变量 idle fctix5 是可以用的。

    GTK_IM_MODULE DEFAULT=fcitx
    QT_IM_MODULE DEFAULT=fcitx
    XMODIFIERS DEFAULT=\@im=fcitx
    SDL_IM_MODULE DEFAULT=fcitx
    Cooky
        6
    Cooky  
       134 天前
    @LaTero 你开个终端看看 fcitx 的变量都在吗,kde 可能会清空变量吧,xprofile 不见得有效
    export GTK_IM_MODULE=fcitx
    export QT_IM_MODULE=fcitx
    export [email protected]=fcitx
    kingfalse
        7
    kingfalse  
       134 天前 via Android
    我是 opensuse kde fcitx5 rime 没问题,ibus 的话是有些程序不支持,比如 jb 家的 ide
    LaTero
        8
    LaTero  
    OP
       134 天前 via Android
    @Cooky 是在的,Qt 应用也确实能用。

    @maxco292 archwiki 说 pam_environment 是 depreciated 我就没试过,明天起床我再试试。我以前也是用 fcitx5-rime 的,没用桌面环境,在 displayer manager 的启动脚本里配置的环境变量可以用。上个星期重装了一下,用了 KDE ,今天才发现 fcitx 用不了了。KDE 应该是 fcitx 用的比较多吧,怎么 GNOME 带的 ibus 反而能用……
    sparkrat
        9
    sparkrat  
       134 天前
    自己看一下 fcitx5-diagnose 咯,基本上“fcitx5 能工作,但是在特定环境下不工作”的情况,都可以通过这个诊断的输出来检查原因
    maxco292
        10
    maxco292  
       134 天前 via Android
    pam environment 上游确实废弃了,现在正统方案是 .config/environment.d/*.conf
    LaTero
        11
    LaTero  
    OP
       133 天前 via Android
    @maxco292 我重装了一下 fcitx5 和 rime 就能用了(除了 Tk)
    @sparkrat 除了没有 gtk4 和 gtk2 的缓存外一切正常。
    我又试了下了 gtk4 和 python kivy 的 hello world 都能用。看 Tk 的 mailing list 好像用的是 XIM ,就跟着 tedyin 的 a brief intro to linux input method framework 写了 XIM demo ,也是可以用。看来是 Tk 的问题了。
    24owls
        12
    24owls  
       133 天前
    刚刚试了一下 tk 可以用 fcitx 啊,不过我还是用的 debian buster 的 fcitx 4

    apt install git-gui
    git gui

    然后在 commit message 里面正常切换到 fcitx 输入了汉字
    LaTero
        13
    LaTero  
    OP
       133 天前 via Android
    @24owls 试了试我这 git gui 也不行,tk 8.6.12 。fcitx4 还没试过,但是 ibus 也不行。你用了桌面环境吗?
    24owls
        14
    24owls  
       133 天前
    @LaTero 我的 Debian Buster 上面 i3wm 无 DE 和 KDE 都可以正常在 tk 的 git gui 里面用 fcitx 输入汉字
    LaTero
        15
    LaTero  
    OP
       133 天前 via Android
    @24owls 我刚才也试了 fcitx4 ,还是不行,越来越迷了。你 locale 是中文的吗?我在 kde 里 locale 设的是 en_US ,刚试着调了下中文了一下,但是看 arch wiki ,KDE 的 locale 和 keymap 好像很乱,不清楚还有没有地方没改到的。另外我 caps lock 的灯也没用,有可能是 kde 新版本的 bug ,debian 没滚动的 arch 新所以正常。明天我也搞个 i3wm 看看行不行。
    24owls
        16
    24owls  
       133 天前
    # localectl
    System Locale: LANG=en_GB.UTF-8
    LANGUAGE=en_GB:en

    应该跟 locale/keymap 没什么关系吧,我记得语言这部分我没做过什么特殊设置,仅有的两处改动,一个是 i3wm 启动的时候加了几个环境变量

    export GTK_IM_MODULE=fcitx
    export QT_IM_MODULE=fcitx
    export [email protected]=fcitx

    一个是 emacs 启动的时候修改了 LC_CTYPE=zh_CN.UTF-8

    要不你找个新环境试一下,如果新环境没碰到问题的话,再排查原因
    LaTero
        17
    LaTero  
    OP
       132 天前 via Android
    @24owls 还真和您 emacs 设的 LC_CTYPE 有关😭我下载了源码 debug 了一晚上终于搞定了。有三步是必需的:
    1. 安装它硬编码的 XLFD pattern 能匹配到的字体。
    2. tk 不支持 fontconfig ,还要手动 xset 。
    3. LC_CTYPE 必须为中文 /日文等语言。
    根源是 tk 硬编码了一个 XLFD 字体 pattern ,并且不支持 fontconfig ,创建字体失败,而 tk preferred input style 必须要有字体,所以 XCreateIC 失败。
    libx11 真的看着头疼,文档里也没提到 XIMPreeditPosition 一定要字体(可能文档太老了),难怪 GTK 和 Qt 都要搞自己的输入模块。珍爱生命,远离 XIM 。
    Jarvis666
        18
    Jarvis666  
       129 天前
    1. 不使用中文
    2. 换 win 或 mac
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   4188 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 52ms · UTC 09:28 · PVG 17:28 · LAX 02:28 · JFK 05:28
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.