Kali-Linux

在 Kali 中交換 AltGr 和 Space 鍵 - Firefox 不受影響

  • January 9, 2021

在嘗試了幾個關鍵SpaceAltGr重新映射想法之後,改變xkb看起來最有希望。我閱讀並使用了與以下相關的這些想法xkb

Remap altgr key to AC10 in XKB

如何重新映射鍵盤鍵?

乍一看,我的更正似乎在文本編輯器和終端中有效(Space符號印在AltGr按鍵上)。但是,在 Firefox 中它不起作用。仔細觀察,我注意到在所有三個應用程序中,組合鍵AltGr也可以工作(好像沒有進行重新映射),除了在終端和文本編輯器中,組合額外列印空格字元。例如,在終端和 FireFox 中,組合AltGr+F打開文件菜單,在終端中也列印一個空格字元。

Space的壞了,我不使用AltGr。我只想完全交換它們的功能。我錯過了什麼?(我使用 Kali Linux。)

這就是我所做的:

1.Opened/usr/share/X11/xkb/symbols/pc

2.將註釋行更改為以下行:

// key <SPCE> {    [    space      ]   };
key <SPCE> {   [ ISO_Level3_Shift  ]   };

3.添加了這些行:

// Additionally added
key <RALT> {    [    32     ]   };

4.保存了pc文件。

5.清除xkb記憶體執行rm -rf /var/lib/xkb/*

6.重啟


附加資訊(在上面列出的更改之後)。

完整的目前pc文件:

default  partial alphanumeric_keys modifier_keys
xkb_symbols "pc105" {

   key <ESC>  {    [ Escape        ]   };

   // The extra key on many European keyboards:
   key <LSGT> {    [ less, greater, bar, brokenbar ] };

   // The following keys are common to all layouts.
   key <BKSL> {    [ backslash,    bar ]   };
   // key <SPCE> { [    space      ]   };
   key <SPCE> {    [ ISO_Level3_Shift  ]   };

   include "srvr_ctrl(fkey2vt)"
   include "pc(editing)"
   include "keypad(x11)"

   key <BKSP> {    [ BackSpace, BackSpace  ]   };

   key  <TAB> {    [ Tab,  ISO_Left_Tab    ]   };
   key <RTRN> {    [ Return        ]   };

   key <CAPS> {    [ Caps_Lock     ]   };
   key <NMLK> {    [ Num_Lock      ]   };

   key <LFSH> {    [ Shift_L       ]   };
   key <LCTL> {    [ Control_L     ]   };
   key <LWIN> {    [ Super_L       ]   };

   key <RTSH> {    [ Shift_R       ]   };
   key <RCTL> {    [ Control_R     ]   };
   key <RWIN> {    [ Super_R       ]   };
   key <MENU> {    [ Menu          ]   };

   // Beginning of modifier mappings.
   modifier_map Shift  { Shift_L, Shift_R };
   modifier_map Lock   { Caps_Lock };
   modifier_map Control{ Control_L, Control_R };
   modifier_map Mod2   { Num_Lock };
   modifier_map Mod4   { Super_L, Super_R };

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

   key <ALT>  {    [ NoSymbol, Alt_L   ]   };
   include "altwin(meta_alt)"

   key <META> {    [ NoSymbol, Meta_L  ]   };
   modifier_map Mod1   { <META> };

   key <SUPR> {    [ NoSymbol, Super_L ]   };
   modifier_map Mod4   { <SUPR> };

   key <HYPR> {    [ NoSymbol, Hyper_L ]   };
   modifier_map Mod4   { <HYPR> };
   // End of modifier mappings.

   key <OUTP> { [ XF86Display ] };
   key <KITG> { [ XF86KbdLightOnOff ] };
   key <KIDN> { [ XF86KbdBrightnessDown ] };
   key <KIUP> { [ XF86KbdBrightnessUp ] };

   // Additionally added
   key <RALT> {    [    32     ]   };

};

hidden partial alphanumeric_keys
xkb_symbols "editing" {
   key <PRSC> {
   type= "PC_ALT_LEVEL2",
   symbols[Group1]= [ Print, Sys_Req ]
   };
   key <SCLK> {    [  Scroll_Lock      ]   };
   key <PAUS> {
   type= "PC_CONTROL_LEVEL2",
   symbols[Group1]= [ Pause, Break ]
   };
   key  <INS> {    [  Insert       ]   };
   key <HOME> {    [  Home         ]   };
   key <PGUP> {    [  Prior        ]   };
   key <DELE> {    [  Delete       ]   };
   key  <END> {    [  End          ]   };
   key <PGDN> {    [  Next         ]   };

   key   <UP> {    [  Up           ]   };
   key <LEFT> {    [  Left         ]   };
   key <DOWN> {    [  Down         ]   };
   key <RGHT> {    [  Right        ]   };
};

setxkbmap -print:

xkb_keymap {
   xkb_keycodes  { include "evdev+aliases(qwerty)" };
   xkb_types     { include "complete"  };
   xkb_compat    { include "complete"  };
   xkb_symbols   { include "pc+us+inet(evdev)" };
   xkb_geometry  { include "pc(pc105)" };
};

xevAltGr按下並釋放):

KeyPress event, serial 34, synthetic NO, window 0x3400001,
   root 0x6cb, subw 0x0, time 1249191, (168,-8), root:(797,298),
   state 0x0, keycode 108 (keysym 0x20, space), same_screen YES,
   XLookupString gives 1 bytes: (20) " "
   XmbLookupString gives 1 bytes: (20) " "
   XFilterEvent returns: False

KeyRelease event, serial 37, synthetic NO, window 0x3400001,
   root 0x6cb, subw 0x0, time 1249261, (168,-8), root:(797,298),
   state 0x8, keycode 108 (keysym 0x20, space), same_screen YES,
   XLookupString gives 1 bytes: (20) " "
   XFilterEvent returns: False

由於我的鍵盤Space鍵壞了,我無法顯示它的xev.

實際上,即使使用xkeymap,我也可以使用它,我將其留在這裡作為不同的答案,因為該方法與我以前的解決方案完全不同。

也許您錯過了一些AltGr使用情況。

為了模仿您的設置,我使用命令導出了目前配置文件,xkbcomp $DISPLAY current.xkb並通過刪除所有ISO_Level3_Shift,LVL3Mod5出現來編輯它。

準確地說,我刪除的是:

interpret ISO_Level3_Shift+AnyOf(all) {
   virtualModifier= LevelThree;
   useModMapMods=level1;
   action= SetMods(modifiers=LevelThree,clearLocks);
};
interpret ISO_Level3_Shift+AnyOfOrNone(all) {
   action= SetMods(modifiers=LevelThree,clearLocks);
};
key <LVL3> {
   type= "ONE_LEVEL",
   symbols[Group1]= [ ISO_Level3_Shift ]
};
key <RALT> {
   type= "ONE_LEVEL",
   symbols[Group1]= [ ISO_Level3_Shift ]
};
modifier_map Mod5 { <LVL3> };

然後我插入了:

key <LVL3> {[space]};
key <RALT> {[space]};

這個編輯的配置可以通過載入它來測試

xkbcomp new_conf.xkb $DISPLAY

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