切換 setxkbmap 的腳本
我想要一個在:
setxkbmap se
和setxkbmap us
.然後我的意圖是
Ctrl``Esc
通過鍵盤>自定義快捷方式將該腳本映射到。關鍵是我想用
Ctrl``Escape
. 我該如何實施?
我不知道你正在執行什麼桌面環境,你將如何分配一個快捷鍵可能會有所不同,但這個腳本可以在全球範圍內工作,至少在我的
Ubuntu 12.04 box
and上Arch Linux
:#!/bin/bash (setxkbmap -query | grep -q "layout:\s\+us") && setxkbmap se || setxkbmap us
最好的方法是不使用腳本,而是載入兩層鍵盤(例如:)
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 定義一個虛擬修飾符,我不知道該怎麼做)