新しいxkb型を定義し、それを特定のレイアウトの基本型にする方法は?

新しいxkb型を定義し、それを特定のレイアウトの基本型にする方法は?

私はハンガリー語、ドイツ語、スロバキア語で大量のテキストを書く必要があるJavaプログラマーです。多くの場合、同時にすべての作業を実行する必要があるため、異なるレイアウト間で継続的に切り替えることは非現実的です。幸いなことに、ハンガリー語のキーボードレイアウトにはすでにすべてに必要なほとんどのシンボルがあり、残りは関連するxkbシンボルファイルを変更して簡単に追加できます。

しかし、これは3番目のレベルの後に必要な多くの役割を隠します。まだ解決していない問題の1つは、3番目のレイヤーにアクセスする方法を定義することです。理想的には、左のAlt + Ctrlを押すか、右のAlt(AltGr)キーを同時に押して3番目のレベルにアクセスできるWindowsの同じ動作をエミュレートしたいと思います。残念ながら、当社が使用しているUbuntu 22.04では、正しいAlt(AltGr)キーを使用してのみこれを実行できます。 Gnome調整には、デフォルト値をさまざまな異なるキーに変更するオプションがありますが、それらのどれも私が望む効果を持っていません。

同様の関連質問を見つけました。AltGrを<Ctrl> + <Alt>にバインドする方法答えの1つは、新しいxkbタイプを作成することでこれを行うことができると提案しましたが、最終的に誰もコードを共有せず、新しいxkbタイプをレイアウトのデフォルトに設定する最後のステップを確実に複製することができませんでした。すべてが動作します。

  • 私は/usr/share/X11/xkb/symbols/huファイルを編集し始めた。key <AE...関連セクション内の項目を変更して、xkb_symbols "102_qwerty_comma_dead"3番目のレベルにいくつかの追加文字を追加することができました。
  • 次に、上記の質問の新しいxkbタイプ定義を私の/usr/share/X11/xkb/types/basicファイルに追加しました。
   default xkb_types "basic" {
           ...
           type "CA_to_L3" {
           modifiers = Control+Alt+Shift;
           map[None] = Level1;
           map[Shift] = Level2;
           map[Control+Alt] = Level3;
           map[Control+Alt+Shift] = Level4;
           level_name[Level1] = "Base";
           level_name[Level2] = "Shift";
           level_name[Level3] = "Alt Base";
           level_name[Level4] = "Shift Alt";
           };
           ...
   }; 
  • key.type="CA_to_L3";最後に、ファイルのセクションに追加しようとしましたが、xkb_symbols "def_common" {...}期待した効果がなく、3番目のレベルが完全に無効になりました。xkb_symbols "102_qwerty_comma_dead" {...}/usr/share/X11/xkb/symbols/hu

  • 同じファイル内の他の場所でも同様の文が使用されていたので、同じ操作を試しましたが、key.type[Group1]="CA_to_L3";結果は同じです。

誰もが私が間違っていることを指摘できますか?次を実行すると、$ setxkbmap -print -verbose 10 次のようになります。

Setting verbose level to 10
locale is C
Trying to load rules file ./rules/evdev...
Trying to load rules file /usr/share/X11/xkb/rules/evdev...
Success.
Applied rules from evdev:
rules:      evdev
model:      pc105
layout:     hu,gb,sk,gb
variant:    102_qwerty_comma_dead,,qwerty,
Trying to build keymap using the following components:
keycodes:   evdev+aliases(qwertz)
types:      complete
compat:     complete
symbols:    pc+hu(102_qwerty_comma_dead)+gb:2+sk(qwerty):3+gb:4+inet(evdev)
geometry:   pc(pc105)
xkb_keymap {
    xkb_keycodes  { include "evdev+aliases(qwertz)" };
    xkb_types     { include "complete"  };
    xkb_compat    { include "complete"  };
    xkb_symbols   { include "pc+hu(102_qwerty_comma_dead)+gb:2+sk(qwerty):3+gb:4+inet(evdev)"   };
    xkb_geometry  { include "pc(pc105)" };
};

これは、デフォルトのxkbタイプを含むxkbタイプが完全にロードされたが、まだ機能が定義されていないことを示しています。

関連情報