![如何在 X 上将修饰键与字符键交换?](https://linux22.com/image/1159530/%E5%A6%82%E4%BD%95%E5%9C%A8%20X%20%E4%B8%8A%E5%B0%86%E4%BF%AE%E9%A5%B0%E9%94%AE%E4%B8%8E%E5%AD%97%E7%AC%A6%E9%94%AE%E4%BA%A4%E6%8D%A2%EF%BC%9F.png)
我正在尝试将左键Windows与<>|键交换。这在 vterm 上使用可以做到这一点的键盘映射文件效果很好。但是,我无法在 X 上使用它(在 KDE 和 Mate 上都试过了 - 两者都表现出相同的行为)
无论我使用xmodmap
还是 xkb 符号配置来执行此操作,结果都是一样的:该<>|键停止工作,左键仍为该键,但在按下时Windows还会发出一个。<
我xev
确定我的<>|钥匙上的代码是 94,而我的左Windows钥匙上的代码是 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;