ISO_Level5_Shiftを操作するには?

ISO_Level5_Shiftを操作するには?

キーボードレイアウトにさらにレベルを追加したいので、level5キーを有効にすることにしました。レベル3を設定し、MenuRLTをISO_Level5_Shiftにマッピングしたいと思います。

しかし、setxkbmap選択の余地はありません。/usr/share/X11/xkb/rules/evdev.lstlv5スイッチの次のオプションのみが含まれています。

lv5:lsgt_switch_lock
lv5:ralt_switch_lock
lv5:lwin_switch_lock
lv5:rwin_switch_lock

単純なキーマッピングは不可能なようです。これはすでに問題を示唆しています。内部的に何が起こっているのかを知ると、setxkbmaplv5スイッチを有効にして右に設定するオプションを簡単に設定できますAlt

-option "lv5:ralt_switch"

そして、setxkbmapこのオプションを選択して正常に返されたにもかかわらず、マッピングはありません。


同様の質問に対する答えを見つけた後ここカスタムファイルを作成しましたxkbcomp

xkb_keymap {

    xkb_geometry {
        include "pc(pc104)"
    };


    xkb_keycodes {
        include "evdev"
        include "aliases(qwerty)"
    };


    xkb_types {
        include "complete"
    };


    xkb_compatibility {
        include "complete"
        include "ledscroll(group_lock)"
    };


    xkb_symbols {
        include "pc+us+ru:2+inet(evdev)"
        include "group(rctrl_rshift_toggle)"
        include "ctrl(swapcaps)"
        include "keypad(oss)"
        include "kpdl(dot)"
        include "terminate(ctrl_alt_bksp)"
        include "level3(modifier_mapping)"
        include "level3(menu_switch)"
        include "level5(modifier_mapping)"
        include "level5(ralt_switch)"

        key <AB06> {
            type= "EIGHT_LEVEL",
            symbols[Group1]= [               n,               N, n, n, u, i, o, p ],
            symbols[Group2]= [     Cyrillic_te,     Cyrillic_TE, n, n, u, i, o, p ]
        };

    };


};

メニューキーをISO_Level3_Shiftに、RLTをISO_Level5_Shiftに割り当てる必要があります。キーが割り当てられていますが、エラーが発生します。

$ xkbcomp  ~/new.xkbcomp.xkb :0
Error:            Key <MDSW> added to map for multiple modifiers
                  Using Mod3, ignoring Mod5.

xkbcompエラーにもかかわらず、コード0が返されます。

キーマッピングはNレベル5から8まで「u」、「i」、「o」、および「p」を作成する必要がありますが、RLTは8つのレベルすべてに一般的なnとNを送信します(レベル> 4の場合は実際に機能します) )。

このエラーを解決する方法を学びながら、<MDSW>「pc」のルールファイルにエラーが設定されていることがわかりました。

/usr/share/X11/xkb/symbols/pc:

xkb_symbols "pc105" {
    // Fake keys for virtual<->real modifiers mapping:
    key <LVL3> {    [ ISO_Level3_Shift  ]   };
    key <MDSW> {    [ Mode_switch       ]   };
    modifier_map Mod5   { <LVL3>, <MDSW> };
};

ここに別の奇妙な点があります。 pc104キーボードモデルが含まれていますが、このコードはpc105を参照しているため、まったくソースとして提供してはいけません。ところで…xkb_symbols "pc104"見つかりませんでした。この「symbols / pc」ファイルは、Mod *キー割り当てが/usr/share/X11/xkb/設定または変更される<MDSW>唯一のファイルです。他のファイルは "symbols/level5" ファイルで、xkb_symbols "modifier_mapping"

// Ensure a mapping to a real modifier for LevelFive.
partial modifier_keys
xkb_symbols "modifier_mapping" {
  replace key <MDSW> {
    type[Group1] = "ONE_LEVEL",
    symbols[Group1] = [ ISO_Level5_Shift ]
  };
  modifier_map Mod3 { <MDSW> };
};

この衝突により、lv3スイッチとlv5スイッチが同時に動作しなくなる可能性があると思いますが、わかりません。心配しても、もう一つの答えMode_switchキーがMod *キーに存在します。キーをロードした後はnew.xkbcomp.xkbどこにも表示されません。

$  xmodmap -pm
xmodmap:  up to 4 keys per modifier, (keycodes in parentheses):

shift       Shift_L (0x32),  Shift_R (0x3e)
lock        Caps_Lock (0x25)
control     Control_L (0x42),  Control_R (0x69)
mod1        Alt_L (0x40),  Meta_L (0xcd)
mod2        Num_Lock (0x4d)
mod3        ISO_Level5_Shift (0xcb)
mod4        Super_L (0x85),  Super_R (0x86),  Super_L (0xce),  Hyper_L (0xcf)
mod5        ISO_Level3_Shift (0x5c)

ベストアンサー1

以下は、Control_RにISO_Level5_Shiftを適用する作業ソリューションです。同じロジックを適用する必要があります。

  • xevISO_Level5_Shiftに関連付けるキーのキーコードを見つけるには、実行してください。ウィンドウの小さなパニックの上にマウスカーソルを移動してキーを押すと、出力でそのキーコードを見ることができます。私の場合、コードは105です。
  • 第二に、私は逃げたxmodmap。 Control_Rがmod4に関連付けられていることを確認しました。
  • だからxmodmap -e "clear mod4鍵を解いてくれました。すべてのキーが解放されるため、必要に応じて他のキーを再接続する必要があります。
  • 次にxmodmap -e "keycode 105 = ISO_Level5_Shift"Control_Rを修飾子に関連付けます。
  • 最後にxmodmap -e "add mod3 = ISO_Level5_Shift"レベル5を有効にします。

おすすめ記事