不能在某些地方输入非英文字符
在某些文本字段中,我根本不能输入非英文字符(我输入一个字符,没有任何反应)。 例子是:
- Unity短划线搜索字段
- Chromium地址栏
- Pidgin消息框
- Gajim消息框
在其他地方(如终端,Firefox地址栏,网站上的输入字段等)输入这些字符是有效的。
编辑:
$ locale LANG=sr_RS.utf8@latin LANGUAGE=sr_RS@latin:sr_RS:sr:en_US:en LC_CTYPE="sr_RS.utf8@latin" LC_NUMERIC=sr_RS LC_TIME=sr_RS LC_COLLATE="sr_RS.utf8@latin" LC_MONETARY=sr_RS LC_MESSAGES=sr_RS.UTF-8 LC_PAPER=sr_RS LC_NAME=sr_RS LC_ADDRESS=sr_RS LC_TELEPHONE=sr_RS LC_MEASUREMENT=sr_RS LC_IDENTIFICATION=sr_RS LC_ALL= $ gsettings list-recursively org.gnome.desktop.input-sources org.gnome.desktop.input-sources current uint32 0 org.gnome.desktop.input-sources per-window false org.gnome.desktop.input-sources show-all-sources false org.gnome.desktop.input-sources sources [('xkb', 'us'), ('xkb', 'rs+latin'), ('xkb', 'rs')] org.gnome.desktop.input-sources xkb-options @as [] $ setxkbmap -query -v Trying to build keymap using the following components: keycodes: evdev+aliases(qwerty) types: complete compat: complete symbols: pc+us+inet(evdev) geometry: pc(pc105) rules: evdev model: pc105 layout: us
当我切换到我的一个非美国布局时,我得到:
$ setxkbmap -query -v Trying to build keymap using the following components: keycodes: evdev+aliases(qwerty) types: complete compat: complete symbols: pc+rs(latin)+us:2+inet(evdev) geometry: pc(pc105) rules: evdev model: pc105 layout: rs,us variant: latin,
ENV:
$ env | grep -i im CLUTTER_IM_MODULE=xim XMODIFIERS=@im=ibus EDITOR=/usr/bin/vim IM_CONFIG_PHASE=1 QT4_IM_MODULE=xim TEXTDOMAIN=im-config XDG_RUNTIME_DIR=/run/user/1000 GTK_IM_MODULE=xim LC_TIME=sr_RS
我确认我在Unity和Chromium中遇到的问题与您显示的设置相同,但使用以下解决方法修复了它。
现有的问题是,即使菜单栏正确显示您已将布局切换为S1
,Unity也会像使用英语布局一样做出反应。
也就是说,即使指标显示为S1
,也只会产生英语输出。 Unity中的按键只会产生英文键,或者如果没有键对应塞尔维亚组合,则不会出现任何内容,或者如果组合恰好触发它,则会触发其他部分界面。 但是,其他应用程序,例如gedit
,将正确使用菜单栏中显示的塞尔维亚布局; 但Unity仍然只会像布局设置为英语一样做出反应。 此外,这不受更改字体的影响。
有两个问题:
- 某处有一个bug。
- 这个答案为bug提供了一种解决方法。
另请注意:
- 这与输入方法无关。 这适用于设置为
ibus
,fcitx
或none
的默认输入法。 -
这也与
xkb-options
设置无关,例如Compose Key
或第3rd level chooser
( 键盘中称为Alternative Characters Key
>> Typing 。(你没有这些设置;这一点只是为了完整性。)
密钥设置位于系统设置>> TextEntry中 。
默认设置是Use the same source for all windows
。 不幸的是,默认设置似乎总是会产生问题。
解决方法是将其切换为Allow different sources for each window
。
New windows
设置将适用于任一选项,但use the default choice
似乎不那么古怪,并且更加一致地正确工作。
你不应该注销,但它不会受到伤害。 此时,使用塞尔维亚键盘输入可在Chromium和Unity搜索中使用。 好吧,大部分时间。 我发现Unity有时仍然有点古怪,但这也很容易解决。
使用New windows use the default source
,几乎所有时间都按预期工作:
也就是说,你打开Unity,源切换到英文,然后你用Ctrl + Space切换源。 现在来源是S1 (latin)
。 键入[正确生成š
和依赖于组合的键也可以在Unity中正常工作。 例如, Right-Alt + a产生æ
。
奇怪的是,有时Unity的输入源和键盘指示器中显示的输入源似乎不同步,你得到或继续得到如上所述的问题。
这个怪癖的解决方法是循环输入源。 按Ctrl + Space直到返回所需的源。
这在大多数时间重新同步输入源。 有几次我不得不循环两次。 另一次,我不得不循环通过源,退出Unity并重启Unity。
好消息是,一旦消息来源重新同步,它们似乎在整个会话期间保持正确。
更好的是,如上所述,使用设置new windows use default source
似乎几乎在所有时间都可以防止怪癖首先发生。
这个怪癖的频率似乎是:
- 在默认设置下
Use the same source for all windows
:始终。 它永远不会奏效。 - 在
Allow different sources -- new use current source
设置下Allow different sources -- new use current source
:频繁。 经常需要循环通过输入源,有时退出/重启Unity。 - 在
Allow different sources -- new use default source
设置下Allow different sources -- new use default source
:罕见。 大部分时间都按预期工作。 循环通过输入源,有时退出/重启Unity需要时不时,但不经常。
我在Launchpad中找不到此错误,因此您可能希望报告针对输入源切换的新错误。 (我不确定要报告的确切包。)Launchpad中有类似的错误,但我看到的所有错误都比较旧并且没有活动。
我建议问题是在某些地方你使用的字体没有必要的非拉丁字符。 尝试检查桌面范围以及您使用的应用程序中使用的字体是否包含各种各样的字符,例如Liberation
或DejaVu
字体系列。