Keyboard-Layout

如何將修飾鍵與 X 上的字元鍵交換?

  • August 8, 2018

我正在嘗試將我left Windows的 -key 與<>|-key 交換。這在 vterm 上工作得非常好,使用的鍵盤映射文件就是這樣做的。但是,我不能讓它在 X 上工作(在 KDE 和 Mate 上都試過——兩者都表現出相同的行為)

無論是我使用xmodmap還是 xkb 符號配置,結果都是一樣的:<>|-key 停止工作, -key 繼續作為那個鍵,但在按下時left Windows還會發出 a 。<

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 鍵的作用與以前完全相同。

儘管我想避免這種情況,但我最終將密鑰程式碼文件中的密鑰交換為 evdev,這具有預期的效果。

臨:

  • 透明地與任何佈局和應用程序一起工作,因為它更改了鍵的事件程式碼

和:

  • 適用於所有 evdev 鍵盤
  • 應用於系統文件的更改(稍後可能會中斷)

差異:

$ diff /usr/share/X11/xkb/keycodes/evdev{,.bak}
8c8
<         <LWIN> = 94;
---
>         <LSGT> = 94;
74c74
<   <LSGT> = 133;
---
>   <LWIN> = 133;

引用自:https://unix.stackexchange.com/questions/461206