為什麼我的涉及 AltGr 的 xmodmap 綁定僅適用於某些鍵?
我想重新映射我的 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_Shift
到Mode_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 過度設計和糟糕設計的一個範例,即使將鍵程式碼和修飾符組合映射到符號這樣微不足道的事情也會成為一個問題。這些工具似乎沒有提供一種合理的方法來更改使用者配置中的單個鍵映射而沒有任何副作用。