使用 setxkbmap 交换 Left Shift 和 Left Control

day*_*day 23 xkb keyboard-layout

是否可以使用而不是交换左键Shift和左键?CTRLsetxkbmapxmodmap

编辑

我已经切换到Fcitx,它在我的键盘布局和自定义键盘映射方面的效果比 IBus 在各方面都要好得多。我强烈推荐它。

Pab*_*aga 40

xmodmap已过时;所以确实应该用xkb工具来完成。

您想要的交换似乎默认不包含在 X11 文件中;所以你必须自己写。

页面https://web.archive.org/web/20170825051821/http://madduck.net/docs/extending-xkb/帮助我理解并找到了一种方法。

创建一个文件~/.xkb/keymap/mykbd,在其中放置 的输出setxkbmap,它将是您的基本键盘定义;例如:

setxkbmap -print > ~/.xkb/keymap/mykbd
Run Code Online (Sandbox Code Playgroud)

然后,创建一个符号文件来定义您的密钥交换,例如将其放入 ~/.xkb/symbols/myswap

在那里,放置以下几行:

partial modifier_keys
xkb_symbols "swap_l_shift_ctrl" {
    replace key <LCTL>  { [ Shift_L ] };
    replace key <LFSH> { [ Control_L ] };
};
Run Code Online (Sandbox Code Playgroud)

然后,编辑~/.xkb/keymap/mykbd文件,并更改xkb_symbols要添加的行

+myswap(swap_l_shift_ctrl)
Run Code Online (Sandbox Code Playgroud)

最后,您可以加载它xkbcomp -I$HOME/.xkb ~/.xkb/keymap/mykbd $DISPLAY(不能使用“~”作为-I参数)。

它可能会针对某些稀有键发出大量有关未定义符号的警告,但您可以忽略它们(例如,将错误重定向到 dave: 2> /dev/null)。

如果您希望能够轻松地在正常和反向 ctrl/shift 之间切换;只需在~/.xkb/keymap/另一个文件下创建,而无需额外的“myswap”选项,并使用xkbcomp. 您可以制作两个小脚本来加载它们。


小智 6

我在映射LALTControl_L使用Pablo 的解决方案时遇到了一些问题,看来您还需要设置modifier_map选项。

我从/usr/share/X11/xkb/symbols/altwin- 查找xkb_symbols "ctrl_alt_win"-复制了一个模板并对其进行了修改以设置以下更改:

  • LALT 键控制**
  • Alt 的 LWIN 键
  • MENU 键到 Windows 键

最终~/.xkb/symbols/myswap文件是:

partial modifier_keys
xkb_symbols "swap" {
   key <MENU> {     [   Super_L     ]   };
   key <LALT> { [ Control_L, Control_L  ] };
   key <RALT> { type[Group1] = "TWO_LEVEL",
                symbols[Group1] = [ Alt_R, Meta_R ] };
   key <LWIN> { [ Alt_L, Meta_L ] };
   key <LCTL> { [ Control_L ] };
   key <RCTL> { [ Control_R ] };
   modifier_map Control { <LALT>, <LCTL>, <RCTL> };
   modifier_map Mod1 { <LWIN>, <RALT> };
   modifier_map Mod4 { <MENU> };
};
Run Code Online (Sandbox Code Playgroud)

我还添加-w0xkbcomp命令中,以避免在打开新 shell 时出现任何警告输出。

xkbcomp -w0 -I$HOME/.xkb $HOME/.xkb/keymap/mykbd $DISPLAY
Run Code Online (Sandbox Code Playgroud)

**在 Mac 和 Linux 之间切换很多,我喜欢在 Linux 上有两个控制键来近似 Mac 键盘的肌肉记忆。