Shell-Script

切換 setxkbmap 的腳本

  • August 18, 2020

我想要一個在: setxkbmap sesetxkbmap us.

然後我的意圖是Ctrl``Esc通過鍵盤>自定義快捷方式將該腳本映射到。

關鍵是我想用Ctrl``Escape. 我該如何實施?

我不知道你正在執行什麼桌面環境,你將如何分配一個快捷鍵可能會有所不同,但這個腳本可以在全球範圍內工作,至少在我的Ubuntu 12.04 boxand上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 定義一個虛擬修飾符,我不知道該怎麼做)

引用自:https://unix.stackexchange.com/questions/46897