我想要一个在:
setxkbmap se
和之间切换的bash 脚本setxkbmap us
。
然后我的意图是CtrlEsc通过键盘>自定义快捷键将该脚本映射到。
重点是我想用 切换键盘布局CtrlEscape。我怎样才能实现它?
答案1
我不知道您正在运行什么桌面环境,如何分配快捷键可能会有所不同,但此脚本在全球范围内有效,至少在我的Ubuntu 12.04 box
和Arch Linux
:
#!/bin/bash
(setxkbmap -query | grep -q "layout:\s\+us") && setxkbmap se || setxkbmap us
答案2
最好的方法是不使用脚本,而是加载两层键盘(例如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 ]
};
};
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)" };
(注意“se:2”,“:2”告诉将“se”符号定义加载为Group2;您可以堆叠各种组)。
您现在可以使用以下命令加载它:xkbcomp -I$HOME/.xkb ~/.xkb/keymap/mykbd $DISPLAY
然后 Ctrl-Esc 将在“us”和“se”布局之间切换。
但请注意,您需要在 Esc 之前按 Ctrl(并按住);另一种方式不起作用(它需要为 Escape 定义一个虚拟修饰符,我不知道该怎么做)
答案3
类似的问题有多种答案问题。然而,它们都不适合我。
以下脚本应该适用于所有情况。当使用以下命令切换布局时,它肯定适用于我的 debian 系统setxkbmap
:
#!/bin/bash
seven=`xmodmap -pke | grep "keycode 16" | awk '{print \$5}'`
## If this is the "us" layout
if [ $seven == "ampersand" ]; then
setxkbmap se
else
setxkbmap us
fi
该脚本解析 xmodmap 的输出以查看当前布局是“us”还是“se”。在“us”布局中,SHIFT+7映射到“&”。如果您仅在“us”和“se”布局之间切换,则打开“&”意味着7您正在使用“us”布局,并且脚本将更改为“se”。如果您没有打开“&” 7,脚本将切换为“us”。
答案4
如果您想在同一语言的变体之间切换,例如在 us lang 和带有变体 intl 的 us lang 之间切换:
#!/bin/bash
setxkbmap -query | grep -q 'variant:\s\+intl') && setxkbmap -layout us || setxkbmap -layout us -variant intl