在 Ubuntu 16.04 中,我使用 xmodmap 重新映射密钥,并将脚本保存到 .sh 文件中,每次启动 Ubuntu 时都会调用该文件。然而,在 Ubuntu 18.04 中,这种方法不太好用。启动 Ubuntu 时,它会按预期重新映射密钥,但是,在暂停并再次登录后,密钥会交换为原始设置。
/usr/share/X11/xkb/symbols/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 ] };
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 <CAPS> { [ Hyper_L ] };
key <NMLK> { [ Num_Lock ] };
key <LFSH> { [ Control_L ] };
key <LCTL> { [ Shift_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 };
所以现在我的左 Shift 键充当 Control 键,而我的左 Control 键充当 Shift 键。每次我启动 Ubuntu 或再次登录时,这都可以正常工作。但我无法让 Caps 键充当 Hyper 键。我得到的结果是,当我按下 Caps 时,Super 键被激活,我真的不明白为什么。也许在某个地方定义了 Super 和 Hyper 一起工作,但我找不到在哪里。
答案1
要使其工作,还需要更改修饰符。这可以通过更改以下部分来完成/usr/share/X11/xkb/symbols/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 ] };
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 ] }; //remove caps lock mapping
key <CAPS> { [ Hyper_L ] }; //add Hyper_L mapping
key <NMLK> { [ Num_Lock ] };
key <LFSH> { [ Control_L ] };
key <LCTL> { [ Shift_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 }; //remove caps modifier
modifier_map Control{ Control_L, Control_R };
modifier_map Mod2 { Num_Lock };
modifier_map Mod3 { Hyper_L, Hyper_R }; //add modifier for Hyper (Mod3)
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 Mod3 { <HYPR> }; //set Hyper modifier to Mod3
// End of modifier mappings.
key <OUTP> { [ XF86Display ] };
key <KITG> { [ XF86KbdLightOnOff ] };
key <KIDN> { [ XF86KbdBrightnessDown ] };
key <KIUP> { [ XF86KbdBrightnessUp ] };
};
保留文件的其余部分。要使此功能正常工作,您必须注销并重新登录。如果您只是暂停或锁定屏幕,则此功能不起作用。
答案2
从几天前开始,这是有效的:
- 在 Wayland 上运行 Ubuntu
- 把这个放到你的 .bashrc 中
setxkbmap -option caps:hyper
setxkbmap -option caps:none
答案3
gnome-tweaks 工具可用于将 CapsLock 变为超级键。