Xmodmap

為什麼我的涉及 AltGr 的 xmodmap 綁定僅適用於某些鍵?

  • October 7, 2018

我想重新映射我的 AltGR+Right_Windows 但我不知道如何。無論我嘗試什麼,按下右 Windows 鍵都會在按下或不按下右 alt 時發出名稱鍵符。

這些是我現在正在測試的 xmodmap 文件的內容。在我的鍵盤中,38 是“a”的鍵碼,48 是撇號/雙引號的鍵碼,134 是右 windows 鍵的鍵碼。

keycode  38 = 1 2 3 4 5 6 7 8
keycode  48 = 1 2 3 4 5 6 7 8
keycode 134 = 1 2 3 4 5 6 7 8

當我按 Right_Alt+撇號時,它會輸出 5,但 Right_Alt+a 和 Right_Alt+Right_Windows 會給出 1(無論是在按下右 alt 時還是未按下時),這不是我想要的。

我目前的鍵盤佈局是us(alt-intl)正確的 alt 顯然設置為充當 AltGr / Iso_Level3_Shift。的輸出xmodmap -pm如下:

xmodmap:  up to 4 keys per modifier, (keycodes in parentheses):

shift       Shift_L (0x32),  Shift_R (0x3e)
lock        Caps_Lock (0x42)
control     Control_L (0x25),  Control_R (0x69)
mod1        Alt_L (0x40),  Meta_L (0xcd)
mod2        Num_Lock (0x4d)
mod3      
mod4        Super_L (0x85),  Super_R (0x86),  Super_L (0xce),  Hyper_L (0xcf)
mod5        ISO_Level3_Shift (0x5c),  Mode_switch (0xcb)

使用 xmodmap 配置單個鍵映射

是時候寫下我自己的研究結果了。

我認為我一定遺漏了 xmodmap 中的某些內容,而且它的文件記錄不是很好,人們很困惑。但事實證明,關於 XKB 和 xmodmap 的 X.Org 設計只是愚蠢的。

史詩般的失敗:xmodmap

只要這些映射實際存在於您的原始鍵盤佈局中,您就可以使用 xmodmap 重新定義現有映射。在問題中描述的情況下,您不能擴展任何鍵的行為以使用 AltGr。您只能更改已在使用 AltGr 的鍵碼的 AltGr 鍵符。

另見:http ://blog.azundris.com/archives/193-X-treme-pain-XKB-vs-XModMap.html

解決方法:Mode_switch

@Ned64 的回答中描述了此解決方法。AltGr您可以從重新映射ISO_Level3_ShiftMode_switch

我成功使用以下命令行重新映射AltGr.

xmodmap -e 'keycode 108 = Mode_switch'

缺點是它會破壞您目前的鍵盤佈局,但您可以使用xmodmap已經提到的@Ned64 重新創建所有映射。

解決方法:修改鍵盤佈局

我將us(cz_sk_de)其用作我的鍵盤佈局,並嘗試通過為要擴展的鍵添加配置來對其進行修改。

key <AB08>  { [ comma, less, doublelowquotemark, leftdoublequotemark ] };
key <AB09>  { [ period, greater, ellipsis, rightdoublequotemark ] };

(在xkb_symbols "cz_sk_de"部分/usr/share/X11/xkb/symbols/us

只需重置鍵盤佈局即可使用修改後的版本。

setxkbmap 'us(cz_sk_de)'

,現在,您可以 (1) 使用、.和鍵的組合鍵入捷克語和英語引號和省略號Shift和/或 (2) 使用現在定義AltGr的鍵重新映射這些鍵。xmodmap

主要缺點是setxkbmap似乎不支持鍵盤佈局的任意位置,因此您需要寫入系統配置而不是主目錄。

結論

這似乎是 X.Org 過度設計和糟糕設計的一個範例,即使將鍵程式碼和修飾符組合映射到符號這樣微不足道的事情也會成為一個問題。這些工具似乎沒有提供一種合理的方法來更改使用者配置中的單個鍵映射而沒有任何副作用。

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