![切换多个键盘布局的脚本](https://linux22.com/image/174059/%E5%88%87%E6%8D%A2%E5%A4%9A%E4%B8%AA%E9%94%AE%E7%9B%98%E5%B8%83%E5%B1%80%E7%9A%84%E8%84%9A%E6%9C%AC.png)
我使用 ElementaryOS 项目中的 Archlinux 和 Pantheon Shell,但它有一个令人不快的问题漏洞与切换布局。现在我用这个脚本在布局之间切换。它的工作效果并不完美(切换之间仍然存在轻微的延迟),但比标准交换机更快。我还从面板上删除了不必要的指示器。现在我正在学习另一种语言,我需要向系统添加另一种布局。
由于50行的python脚本运行缓慢,我想使用setxkbmap us
, setxkbmap ru
,setxkbmap eo
来切换,它与上面所有的不同,可以立即运行。问题是如何将它们组合成一个脚本,以便按CAPSLOCK
打开US
、SHIFT + CAPSLOCK
打开RU
、SHIFT + TAB
打开EO
?我从来没有写过这样的脚本,也不知道它应该是什么样子。
答案1
有一种方法可以在不编写脚本的情况下完成类似的操作:您可以创建一个合并英语、俄语、世界语的新键盘布局,它的行为几乎如您所愿:
首先在/usr/share/X11/xkb/symbols/
(或键盘配置文件所在的任何位置,可能是/usr/share/kbd/keymaps/
,具体取决于您的发行版)创建一个文件,并使用不与现有文件冲突的名称(我命名为我的oo
)来命名该文件。并在此文件中添加几行以确保其正常工作:
xkb_symbols "multi" {
include "us(basic)"
include "level3(ralt_switch)"
name[Group1] = "english";
name[Group2] = "esperanto";
name[Group3] = "russian";
key <CAPS> {[ISO_Next_Group, ISO_Prev_Group]};
key.type[group1]="FOUR_LEVEL";
key.type[group2]="FOUR_LEVEL";
key.type[group3]="FOUR_LEVEL";
key <AD01> {[], [scircumflex, Scircumflex], [Cyrillic_shorti, Cyrillic_SHORTI]};
};
然后尝试使用setxkbmap oo -variant multi
.
- 按下
q
就会写入q
。此示例仅适用于字母q
(但我可以轻松地对其他字母执行此操作)。它可以写ŝ
世界语或й
俄语。 Caps
在us
、eo
和ru
、 with之间循环输入ISO_Next_Group
(重复三遍,您将返回us
布局)。Shift + Caps
以相反的顺序键入循环ISO_Prev_Group
。
如果您不喜欢这种在布局之间循环的方式,您可以使用(更改<CAPS>
文件中的行):
key <CAPS> {[ISO_First_Group, ISO_Last_Group]};
- 无论您当前位于何处,键入
Caps
都会进入布局。us
ISO_First_Group
- 无论您身在何处,输入
Shift + Caps
都会进入布局。ru
ISO_Last_Group
- 不幸的是,没有
ISO_Second_Group
,因此您只能直接访问 2 个布局(但如果您想使用 2 个以上,则可以循环)。还有其他类似键码的列表这里。
该文件的工作原理:
xkb_symbols "multi" { ... };
是键盘布局变体的名称。include "us(basic)"
包括qwerty
布局,因此您不必将qwerty
密钥放入配置文件中。include "level3(ralt_switch)"
如果你有时想用的话Altgr
。key <NAME>{ [group 1 content], [group 2 content], [group 3 content]};
,每组内容是默认键、键与Shift
、键与Altgr
...的逗号分隔名称,最多 8 个值。第一组的内容这里可以省略。
注意:更改组比setxkbmap
每次运行都要快。