如何逐步与xkb交换命令和控制键?

我想使用我的Apple长铝键盘和交换的Command Cmd和Control Ctrl键。 如何使用xkb在Trusty Tahr(14.04)上一步一步完成这项工作?

注意: 此解决方案对我不起作用,因为xkb在13.04或更早版本中替换了xmodmap

这个答案主要基于这里给出的答案。 我再次提出并回答这个问题的原因是最后一步,没有完全描述。 有关xkb进一步阅读,请查看此处 , 此处和此处 。

  1. /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  { [ Control_L ] }; key  { [ Control_R ] }; key  { [ Super_L ] }; modifier_map Control { ,  }; modifier_map Mod4 {  }; }; 
  2. /usr/share/X11/xkb/rules/evdevoptions = symbols部分下插入以下行(忽略第一行的警告):

     altwin2:cmd_n_ctrl = +altwin2(cmd_n_ctrl) 
  3. 将新选项添加​​到选项部分下的/usr/share/X11/xkb/rules/evdev.lst

     altwin2:cmd_n_ctrl Win swapped with Ctrl 
  4. 如果您不知道键盘配置文件的位置,可以使用dconf-editor编辑它,在org :: gnome :: desktop :: input-sources下的xkb-options添加"altwin2:cmd_n_ctrl"xkb-options所示。 如果您知道配置文件的位置,则应在XkbOptions字段中包含新选项,如下所示:

     Section "InputClass" Identifier "keyboard-layout" Driver "evdev" MatchIsKeyboard "yes" Option "XkbLayout" "us, ru, ca, fr" Option "XkbOptions" "altwin2:cmd_n_ctrl" EndSection 
  5. 重启或重启lightdm以更新更改:

     sudo restart lightdm 

注意:如果在布局文件中直接进行任何更改,即不使用选项,则需要删除/var/lib/xkb/的缓存文件,如此处所示。

在16.04,这是我最终实现这一目标的方式。 Xmodmap不能在所有应用程序中普遍使用,gnome tweak工具缺少该function,dconf编辑自定义altwin2密钥交换(就像这里的主要答案)失败,所以我把我的头发撕掉,直到我将几个答案合并到这个完整,简单的,优雅的解决方案:

 gksudo gedit /usr/share/X11/xkb/symbols/pc 

将其更改为:

 default partial alphanumeric_keys modifier_keys xkb_symbols "pc105" { key  { [ Escape ] }; // The extra key on many European keyboards: key  { [ less, greater, bar, brokenbar ] }; // The following keys are common to all layouts. key  { [ backslash, bar ] }; key  { [ space ] }; include "srvr_ctrl(fkey2vt)" include "pc(editing)" include "keypad(x11)" key  { [ BackSpace, BackSpace ] }; key  { [ Tab, ISO_Left_Tab ] }; key  { [ Return ] }; key  { [ Caps_Lock ] }; key  { [ Num_Lock ] }; key  { [ Shift_L ] }; key  { [ Alt_L ] }; key  { [ Super_L ] }; key  { [ Shift_R ] }; key  { [ Alt_R ] }; key  { [ Super_R ] }; key  { [ 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  { [ ISO_Level3_Shift ] }; key  { [ Mode_switch ] }; modifier_map Mod5 { ,  }; key  { [ NoSymbol, Control_L, Control_R ] }; //include "altwin(meta_alt)" key  { [ Control_L ] }; key  { [ Control_R ] }; modifier_map Mod1 { Alt_L, Alt_R, Meta_L, Meta_R }; key  { [ NoSymbol, Meta_L, Meta_R ] }; modifier_map Mod1 {  }; key  { [ NoSymbol, Super_L ] }; modifier_map Mod4 {  }; key  { [ NoSymbol, Hyper_L ] }; modifier_map Mod4 {  }; // End of modifier mappings. key  { [ XF86Display ] }; key  { [ XF86KbdLightOnOff ] }; key  { [ XF86KbdBrightnessDown ] }; key  { [ XF86KbdBrightnessUp ] }; }; hidden partial alphanumeric_keys xkb_symbols "editing" { key  { type= "PC_ALT_LEVEL2", symbols[Group1]= [ Print, Sys_Req ] }; key  { [ Scroll_Lock ] }; key  { type= "PC_CONTROL_LEVEL2", symbols[Group1]= [ Pause, Break ] }; key  { [ Insert ] }; key  { [ Home ] }; key  { [ Prior ] }; key  { [ Delete ] }; key  { [ End ] }; key  { [ Next ] }; key  { [ Up ] }; key  { [ Left ] }; key  { [ Down ] }; key  { [ Right ] }; }; 

保存。

 rm -rf /var/lib/xkb/* 

(我不知道这是否必要,但我做到了。)

重启。