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


9

我想将我的Apple长铝键盘与互换的Command Cmd和Control Ctrl键一起使用。如何使用Trusty Tahr(14.04)逐步完成此操作xkb

注:为解决方案并没有为我工作xkb更换xmodmap13.04甚至更早


1
此解决方案对我不起作用。它很可能已经过时了(实际上我很确定,只是现在找不到参考)。发布之前我确实尝试过。这就是为什么我指定Ubuntu版本。
Aleksandar Savkov 2015年

1
@WaldirLeoncio我希望这可以弄清楚为什么这个问题不是重复的:askubuntu.com/questions/325272/…–
Aleksandar Savkov

Answers:


8

该答案主要基于此处给出的答案。我再次询问和回答此问题的原因是最后一步,但没有完全描述。有关进一步阅读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 <LWIN> {        [       Control_L               ]       };
        key <RWIN> {        [       Control_R               ]       };
        key <LCTL> {       [       Super_L         ]       };
        modifier_map Control { <LWIN>, <RWIN> };
        modifier_map Mod4 { <LCTL> };
    };
    
  2. option = symbols将以下行插入以下部分中/usr/share/X11/xkb/rules/evdev(忽略第一行的警告):

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

    altwin2:cmd_n_ctrl    Win swapped with Ctrl
    
  4. 如果你不知道你的键盘配置文件,您可以使用编辑dconf编辑器,将"altwin2:cmd_n_ctrl"xkb-options下面组织:: GNOME桌面:: ::输入源如图所示这里。如果知道配置文件在哪里,则应在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/需要按此处指示删除其中的缓存文件。


2
应该是!option = symbols部分,而不是部分options = symbols(花费时间搜索“ options =“以找到该部分)。
本·戴维斯


像使用xkb和xmodmap的大多数东西一样,它不起作用,可能以其他方式破坏了我的系统,我讨厌这种废话,我真的希望linux将其废话与关于键映射和绑定的最基本的怪癖结合在一起。
Seph

请记住,这是2014年编写的,不适用于现代发行版。
Aleksandar Savkov

3

在16.04中,这就是我最终使它起作用的方式。Xmodmap不能在所有应用程序中通用运行,gnome调整工具缺少该功能,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/*

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

重启。


感谢那。我将在不久的将来迁移到16.04时对其进行测试。
Aleksandar Savkov

刚在我的16.10升级中使用了此功能。做得很好。
汤姆·默瑟

1
到目前为止,最简单的答案就像在我的Fedora上一样具有魅力。谢谢!
hakunin
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.