Fre*_*rik 11 x11 shell-script xkb keyboard-layout
我想要一个 bash 脚本,它可以在:
setxkbmap se和setxkbmap us.
然后我的意图是CtrlEsc通过键盘> 自定义快捷方式将该脚本映射到。
关键是我想用CtrlEscape. 我该如何实施?
我不知道您正在运行什么桌面环境,您将如何分配快捷键可能会有所不同,但此脚本全局有效,至少在我Ubuntu 12.04 box和Arch Linux:
#!/bin/bash
(setxkbmap -query | grep -q "layout:\s\+us") && setxkbmap se || setxkbmap us
Run Code Online (Sandbox Code Playgroud)
最好的方法是不使用脚本,而是加载一个两层键盘(例如:)setxmodmap "us,se"并重新定义Ctrl-Esc发送 ISO_Next_Group
查看xkb上的这个答案,了解如何在无需编辑主默认文件的情况下重新定义某些键(因此,无需成为 root)。在本地符号文件(例如:)中~/.xkb/symbols/mysymbols放置一小部分为:
partial modifier_keys
xkb_symbols "ctrl_esc_toggle" {
key <ESC> {
type[Group1]="PC_CONTROL_LEVEL2",
symbols[Group1]= [ Escape, ISO_Next_Group ]
};
};
Run Code Online (Sandbox Code Playgroud)
PC_CONTROL_LEVEL2 告诉该键的第二个符号是通过 Control(而不是 Shift)获得的。
并在本地键盘映射文件(例如:~/.xkb/keymap/mykbd;您可以使用 来创建它setxkbmap "us,se" ; setxkbmap -print > ~/.xkb/keymap/mykbd)更改 xkb_symbols 行以添加“mysymbols(ctr_esc_toggle)”,因此您将拥有类似以下内容:
xkb_symbols { include "pc+us+se:2+inet(evdev)+terminate(ctrl_alt_bksp)+compose(rwin)+mysymbols(ctr_esc_toggle)" };
Run Code Online (Sandbox Code Playgroud)
(注意“se:2”,“:2”告诉将“se”符号定义加载为 Group2;您可以堆叠各种组)。
您现在可以加载它:xkbcomp -I$HOME/.xkb ~/.xkb/keymap/mykbd $DISPLAY
然后 Ctrl-Esc 将在“us”和“se”布局之间切换。
但是请注意,您需要在 Esc 之前按 Ctrl(并按住);另一种方式它不起作用(它需要为 Escape 定义一个虚拟修饰符,我不知道该怎么做)