XKB:Mode_switchを使用してレイアウトを複数のグループに変更する

XKB:Mode_switchを使用してレイアウトを複数のグループに変更する

deドイツ語のキーボードレイアウトに基づいてカスタムキーボードレイアウト()を作成したいです。アイデアは、Caps-Lockをキーとして2つのレイアウトセットを使用することですMode_switch。リマッピングはに従って動作するようですxev。ただし、2番目のレイアウトセットは機能しません。 [CAPS] + [H]を押すと、-> "h"が表示されます("`"である必要があります)。

これは次のシンボルファイルですde_ext

default
xkb_symbols "basic" {

    include "de"

    name[Group1]="de";
    name[Group2]="de2";

    // the H button should become accent grave when in second group
    override key <AC06> {
        type[Group2]="ALPHABETIC",
        symbols[Group2]= [           grave, grave ]
    };

    override key <CAPS> {         [     Mode_switch, Caps_Lock ] };

};

編集1:

@quixotic そうですね。自分で設定すると実際に動作します。また、de_extファイルをコピーして/usr/share/X11/xkb/実行してみましたが、setxkbmap de_ext効果がありました。

/usr/share/X11/xkb/rules/evdev.xmlただし、レイアウトを追加すると機能しません。

<layout>
  <configItem>
    <name>de_ext</name>
    <shortDescription>xy</shortDescription>
    <description>German extended</description>
    <languageList>
      <iso639Id>ger</iso639Id>
    </languageList>
  </configItem>
</layout>

Ubuntu 17.04タスクバーのレイアウト選択に新しいレイアウトが表示されますが、これを選択すると、上記のようにCAPS-Lockボタンの動作が異なります。動作するのはCAPS-LockがMode_switchであることです(確認しましたxev)。ただし、2番目のグループは[CAPS] + [H]を押しても機能しないため、選択されていないようです。 Ubuntu / Gnomeレイアウトスイッチャーを使用するときにどのような違いがあるのか​​知っていますか?

編集2: 通話中にxkbcomp $DISPLAY broken.xkb次のことを確認しました。

  1. 私のxkb_symbolsの名前は次のとおりです。xkb_symbols "pc+prg+de:2+us:3+inet(evdev)"
  2. 私のレイアウトには2つではなく3つのグループがあります(デフォルトのドイツ語レイアウトには2つのレイアウトがありますが、1つだけが定義されていますsymbols/de)。

    name[group1]="German";
    name[group2]="German";
    name[group3]="English (US)";
    
  3. ほぼすべてのキーに対して3つのグループ/レイアウトがあり、2番目は最初のものと同じで、3番目は英語のキーボードレイアウトです。私が直接修正した文字は含まれません。

    key <AC01> {
        type[group1]= "FOUR_LEVEL_ALPHABETIC",
        type[group2]= "FOUR_LEVEL_ALPHABETIC",
        type[group3]= "ALPHABETIC",
        symbols[Group1]= [               a,               A,              ae,              AE ],
        symbols[Group2]= [               a,               A,              ae,              AE ],
        symbols[Group3]= [               a,               A ]
    };
    
  4. これは私が受け取った手紙Hです。

    key <AC06> {
        type[group1]= "FOUR_LEVEL_ALPHABETIC",
        type[group2]= "ALPHABETIC",
        type[group3]= "ALPHABETIC",
        symbols[Group1]= [               h,               H,         hstroke,         Hstroke ],
        symbols[Group2]= [               h,               H ],
        symbols[Group3]= [               h,               H ]
    };
    
  5. Caps Lock ボタンへの変更が含まれているため、変更は不要です。

私の仮説は、追加のレイアウトを追加のグループとして含めるようにすべてのシンボルを変更する基本(Ubuntu?)xkb構成にいくつかの規則があることです。私のxkbシンボルがこのルールをトリガーするのを防ぐ方法はありますか?

答え1

ついに解決策を見つけました。ファイルに/usr/share/X11/xkb/rules/evdevルールがあります

! model     layout[2]   =   symbols
  *         *           =   +%l[2]%(v[2]):2

これにより、2番目のグループがキーボードのデフォルトレイアウトで上書きされます。次の行を追加することで、この問題(デフォルトのdeキーボードレイアウトがある場合)を解決できました。

! model     layout[2]   =   symbols
  *         de          =   +de

問題の分析に役立つ@quixoticに感謝します。

関連情報