X11

如何將 AltGr+key 綁定到符號?

  • May 13, 2016

我想將AltGr+綁定Wæ以及其他一些組合,我該怎麼做?我也需要AltGr++Shift到.W``Æ

我通常setxkbmap用來更改鍵盤映射。

您可以使用自定義 XKB 映射來實現這一點。我建議您使用 轉儲目前地圖xkbcomp $DISPLAY dump.xkb,對其進行編輯並使用xkbcomp newmap.xkb $DISPLAY. 轉儲文件非常大,並且有很多多餘的資訊。

進行編輯的最簡單方法是查看 altgr 在目前地圖中的使用方式。它通常是 ISO_LEVEL3 修飾符。如果您目前的鍵盤映射不使用 altgr,您可以嘗試載入一個這樣做的,看看它是如何完成的。例如-layout us -variant altgr-intl,它非常廣泛,並且即使不是所有的歐洲鍵也綁定了大多數。以下是正在發生的事情的簡短介紹。

xkb 從核心獲取鍵碼,為每個鍵碼設置一個標籤,並使用該標籤和修飾鍵來決定它應該輸出什麼鍵符。每個鍵都有一個分配給它的類型,它定義了它期望的修飾鍵以及每個組合的輸出。查看您獲得的轉儲xkbcomp:標籤定義在 中xkb_keycodes,類型輸入xkb_types和標籤到密鑰在中xkb_symbols。其中,xkb_symbols您要編輯並參考其他兩個以了解要更改的內容。您也可以只查看xkb_symbols並找到它目前是如何完成的,並根據需要進行編輯。

xkb_types部分為鍵定義保存不同的修飾符級別,您會想要一個具有 altgr 和 shift 模式的修飾符。例子:

type "FOUR_LEVEL_ALPHABETIC" {
   modifiers= Shift+Lock+LevelThree;
   map[Shift]= Level2;
   map[Lock]= Level2;
   map[LevelThree]= Level3;
   map[Shift+LevelThree]= Level4;
   map[Lock+LevelThree]= Level4;
   map[Shift+Lock+LevelThree]= Level3;
   level_name[Level1]= "Base";
   level_name[Level2]= "Shift";
   level_name[Level3]= "Alt Base";
   level_name[Level4]= "Shift Alt";
};

這意味著標記為的鍵FOUR_LEVEL_ALPHABETIC有四種模式。Normal, shift/caps, altgr, altgr-shift 這聽起來像你要找的。

現在你想知道 w 的鍵碼是什麼,如果你還不知道的話。 xev | grep -A2 --line-buffered '^KeyRelease' | sed -n '/keycode /s/^.*keycode \([0-9]*\).* (.*, \(.*\)).*$/\1 \2/p'為您提供您按下的鍵的鍵碼。grep是否可以使輸出更具可讀性。

xkb_keycodes將您獲得的鍵碼與您之前獲得的轉儲映射部分交叉引用。對我來說, w 給出了 keycode 25.less轉儲並以 example 的形式找到正確的<LABEL> = ##;keycode <AD02> = 25;。或者cat dump.xkb| grep ' = 25;'Label 只是 xkb 用於在後面的部分中引用密鑰的名稱。

既然您有了標籤,請轉到xkb_symbols實際上將標籤映射到鍵符的標籤。格式是

key <AD02> {
       type= "FOUR_LEVEL_ALPHABETIC",
       symbols[Group1]= [  w, W, aring, Aring ]
   };

type=是您想要從xkb_types部分中獲得的類型symbols[Group1]=,對於該類型所需的每種模式都有一個鍵符。同樣,這種類型的 normal、shift/caps、altgr、shift-altgr。[Group1],據我所知,這是一種使用多個鍵盤映射的方法,您可以使用您設置的鎖定鍵即時更改。我自己不使用組,所以對我來說一切都是 group1。

要查找您可以在此處使用的所有不同鍵符,請檢查/usr/include/X11/keysymdef.h. 您要查找的兩個符號是aeæ 和AEÆ。

key <AD02> {
       type= "FOUR_LEVEL_ALPHABETIC",
       symbols[Group1]= [  w, W, ae, AE ]
   };

我可能有點囉嗦了。查看Arch Wiki在 XKB 上的頁面,無論您使用什麼作業系統或發行版,它都是好東西。

這很容易做到xmodmap。您可以使用keysym指令來更改與鍵關聯的鍵符。這會影響目前使用任何修飾符組合發送此鍵符的所有鍵。對於普通的可列印字元,四個鍵符分別是裸鍵、帶有Shift的鍵、帶有AltGr的鍵和帶有AltGr+的鍵Shift

keysym A = a A aring Aring
keysym O = o O oslash Ooblique
keysym W = w W ae AE

將這些指令放在一個文件中,例如~/.Xmodmap,然後用 . 載入它們xmodmap ~/.Xmodmap。當您在某些環境中登錄時,呼叫的文件~/.Xmodmap會自動載入(這取決於您的 unix 變體和桌面環境)。

/usr/share/X11/locale/en_US.UTF-8/Compose您可以在或中找到鍵符名稱/usr/include/X11/keysymdef.h(Debian 位置,可能在其他系統上有所不同)。如果您不知道符號的鍵符名稱,您可以使用它的 Unicode 數字:U後跟十六進制數字,例如

keysym W = w W U00e6 U00c6

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