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

求助! idea 启用原生 wayland 后无法使用 fcitx 中文输入法

  •  
  •   falser101 · 30 天前 · 1900 次点击

    ~/.config/JetBrains/IntelliJIdea2024.3/idea64.vmoption 配置 -Dawt.toolkit.name=WLToolkit 添加了这行,使用 xwayland 时输入法可用

    --add-exports=jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED
    --add-exports=jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED
    --add-exports=jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED
    --add-exports=jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED
    --add-exports=jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED
    --add-exports=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED
    -Xmx4096m
    -Dide.managed.by.toolbox=/home/falser/.local/share/JetBrains/Toolbox/bin/jetbrains-toolbox
    -Dsun.java2d.uiScale.enabled=true
    -Dtoolbox.notification.token=1f048724-9f7a-4a09-8c0c-df9d44ad8fda
    -Dtoolbox.notification.portFile=/home/falser/.cache/JetBrains/Toolbox/ports/d3924f5b-a107-45fc-be02-dd3ccead9373.port
    -Dawt.toolkit.name=WLToolkit 
    

    hyprctl clients,可以看到是运行到 wayland 下了

    Window 5fcf54171d60 -> tongpulsar_console – ~/.config/JetBrains/IntelliJIdea2024.3/idea64.vmoptions:
    	mapped: 1
    	hidden: 0
    	at: 10,47
    	size: 2028,1095
    	workspace: 5 (5)
    	floating: 0
    	pseudo: 0
    	monitor: 0
    	class: jetbrains-idea
    	title: tongpulsar_console – ~/.config/JetBrains/IntelliJIdea2024.3/idea64.vmoptions
    	initialClass: jetbrains-idea
    	initialTitle: 
    	pid: 83963
    	xwayland: 0
    	pinned: 0
    	fullscreen: 0
    	fullscreenClient: 0
    	grouped: 0
    	tags: 
    	swallowing: 0
    	focusHistoryID: 5
    	inhibitingIdle: 0
    

    请问下各位大佬有解决办法吗

    32 条回复    2025-03-12 13:23:50 +08:00
    wwew
        1
    wwew  
       30 天前
    用 fcitx5 ?
    falser101
        2
    falser101  
    OP
       30 天前
    @wwew 是的,这是我的# 系统信息:
    1. `uname -a`:

    Linux archlinux 6.13.4-arch1-1 #1 SMP PREEMPT_DYNAMIC Sat, 22 Feb 2025 00:37:05 +0000 x86_64 GNU/Linux

    2. `lsb_release -a`:

    LSB Version: n/a
    Distributor ID: Arch
    Description: Arch Linux
    Release: rolling
    Codename: n/a

    3. `lsb_release -d`:

    Description: Arch Linux

    4. `/etc/lsb-release`:

    DISTRIB_ID="Arch"
    DISTRIB_RELEASE="rolling"
    DISTRIB_DESCRIPTION="Arch Linux"

    5. `/etc/os-release`:

    NAME="Arch Linux"
    PRETTY_NAME="Arch Linux"
    ID=arch
    BUILD_ID=rolling
    ANSI_COLOR="38;2;23;147;209"
    HOME_URL="https://archlinux.org/"
    DOCUMENTATION_URL="https://wiki.archlinux.org/"
    SUPPORT_URL="https://bbs.archlinux.org/"
    BUG_REPORT_URL="https://gitlab.archlinux.org/groups/archlinux/-/issues"
    PRIVACY_POLICY_URL="https://terms.archlinux.org/docs/privacy-policy/"
    LOGO=archlinux-logo

    6. 桌面环境:

    无法确定桌面环境。

    7. XDG 会话类型:

    XDG_SESSION_TYPE='wayland'

    8. Bash 版本:

    BASH_VERSION='5.2.37(1)-release'

    # 环境:
    1. DISPLAY:

    DISPLAY=':1'


    WAYLAND_DISPLAY='wayland-1'

    2. 键盘布局:

    1. `setxkbmap`:

    WARNING: Running setxkbmap against an Xwayland server
    xkb_keymap {
    xkb_keycodes { include "evdev+aliases(qwerty)" };
    xkb_types { include "complete" };
    xkb_compat { include "complete" };
    xkb_symbols { include "pc+us+inet(evdev)" };
    xkb_geometry { include "pc(pc105)" };
    };

    2. `xprop`:

    _XKB_RULES_NAMES(STRING) = "evdev", "pc105", "us", "", ""

    3. Locale:

    1. 全部可用 locale:

    C
    C.utf8
    en_US.utf8
    POSIX
    zh_CN.utf8

    2. 当前 locale:

    LANG=zh_CN.UTF-8
    LC_CTYPE="zh_CN.UTF-8"
    LC_NUMERIC="zh_CN.UTF-8"
    LC_TIME="zh_CN.UTF-8"
    LC_COLLATE="zh_CN.UTF-8"
    LC_MONETARY="zh_CN.UTF-8"
    LC_MESSAGES="zh_CN.UTF-8"
    LC_PAPER="zh_CN.UTF-8"
    LC_NAME="zh_CN.UTF-8"
    LC_ADDRESS="zh_CN.UTF-8"
    LC_TELEPHONE="zh_CN.UTF-8"
    LC_MEASUREMENT="zh_CN.UTF-8"
    LC_IDENTIFICATION="zh_CN.UTF-8"
    LC_ALL=

    4. 目录:

    1. 主目录:

    /home/falser

    2. `${XDG_CONFIG_HOME}`:

    环境变量 `XDG_CONFIG_HOME` 是设定为 `/home/falser/.config` 。

    `XDG_CONFIG_HOME` 的当前值是 `~/.config` (`/home/falser/.config`)。

    3. Fcitx5 设置目录:

    当前 fcitx5 设置目录是 `~/.config/fcitx5` (`/home/falser/.config/fcitx5`)。

    5. 当前用户:

    脚本作为 falser (1000) 运行。

    # Fcitx 状态:
    1. 可执行文件:

    在 `/usr/bin/fcitx5` 找到了 fcitx5 。

    2. 版本:

    Fcitx 版本: `5.1.12`

    3. 进程:

    找到了 1 个 fcitx5 进程:

    1923 fcitx5

    4. `fcitx5-remote`:

    `fcitx5-remote` 工作正常。

    5. DBus 界面:

    使用 `dbus-send` 来检查 dbus 。

    DBus 名称 `org.fcitx.Fcitx5` 的所有者是 `:1.57`。

    DBus 名称 `org.fcitx.Fcitx5` 的 PID 所有者是 `1923`。

    来自 dbus 的调试信息:

    Group [wayland:] has 8 InputContext(s)
    IC [f752447188e442f6a5c5ca9a475b6835] program:Microsoft-edge frontend:wayland_v2 cap:72 focus:0
    IC [4e7d8373a09f4de79d478d003de70ba3] program:zen frontend:wayland_v2 cap:72 focus:0
    IC [20de7386f9ed484ab47190baeed0b200] program:wechat frontend:wayland_v2 cap:100000072 focus:0
    IC [b4340167e2ec40a1ac9c8016e77b40ed] program:jetbrains-idea frontend:wayland_v2 cap:100000072 focus:0
    IC [221ed0f1d4094aedbc9c367c0a03ab8b] program:clash-verge frontend:wayland_v2 cap:100000072 focus:0
    IC [04937c402873485e94731b323c8fc0d6] program:kitty frontend:wayland_v2 cap:100000072 focus:1
    IC [0af76c523f9f405aab41ec0985f135ea] program:Feishu frontend:wayland_v2 cap:100000072 focus:0
    IC [f7daf61527764077a4c8f25a26c74b5c] program: frontend:wayland_v2 cap:100000072 focus:0
    Group [x11::1] has 3 InputContext(s)
    IC [2c1f7e758b4742feab0da104ea948313] program:microsoft-edge frontend:dbus cap:6000000032 focus:0
    IC [fa590881e7964ceba0b5a7859b59cd8a] program:wechat frontend:fcitx4 cap:800072 focus:0
    IC [630896dfafa74a928f3b7b95b84c2bf4] program:feishu frontend:dbus cap:6000000032 focus:0
    Input Context without group

    # 前端设置:
    此脚本检查的环境变量仅能显示当前命令行的环境。仍有可能您的环境并没有应用于整个桌面。您可以通过使用命令对某个无法正常工作的进程使用命令 `xargs -0 -L1 /proc/$PID/environ` 检查此进程的实际的环境变量。

    ## Xim:
    1. `${XMODIFIERS}`:

    环境变量 XMODIFIERS 已经正确地设为了“@im=fcitx”。
    从环境变量中获取的 Xim 服务名称为 fcitx.

    2. 根窗口上的 XIM_SERVERS:

    Xim 服务的名称与环境变量中设置的相同。

    ## Qt:
    1. qt4 - `${QT4_IM_MODULE}`:

    环境变量 QT_IM_MODULE 已经正确地设为了“fcitx”。

    **`fcitx5-qt4-immodule-probing` 未找到.**

    2. qt5 - `${QT_IM_MODULE}`:

    环境变量 QT_IM_MODULE 已经正确地设为了“fcitx”。

    使用 fcitx5-qt5-immodule-probing 来检查在当前环境下将被实际使用的输入法模块:

    QT_QPA_PLATFORM=wayland
    QT_IM_MODULE=fcitx
    IM_MODULE_CLASSNAME=fcitx::QFcitxPlatformInputContext

    3. qt6 - `${QT_IM_MODULE}`:

    环境变量 QT_IM_MODULE 已经正确地设为了“fcitx”。

    使用 fcitx5-qt6-immodule-probing 来检查在当前环境下将被实际使用的输入法模块:

    QT_QPA_PLATFORM=wayland
    QT_IM_MODULE=fcitx
    IM_MODULE_CLASSNAME=fcitx::QFcitxPlatformInputContext

    4. Qt 输入法模块文件:

    找到了 fcitx5 的 qt 输入法模块:`/usr/lib/qt/plugins/platforminputcontexts/libfcitx5platforminputcontextplugin.so`。
    找到了未知的 fcitx qt 模块:`/usr/lib/office6/qt/plugins/platforminputcontexts/libfcitxplatforminputcontextplugin.so`。
    找到了 fcitx5 qt6 模块:`/usr/lib/fcitx5/qt6/libfcitx-quickphrase-editor5.so`。
    找到了 fcitx5 qt5 模块:`/usr/lib/fcitx5/qt5/libfcitx-quickphrase-editor5.so`。
    找到了未知的 fcitx qt 模块:`/usr/lib/qt6/plugins/plasma/kcms/systemsettings/kcm_fcitx5.so`。
    找到了 fcitx5 的 qt6 输入法模块:`/usr/lib/qt6/plugins/platforminputcontexts/libfcitx5platforminputcontextplugin.so`。

    下列错误也许并不准确,因为对路径所对应的 Qt 版本的猜测取决于发行版如何打包 Qt 。如果您不使用任何对应版本的 Qt 程序,或者在 Wayland 下使用 Qt 的 text-input 支持,下列错误也不是严重问题。
    **无法找到 Qt4 的 fcitx5 输入法模块。**

    ## Gtk:
    1. gtk - `${GTK_IM_MODULE}`:

    **请使用您发行版提供的工具将环境变量 GTK_IM_MODULE 设为 "fcitx" 或者将 `export GTK_IM_MODULE=fcitx` 添加到您的 `~/.xprofile` 中。参见 [输入法相关的环境变量:GTK_IM_MODULE]( http://fcitx-im.org/wiki/Input_method_related_environment_variables/zh-cn#GTK_IM_MODULE)。**

    **如果您的混成器完全支持 gtk 使用的 text-input 协议,您也可以使用 gtk 内置的 Wayland 模块。**

    使用 fcitx5-gtk2-immodule-probing 来检查在当前环境下将被实际使用的输入法模块:

    GTK_IM_MODULE=xim

    使用 fcitx5-gtk3-immodule-probing 来检查在当前环境下将被实际使用的输入法模块:

    GTK_IM_MODULE=wayland

    使用 fcitx5-gtk4-immodule-probing 来检查在当前环境下将被实际使用的输入法模块:

    GTK_IM_MODULE=wayland

    2. `gtk-query-immodules`:

    1. gtk 2:

    在 `/usr/bin/gtk-query-immodules-2.0` 找到了 gtk `2.24.33` 的 `gtk-query-immodules`。
    版本行:

    # Created by /usr/bin/gtk-query-immodules-2.0 from gtk+-2.24.33

    已找到 gtk `2.24.33` 的 fcitx5 输入法模块。

    "/usr/lib/gtk-2.0/2.10.0/immodules/im-fcitx5.so"
    "fcitx" "Fcitx5 (Flexible Input Method Framework5)" "fcitx5" "/usr/locale" "ja:ko:zh:*"
    "fcitx5" "Fcitx5 (Flexible Input Method Framework5)" "fcitx5" "/usr/locale" "ja:ko:zh:*"

    在 `/usr/bin/gtk-query-immodules-2.0-32` 找到了 gtk `2.24.33` 的 `gtk-query-immodules`。
    版本行:

    # Created by /usr/bin/gtk-query-immodules-2.0-32 from gtk+-2.24.33

    **无法在 `/usr/bin/gtk-query-immodules-2.0-32` 的输出中找到 fcitx5 。**

    2. gtk 3:

    在 `/usr/bin/gtk-query-immodules-3.0` 找到了 gtk `3.24.48` 的 `gtk-query-immodules`。
    版本行:

    # Created by /usr/bin/gtk-query-immodules-3.0 from gtk+-3.24.48

    已找到 gtk `3.24.48` 的 fcitx5 输入法模块。

    "/usr/lib/gtk-3.0/3.0.0/immodules/im-fcitx5.so"
    "fcitx" "Fcitx5 (Flexible Input Method Framework5)" "fcitx5" "/usr/locale" "ja:ko:zh:*"
    "fcitx5" "Fcitx5 (Flexible Input Method Framework5)" "fcitx5" "/usr/locale" "ja:ko:zh:*"

    3. Gtk 输入法模块缓存:

    1. gtk 2:

    在 `/usr/lib/gtk-2.0/2.10.0/immodules.cache` 找到了 gtk `2.24.33` 的输入法模块缓存。
    版本行:

    # Created by /usr/bin/gtk-query-immodules-2.0 from gtk+-2.24.33

    已找到 gtk `2.24.33` 的 fcitx5 输入法模块。

    "/usr/lib/gtk-2.0/2.10.0/immodules/im-fcitx5.so"
    "fcitx" "Fcitx5 (Flexible Input Method Framework5)" "fcitx5" "/usr/locale" "ja:ko:zh:*"
    "fcitx5" "Fcitx5 (Flexible Input Method Framework5)" "fcitx5" "/usr/locale" "ja:ko:zh:*"

    在 `/usr/lib32/gtk-2.0/2.10.0/immodules.cache` 找到了 gtk `2.24.33` 的输入法模块缓存。
    版本行:

    # Created by /usr/bin/gtk-query-immodules-2.0-32 from gtk+-2.24.33

    **无法输入法模块缓存 `/usr/lib32/gtk-2.0/2.10.0/immodules.cache` 中找到 fcitx5**

    2. gtk 3:

    在 `/usr/lib/gtk-3.0/3.0.0/immodules.cache` 找到了 gtk `3.24.48` 的输入法模块缓存。
    版本行:

    # Created by /usr/bin/gtk-query-immodules-3.0 from gtk+-3.24.48

    已找到 gtk `3.24.48` 的 fcitx5 输入法模块。

    "/usr/lib/gtk-3.0/3.0.0/immodules/im-fcitx5.so"
    "fcitx" "Fcitx5 (Flexible Input Method Framework5)" "fcitx5" "/usr/locale" "ja:ko:zh:*"
    "fcitx5" "Fcitx5 (Flexible Input Method Framework5)" "fcitx5" "/usr/locale" "ja:ko:zh:*"

    4. Gtk 输入法模块文件:

    1. gtk 2:

    找到的全部 Gtk 2 输入法模块文件均存在。

    2. gtk 3:

    找到的全部 Gtk 3 输入法模块文件均存在。

    3. gtk 4:

    找到的全部 Gtk 4 输入法模块文件均存在。
    falser101
        3
    falser101  
    OP
       30 天前
    以上为 fcitx5-diagnose 的输出
    mizuki9
        5
    mizuki9  
       30 天前
    I use kde btw ,linux 桌面太分裂了,选个主流的坑少。
    falser101
        6
    falser101  
    OP
       30 天前
    @mizuki9 我也想回 kde 了,hyprland 动画好看
    cnt2ex
        7
    cnt2ex  
       30 天前
    我现在基本已经放弃在 wayland 上使用输入法了。只能等应用 wayland 的支持更好一点再说。
    现在要么使用 wayland 就干脆不输入中文,要么就使用 x11 打开应用。

    目前我知道的包括 chrome 系列( chromium/brave )、Electron 框架的 app (比如 vscode 、Electronmail )、jetbrain 系列等等都无法在 wayland 上使用输入法。但是 firefox 系列、thunderbird 可以。
    mizuki9
        8
    mizuki9  
       30 天前
    @cnt2ex 反正 kde 的 Wayland 支持还可以了,chromium 系、Electron 系按照 archlinux wiki 设置,Wayland 下 fcitx5 输入中文没有任何问题了。jetbrain 不清楚。 现在的 Wayland 我认为是比较成熟了,一两年前确实还是一坨,现在是我觉得是正常可用了
    ns09005264
        9
    ns09005264  
       30 天前
    https://youtrack.jetbrains.com/issue/JBR-5672/Wayland-support-input-methods

    可能 WLToolkit 还不支持 Input-Method-V3 或 V1 。
    cnt2ex
        10
    cnt2ex  
       30 天前
    @mizuki9 的确,我发现 chromium 系列和 electron 系列去年添加了 text-input-v3 的支持,可以正常使用输入法了。jetbrain 的似乎还没有。
    phithon
        11
    phithon  
       30 天前
    Ubuntu 24.04 + wayland + gnome + ibus + rime ,没遇到过输入法问题
    mizuki9
        12
    mizuki9  
       30 天前
    @cnt2ex text-input-v3 有 bug ,说是 “由于对 text-input-v3 协议的理解不同,在使用 KWin 时会出现一些问题”,chrome 看 B 站长按右方向键快进无效,会变成连续跳跃几秒进度条。所以我还是用的 text-input-v1
    barathrum
        13
    barathrum  
       30 天前
    @cnt2ex #7 这些应用其实也能用中文输入法, 但是问题很多, 经常输入法候选框不在输入的光标处, 甚至经常在另一个屏幕上, 十分难受.
    yukafans
        14
    yukafans  
       30 天前
    @barathrum 我用的 gnome+fcitx5 ,自从 electron33 开启 text-input-v3 之后你说的问题通通消失了
    Maboroshii
        15
    Maboroshii  
       30 天前
    @phithon 我记得之前 ibus 有漏字的问题(主要是 chrome 系严重),现在已经解决了吗。
    SmithJohn
        16
    SmithJohn  
       30 天前
    linux 上我直接就没装中文输入法.
    能英文尽量英文,不能英文就用谷歌的网页输入法.
    rayae
        17
    rayae  
       30 天前
    jb 系列软件的 wayland 是测试版,还不支持输入法,官方回复已经在新建文件夹了
    FanyFull
        18
    FanyFull  
       30 天前 via Android
    目前还不支持。早就说在开发中了,结果到现在杳无音讯。不知道为啥这么慢:
    https://youtrack.jetbrains.com/issue/JBR-5672/Wayland-support-input-methods
    SP00F
        19
    SP00F  
       30 天前
    sway 也是,后来干脆切 kde 了
    minami
        20
    minami  
       29 天前
    说难听的,wayland 和 wayland 之间的差异比 x11 和 xwayland 之间的差异还大,wayland 生态就是个畸形的、到处分裂的怪胎,这一切都源于 wayland 开发团队的自以为是。说正经的,你光说在 wayland 下怎么怎么样,没有任何意义,你必须带上你的发行版和桌面环境信息,同样一个号称支持了 wayland 的程序,完全有可能在 GNOME 是好的,在其他桌面环境就是彻底不能用的
    phithon
        21
    phithon  
       29 天前
    @Maboroshii 我好像没遇到过
    falser101
        22
    falser101  
    OP
       29 天前
    @cnt2ex electron 系列可以加启动参数,jetbrain 只能用 xwayland 使用才能用中文了
    falser101
        23
    falser101  
    OP
       29 天前
    @minami 每个桌面都是自己的实现,差异确实大
    minami
        24
    minami  
       29 天前
    @falser101 #23 官方的实现 weston 更是个重量级。。。太坑了,大家宁愿用别的
    yinaqu
        25
    yinaqu  
       27 天前
    我记得 jetbrains 在开发 java 原生 wayland 支持,目前还没有实现 wayland 协议的 input method 协议吧?他们的进度是真的缓慢,要再等。https://youtrack.jetbrains.com/issue/JBR-5672/Wayland-support-input-methods
    ztmzzz
        26
    ztmzzz  
       22 天前 via iPhone
    hyprland 下,fcitx5 可以直接用啊,安装打开默认就是 wayland 。就是有缩放的情况下候选框不会正常缩放,还是原始比例。
    AlexHsu
        27
    AlexHsu  
       22 天前
    vscode 能用 idea 就不写注释了吧 界面需要中文的时候我都是 google 网页输入法粘贴过去
    jemyzhang
        28
    jemyzhang  
       20 天前
    @ztmzzz #26 正在 hyprland 上面折腾输入法,terminal ( kitty)默认就可以用 fcitx5 ,wayland 窗口,但是 google-chrome 设置 ozone 为 wayland 后,非要加--enable-wayland-ime 才行,其他 electron 系也需要,但是飞书之类改装版 electron 又不读.config/electron-flags.conf ,头大的很。但是不知道为什么我另外一台电脑却没有这个问题。
    现在这个有问题的电脑是新装的,archlinux + hyprland
    没问题的是 archlinux+gnome ,后期改成了 hyprland ,不知道是不是 gnome 搞定了上面这些问题。

    现在还有 xwayland 应用 scale 的事情,现在还搞不定。

    兄弟有没有可以分享的方法不吝赐教
    falser101
        29
    falser101  
    OP
       17 天前
    @ztmzzz 看我的 idea 配置,不加-Dawt.toolkit.name=WLToolkit 是运行在 xwayland 下的,这个时候可以用输入法
    falser101
        30
    falser101  
    OP
       17 天前
    @jemyzhang 飞书我直接在启动命令后面加--enable-features=UseOzonePlatform --ozone-platform=wayland --enable-wayland-ime 这样可行,但是在 hyprland 下有问题,kde 下没问题
    jemyzhang
        31
    jemyzhang  
       17 天前 via iPhone
    @falser101 #30 好吧,我也是用这种方法的,改了 hyprland exec 的命令行和 desktop 文件
    falser101
        32
    falser101  
    OP
       16 天前
    @jemyzhang 昨晚上在 hyprland 试了下飞书可以了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2227 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 00:40 · PVG 08:40 · LAX 17:40 · JFK 20:40
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.