ibus切换输入法自动切换按键布局
本文中的「按键布局」特指软件可以更改的keymap,「键盘布局」指物理键盘上按键的排列。
在Linux下使用ibus也半年多了,基本只用中英德三个语言。在从de切换到rime的时候就发现一个问题:按键布局没有跟着输入法走。按照习惯说,中文对应的就应该是us+qwerty键盘布局,但是ibus-rime没有自动把布局切换回来。稍微研究了一下,找到了解决办法,在此记录一下。当然这个方法不限于ibus-rime,其他基于ibus的引擎也同样适用。
tldr
在 /usr/share/ibus/component/rime.xml
里,修改$.component.engines.engine[0].layout
为us
(或者你习惯的键盘布局)
<?xml version="1.0" encoding="utf-8"?>
<!-- filename: rime.xml -->
<component>
<name>im.rime.Rime</name>
<description>Rime Component</description>
<exec>/usr/lib/ibus-rime/ibus-engine-rime --ibus</exec>
<version>1.0</version>
<author>GONG Chen <chen.sst@gmail.com></author>
<license>GPL</license>
<homepage>https://rime.im</homepage>
<textdomain>ibus-rime</textdomain>
<engines>
<engine>
<name>rime</name>
<language>zh</language>
<license>GPL</license>
<author>GONG Chen <chen.sst@gmail.com></author>
<icon>/usr/share/ibus-rime/icons/rime.png</icon>
<!-- 之前为 default -->
<layout>us</layout>
<longname>Rime</longname>
<description>Rime Input Method Engine</description>
<rank>0</rank>
<symbol>㞢</symbol>
</engine>
</engines>
</component>
按键布局名称
ibus调用底层的kbd package处理按键布局,可以通过localectl list-keymaps
获取所有可用的按键布局名称
localectl list-keymaps | grep -i us
amiga-us
atari-us
br-latin1-us
cz-us-qwertz
is-latin1-us
mac-us
sunt5-cz-us
sunt5-us-cz
us
us-acentos
us1
刚开始本能往xml里填了个en,还琢磨了一会。 如果搜索en的话会发现什么都搜不到。
通过Wiki了解了下按键布局的命名规则:
- 两位语言代码 (e.g.
de
,fr
,但是并没有en) - 国家代码 (e.g.
uk
,us
,以这项命名的似乎更少) - 键盘布局 (e.g.
dvorak
代表Dvorak键盘布局,但是并没有qwerty)
个人感觉是比较混乱,还有很多历史遗留下的名称不符合这三个规则。当然都加起来一共也没多少种,人工找也问题不大。
参考
https://github.com/ibus/ibus/issues/2378#issuecomment-1031020813
https://github.com/rime/ibus-rime/issues/15#issuecomment-232886563
从第二个issue可以得知,之前ibus-rime的这个设置默认是us,但在1.2版本改成了default。在默认(default)设置下ibus会在切换引擎的时候保留上一个引擎设置的按键布局。