キーボードレイアウトにさらにレベルを追加したいので、level5キーを有効にすることにしました。レベル3を設定し、Menu
RLTをISO_Level5_Shiftにマッピングしたいと思います。
しかし、setxkbmap
選択の余地はありません。/usr/share/X11/xkb/rules/evdev.lst
lv5スイッチの次のオプションのみが含まれています。
lv5:lsgt_switch_lock
lv5:ralt_switch_lock
lv5:lwin_switch_lock
lv5:rwin_switch_lock
単純なキーマッピングは不可能なようです。これはすでに問題を示唆しています。内部的に何が起こっているのかを知ると、setxkbmap
lv5スイッチを有効にして右に設定するオプションを簡単に設定できます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を適用する作業ソリューションです。同じロジックを適用する必要があります。
xev
ISO_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を有効にします。