我想用我的Apple长铝制键盘使用交换Command 和Ctrl键。如何在 Trusty Tahr (14.04) 上使用 一步一步完成此操作xkb
?
笔记:这解决方案对我来说不起作用,因为xkb
替换xmodmap
为13.04 或更早版本。
答案1
这个答案主要基于给出的答案这里。我再次提出并回答这个问题的原因是最后一步,这一步没有得到充分描述。有关更多信息,请xkb
查看这里,这里, 和这里。
在 中创建一个名为 的文件
/usr/share/X11/xkb/symbols
(也可以在 中/etc/X11/xkb/symbols
)altwin2
,其中包含以下映射:// Control is SWAPPED with Win-keys partial modifier_keys xkb_symbols "cmd_n_ctrl" { key <LWIN> { [ Control_L ] }; key <RWIN> { [ Control_R ] }; key <LCTL> { [ Super_L ] }; modifier_map Control { <LWIN>, <RWIN> }; modifier_map Mod4 { <LCTL> }; };
option = symbols
在该部分下插入以下行/usr/share/X11/xkb/rules/evdev
(忽略第一行的警告):altwin2:cmd_n_ctrl = +altwin2(cmd_n_ctrl)
将新选项添加到
/usr/share/X11/xkb/rules/evdev.lst
以下部分option
:altwin2:cmd_n_ctrl Win swapped with Ctrl
如果你不知道你的键盘配置文件在哪里,你可以使用dconf-编辑器,
"altwin2:cmd_n_ctrl"
添加xkb-options
以下org::gnome::桌面::输入源如图所示这里。如果您知道您的配置文件在哪里,您应该在字段中包含新选项,XkbOptions
如下所示:Section "InputClass" Identifier "keyboard-layout" Driver "evdev" MatchIsKeyboard "yes" Option "XkbLayout" "us, ru, ca, fr" Option "XkbOptions" "altwin2:cmd_n_ctrl" EndSection
重新启动或重启
lightdm
以更新更改:sudo restart lightdm
注意:如果直接在布局文件中进行任何更改(即不使用选项),则/var/lib/xkb/
需要删除缓存文件,如下所示这里。
答案2
在 16.04 中,我终于找到了一种方法来解决这个问题。Xmodmap 并非在所有应用程序中都通用,gnome tweak 工具缺少该功能,dconf 编辑自定义 altwin2 键交换(如这里的主要答案)失败,所以我绞尽脑汁,直到我将几个答案组合成这个完整、简单且优雅的解决方案:
gksudo gedit /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 <NMLK> { [ Num_Lock ] };
key <LFSH> { [ Shift_L ] };
key <LCTL> { [ Alt_L ] };
key <LWIN> { [ Super_L ] };
key <RTSH> { [ Shift_R ] };
key <RCTL> { [ Alt_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, Control_L, Control_R ] };
//include "altwin(meta_alt)"
key <LALT> { [ Control_L ] };
key <RALT> { [ Control_R ] };
modifier_map Mod1 { Alt_L, Alt_R, Meta_L, Meta_R };
key <META> { [ NoSymbol, Meta_L, Meta_R ] };
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 ] };
};
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 ] };
};
节省。
rm -rf /var/lib/xkb/*
(我不知道这是否是必需的,但我这样做了。)
重启。
答案3
我可以通过运行命令来让它工作setxkbmap -option ctrl:swap_lwin_lctl
。这将交换左控制键和左命令键。