了解和设置不同的输入法

Pan*_*dya 28 gnome input-method trisquel

我将Trisquel GNU/Linux 7.0 LTS 与 GNOME 3 Flashback Environment 一起使用。

我听说过三种不同的输入法,即。ibusximuim。它似乎ibus是预装在我的系统上的。

$ cat trisquel_7.0_i686.iso.manifest | grep ibus
gir1.2-ibus-1.0 1.5.5-1ubuntu3
ibus 1.5.5-1ubuntu3
ibus-gtk:i386 1.5.5-1ubuntu3
ibus-m17n 1.3.4-3ubuntu1
ibus-table 1.5.0.is.1.5.0.20130419-2
libibus-1.0-5:i386 1.5.5-1ubuntu3
libusb-0.1-4:i386 2:0.1.12-23.3ubuntu1
libusb-1.0-0:i386 2:1.0.17-1ubuntu2
libusbmuxd2 1.0.8-2ubuntu1
libustr-1.0-1:i386 1.0.4-3ubuntu2
Run Code Online (Sandbox Code Playgroud)

在面对这个问题时,我学会了安装uim和设置GTK_IM_MODULE="uim"at ~/.profile。最近我去除uim,并去除GTK_IM_MODULE="uim"来自线~/.profile。但是为了克服这个错误,我现在打算摆脱ibus

没有安装任何额外的输入方法,(比如 Trisquel 的全新安装),echo $GTK_IM_MODULE输出xim所以,我很困惑,因为考虑到默认输入方法是ibus,那么为什么$GTK_IM_MODULE要说xim

我也可以apt-get remove ibus吗?或者我应该uim先安装然后删除ibus?另外我想知道当前正在使用哪种输入法ibusxim?什么是设置输入法的正确方法(即它GTK_IM_MODULE="uim"~/.profile)?

此外,我发现了一个 gsettings 方案:

$ gsettings get org.gnome.desktop.interface gtk-im-module
'gtk-im-context-simple'
Run Code Online (Sandbox Code Playgroud)

简而言之/广义上,我需要帮助来了解安装/删除和设置不同的输入法:

  • 我如何知道当前处于活动状态的输入方法?
  • 如何安装和设置不同的输入法?(我应该删除另一个吗?)

Jan*_*rff 63

整个 X11 输入堆栈一团糟。首先,如果您只是输入由 XKB 键盘布局定义的拉丁字符或多字符组合序列,则不需要任何特殊的输入法框架。严格来说,任何多键序列,例如死键,都需要非常简单的输入法。但它们由 libx11/XKB 提供,无需任何额外的 IM 框架即可工作。因此,如果您不需要输入中文或日文等语言,卸载所有 ibus、uim、fcitx 或任何您拥有的输入法是完全没问题的。

正如您已经说过的,Gnome 将 ibus 设为默认输入法,这一决定并非所有人都满意。有很多人更喜欢 fcitx(这似乎是大多数 KDE 发行版的默认设置)而不是 ibus,原因有几个:是正确的语言支持(主要是日语、简体还是繁体中文)或性能问题。由于我不会说任何需要特殊 IM 框架的东方语言,因此我无法在辩论中添加任何内容。但是,如果您对 fcitx 与 ibus 的更多详细信息感兴趣,您可能需要阅读这篇略有过时(2012 年)但可能仍然准确的LWN 文章

然而,ibus 是 Gnome 的默认 IM 的事实并没有使它成为强制性的。您可以使用任何其他您喜欢的输入法,也可以根本不使用。IM 配置是通过环境变量完成的。但是除了当您只使用 GTK+ 应用程序时(我对此表示怀疑),您应该设置的不仅仅是GTK_IM_MODULE. 设置输入法的正确方法是:

export GTK_IM_MODULE="fcitx"
export QT_IM_MODULE="fcitx"
export XMODIFIERS="@im=fcitx"
Run Code Online (Sandbox Code Playgroud)

如果是 fcitx 或

export GTK_IM_MODULE="ibus"
export QT_IM_MODULE="ibus"
export XMODIFIERS="@im=ibus"
Run Code Online (Sandbox Code Playgroud)

如果是 ibus。uim 以同样的方式工作。如果要明确禁用任何输入法,请使用以下设置:

export GTK_IM_MODULE="gtk-im-context-simple"
export QT_IM_MODULE="simple"
Run Code Online (Sandbox Code Playgroud)

空字符串也有效。

您可以在系统范围内/etc/profile(或/etc/profile.d分别在 内的专用文件)或本地内设置这些变量~/.xprofile。将其设置为~/.bashrc~/.profile将不会确保在使用图形登录管理器(例如 GDM、SDDM、KDM 或 LightDM)登录您的系统时将执行这些行。如果您使用 XDM、Slim 或 开始 X 会话startx,则需要将这些行放在~/.xinitrc.

如果您配置了 ibus 以外的输入法,请在之后转到 Gnome 设置并确保禁用所有与 ibus 相关的设置,尤其是所有键盘快捷键。或者,使用以下命令告诉 Gnome 不要触摸您的键盘设置:

gsettings set org.gnome.settings-daemon.plugins.keyboard active false
Run Code Online (Sandbox Code Playgroud)

或完全卸载 ibus。

现在XIM呢?XIM 是一种非常过时的输入法协议,ibus 和 fcitx 都仅出于传统支持的原因实施它。您现在没有真正的理由想要在这两者中的任何一个上使用 XIM。您想要设置的唯一原因GTK_IM_MODULE="xim"覆盖 GTK 的硬编码 ComposeKey 设置

回答您的另一个问题:除了查看环境变量或了解系统上安装了哪些 IM 之外,我认为没有真正的方法可以检测当前哪种输入法处于活动状态。如果GTK_IM_MODULE未设置,GTK 将根据/etc/gtk-2.0/gtk.immodules. GTK 3.0 查找/usr/lib/gtk-3.0/3.0.0/immodules.cache其中由gtk-query-immodules-3.0.

GTK_IM_MODULE设置为的原因xim可能是 中某处的一些杂散变量定义/etc/profile/etc/profile.d/*或任何其他本地或全局 shell RC 文件。如果您觉得有必要,请随意取消或覆盖此变量。

但是,根据此Gnome 错误报告评论,我假设通过配置gsettings的值会覆盖GTK_IM_MODULE为 DBus 激活的应用程序设置的值。因此,至少您的 Gnome 应用程序目前可能正在使用gtk-im-context-simple,这实际上意味着标准行为(即没有 ibus 或任何其他专用 IM)。