我想要一个bash脚本,它可以在setxkbmap se
和之间切换
setxkbmap us
。
然后,我的意图是CtrlEsc通过键盘>自定义快捷方式将该脚本映射到。
关键是我想用切换键盘布局CtrlEscape。我该如何实施?
我想要一个bash脚本,它可以在setxkbmap se
和之间切换
setxkbmap us
。
然后,我的意图是CtrlEsc通过键盘>自定义快捷方式将该脚本映射到。
关键是我想用切换键盘布局CtrlEscape。我该如何实施?
Answers:
我不知道您正在运行什么桌面环境,如何分配快捷键可能会有所不同,但是该脚本至少在我Ubuntu 12.04 box
和上可以全局运行Arch Linux
:
#!/bin/bash
(setxkbmap -query | grep -q "layout:\s\+us") && setxkbmap se || setxkbmap us
xmodmap
,如下所示。
setxkbmap
。如果我使用通过keyboard shortcuts
LMDE上的GUI 设置的快捷方式来切换布局,也是如此。setxkbmap
仅当我切换使用它时才会更改。
对类似问题有各种答案。但是,它们都不对我有效。
以下脚本在所有情况下均适用。当使用以下命令切换布局时,它当然可以在我的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”。在“我们”布局中,SHIFT+ 7映射到“与”符号。如果仅在“ us”和“ se”布局之间切换,则启用“&” 7表示您正在使用“ us”布局,脚本将更改为“ se”。如果您未打开“与”号7,则脚本将切换为“我们”。
最好的方法是不使用脚本,而是加载两层键盘(例如:)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将在“我们”和“ se”布局之间切换。
注意,但是您需要在Esc之前按Ctrl(并按住);另一种方法是行不通的(这需要为Escape定义一个虚拟修饰符,我不知道该怎么做)
leftwin+leftalt+space
看起来如何?
{ include "pc+us+ru:2+inet(evdev)+group(win_space_toggle)" };