ibus切换输入法自动切换按键布局

发表于:

本文中的「按键布局」特指软件可以更改的keymap,「键盘布局」指物理键盘上按键的排列。

在Linux下使用ibus也半年多了,基本只用中英德三个语言。在从de切换到rime的时候就发现一个问题:按键布局没有跟着输入法走。按照习惯说,中文对应的就应该是us+qwerty键盘布局,但是ibus-rime没有自动把布局切换回来。稍微研究了一下,找到了解决办法,在此记录一下。当然这个方法不限于ibus-rime,其他基于ibus的引擎也同样适用。

tldr

/usr/share/ibus/component/rime.xml里,修改$.component.engines.engine[0].layoutus(或者你习惯的键盘布局)

<?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 &lt;chen.sst@gmail.com&gt;</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 &lt;chen.sst@gmail.com&gt;</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>&#x37A2;</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了解了下按键布局的命名规则:

个人感觉是比较混乱,还有很多历史遗留下的名称不符合这三个规则。当然都加起来一共也没多少种,人工找也问题不大。

参考

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会在切换引擎的时候保留上一个引擎设置的按键布局。