如何在 X 上将修饰键与字符键交换?

如何在 X 上将修饰键与字符键交换?

我正在尝试将我的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;

相关内容