我正在尝试将我的left Windows
-key 与<>|
-key 交换。这在 vterm 上非常有效,使用一个键盘映射文件就可以做到这一点。然而,我无法让它在 X 上工作(在 KDE 和 Mate 上尝试过 - 两者都表现出相同的行为)
无论我使用xmodmap
还是 xkb 符号配置来执行此操作,结果都是相同的:-key<>|
停止工作,并且-key 仍然是该键,但在按下时left Windows
还会发出。<
我xev
确定我的<>|
-key 的代码为 94,我的left Windows
-key 的代码为 133,所以我尝试了以下方法:
xmodmap -e "keycode 133 = less greater bar NoSymbol U0149 brokenbar U266A NoSymbol"
xmodmap -e "keycode 94 = Super_L"
我尝试过的 xkb 符号配置如下所示,并且具有与上述相同的效果:
partial alphanumeric_keys
xkb_symbols "defoo" {
include "de(basic)"
name[Group1] = "German (foo)";
key <LWIN> { [ less, greater, bar, NoSymbol, U0149, brokenbar, U266A, NoSymbol ] };
key <LSGT> { [ Super_L ] };
};
怎么办?我真的需要交换这些钥匙。
编辑:我使用的是 Ubuntu 18.04
编辑:也尝试摆弄修饰键。xmodmap -pm
说我的超级键被分配给 mod4,所以:
xmodmap -e "clear mod4"
然而,这没有任何效果,即 Windows 键的作用与以前完全相同。
答案1
尽管我很想避免这种情况,但我最终将 keycodes 文件中的密钥交换为 evdev,这达到了预期的效果。
专业人士:
- 可与任何布局和应用程序透明地配合使用,因为它会更改按键的事件代码
缺点:
- 适用于所有 evdev 键盘
- 更改应用于系统文件(稍后可能会损坏)
差异:
$ diff /usr/share/X11/xkb/keycodes/evdev{,.bak}
8c8
< <LWIN> = 94;
---
> <LSGT> = 94;
74c74
< <LSGT> = 133;
---
> <LWIN> = 133;