![尝试使用 xkg 将我的左 SUPER 键(也称为 WINDOWS 键)重新映射到左或右 CONTROL 键](https://linux22.com/image/1150272/%E5%B0%9D%E8%AF%95%E4%BD%BF%E7%94%A8%20xkg%20%E5%B0%86%E6%88%91%E7%9A%84%E5%B7%A6%20SUPER%20%E9%94%AE%EF%BC%88%E4%B9%9F%E7%A7%B0%E4%B8%BA%20WINDOWS%20%E9%94%AE%EF%BC%89%E9%87%8D%E6%96%B0%E6%98%A0%E5%B0%84%E5%88%B0%E5%B7%A6%E6%88%96%E5%8F%B3%20CONTROL%20%E9%94%AE.png)
我尝试阅读并理解这一点:https://www.charvolant.org/doug/xkb/html/node5.html
作为测试,由于我的布局在 /usr/share/X11/xkb/symbols/pl 文件中是“Polish, Programmer”,所以我尝试将“q”字符重新映射到“x”,并且效果很好。
但我想要的是将 LWIN(Left Super)重新映射到 Left Control。
所以我尝试了这个:我开始编辑 /usr/share/X11/xkb/symbols/pc 文件,假设这是所有其他文件的“根”。注释掉此行:
//key <LWIN> { [ Super_L ] };
并添加了这个:
key <LWIN> { [ Control_L ] };
并重新启动 PC,但无济于事。例如 LWIN + C,不会将文本编辑器中的选定文本复制到剪贴板,而只会生成“c”字母。在终端中,它不会停止当前程序,而是只会生成“c”字母。
这是我的配置文件: https://gist.github.com/anonymous/49514ddf6f03ba87babaab51e2d5eff4
当我尝试 xev 命令然后按下左 Control 键时,我看到以下内容:
KeyPress event, serial 40, synthetic NO, window 0x5a00001,
root 0x7e, subw 0x0, time 1053321, (374,-259), root:(374,545),
state 0x0, keycode 133 (keysym 0xffe3, Control_L), same_screen YES,
XKeysymToKeycode returns keycode: 37
XLookupString gives 0 bytes:
XmbLookupString gives 0 bytes:
XFilterEvent returns: False
KeyRelease event, serial 40, synthetic NO, window 0x5a00001,
root 0x7e, subw 0x0, time 1053425, (374,-259), root:(374,545),
state 0x0, keycode 133 (keysym 0xffe3, Control_L), same_screen YES,
XKeysymToKeycode returns keycode: 37
XLookupString gives 0 bytes:
XFilterEvent returns: False
顺便说一句。Ask ubuntu 向我推荐了两个类似问题的链接,但它们很旧,并建议使用 xmodmap,而且据我所知,这不再是 Ubuntu >= 16.04 (Xenial) 上的正确答案,而这正是我所拥有的版本。
BTW2. 我真的很想避免使用像 Xbindkeys 这样的应用程序,因为它有一个内置的解决方案,我想我几乎理解了,并且已经花了一些时间尝试理解它。
答案1
要暂时更改它,您可以运行以下命令:
setxkbmap -option altwin:ctrl_win
要永久更改它,请打开/etc/default/keyboard
文件进行编辑,更改行
XKBOPTIONS=""
到
XKBOPTIONS="altwin:ctrl_win"
然后重新启动。