在某些文本字段中,我根本无法输入非英文字符(我输入一个字符,什么也没发生)。例如:
- Unity dash 搜索字段
- Chromium 地址栏
- 洋泾浜消息框
- 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 | 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
答案1
我确认在 Unity 和 Chromium 中遇到了与您展示的相同设置中的相同问题,但通过以下解决方法解决了该问题。
现有的问题是,即使菜单栏正确显示您已将布局切换为,S1
Unity 的反应就像使用英文布局一样。
也就是说,即使指示器显示 ,也只会产生英文输出S1
。在 Unity 中按下按键只会产生英文键,如果没有按键与塞尔维亚语组合相对应,则不会出现任何内容,或者如果组合恰好触发界面的另一部分,则界面的另一部分会触发。但是,其他应用程序(例如 )gedit
将正确使用菜单栏中显示的塞尔维亚语布局;但 Unity 仍然只会像布局设置为英语一样做出反应。此外,这不会受到更改字体的影响。
有两个问题:
- 某个地方有一个错误。
- 该答案提供了解决该错误的一种方法。
另请注意:
这与输入法无关。默认输入法设置为
ibus
、fcitx
或 时,此方法有效none
。这也与 中的设置无关
xkb-options
,例如Compose Key
或(在 中3rd level chooser
称为Alternative Characters Key
键盘 >> 打字。(您没有设置其中任何一个;这一点只是为了完整性。)
关键设置位于系统设置>>文本输入。
默认设置是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
:频繁。经常需要循环输入源,有时还需要退出/重新启动 Unity。 - 在设置下
Allow different sources -- new use default source
:罕见。大多数时候都能正常工作。偶尔需要循环输入源并退出/重新启动 Unity,但并不频繁。
我在 Launchpad 中找不到这个错误,所以你可能想报告一个针对输入源切换的新错误。(我不确定要报告的具体软件包。)Launchpad 中也有类似的错误,但我看到的所有错误都是旧的并且没有激活。
答案2
我认为问题在于,在某些地方,您使用的字体没有必要的非拉丁字符。请尝试检查桌面范围和您使用的应用程序中所使用的字体是否具有广泛的覆盖字符,例如Liberation
或DejaVu
字体系列。