Xkb

透明地映射修改後的密鑰(使用 xkb)

  • February 10, 2022

我正在嘗試在主鍵盤上模擬數字小鍵盤鍵,但在使用 xkb 時遇到了困難。

如何將 <LWIN> + <AD07> 轉換為“左”?(又名超級+你)

它需要與 Shift、Ctrl 配合使用(理想情況下也是 Alt)。

我最接近的是:

   type "wkafk1" {
       modifiers = Shift+Super;
       map[Shift]= Level2;
       map[Super] = Level3;
       level_name[Level1] = "Base";
       level_name[Level2] = "Shift"; 
       level_name[Level3] = "Fn"; 
   };

...
   key &lt;AD07&gt; {
       type= "wkafk1",
       symbols[Group1]= [               u,               U, Left ]
   };

但是 Shift+Super+u 沒有被處理。

這個也很接近:

   type "wkafk1" {
       modifiers = Shift+Super;
       map[Shift]= Level2;
       map[Super] = Level3;
       map[Shift+Super]=Level4;
       level_name[Level1] = "Base";
       level_name[Level2] = "Shift"; 
       level_name[Level3] = "Fn"; 
       level_name[Level4] = "Fn Shift";
   };
...
   key &lt;AD07&gt; {
       type= "wkafk1",
       symbols[Group1]= [               u,               U, Left, Shift+Left ]
   };

但它沒有編譯,因為我不知道如何發出修改後的符號(不允許使用 Shift+Left)。

我是否需要帶有 action= RedirectKey(…) 的“解釋”語句?

多虧了一些現有技術,以下是步驟:

  1. 創建目前配置的副本:
xkbcomp $DISPLAY custom.xkb
  1. 編輯生成的custom.xkb.
  2. 找到部分的結尾:xkb_types並添加:
    type "wkafk1" {
       modifiers = Shift+Super;
       map[Shift] = level2;
       map[Super] = level3;
       map[Super+Shift] = level3;
       level_name[Level1] = "Base";
       level_name[Level2] = "Caps";
       level_name[Level3] = "Arrows";
    };
  1. &lt;AD07&gt;將section: 中的鍵定義替換xkb_symbols為:
    key &lt;AD07&gt; {
        type= "wkafk1",
        symbols[Group1]= [ u, U, NoSymbol],
        actions[Group1]=[ NoAction(), NoAction(), RedirectKey(key=&lt;LEFT&gt;,clearmods=Super)]
    };
  1. 編譯並使用自定義配置:
xkbcomp custom.xkb $DISPLAY

請注意,這適用於 Shift 和 Ctrl組合鍵。

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