如何重新映射要删除的 NUMLOCK 键?

Mic*_*era 5 keyboard remapping xkb

由于我的键盘布局,我想永久按下 numlock 并将 numlock 键用作删除键。我似乎无法让它发挥作用。关于如何做到这一点的任何想法将不胜感激。

编辑:我在 Ubuntu 16 上运行

这是我尝试过的:

将 Xmodmap 与 numlockx 结合使用

受到这个问题的启发。我的理解是 xmodmap 已被弃用,所以这可能不是一个好主意。

  • ~/.Xmodmap用线创建一个文件keycode 77 = Delete NoSymbol
  • xmodmap ~/.Xmodmap
  • numlockx on

这允许 numlock 用作删除并启用数字键盘,直到我第一次按下 numlock 键。然后数字锁定键禁用数字键盘。

使用 XKB

  • 编辑/usr/share/X11/xkb/symbols/uskey <NMLK> { [Delete, Num_Lock] };在基本键盘映射结束。
  • 重启电脑

也试过:

  • 编辑/usr/share/X11/xkb/symbols/usreplace key <NMLK> { [Delete, Num_Lock] };在基本键盘映射结束。
  • 重启电脑

这与其他方法存在类似的问题,能够删除作品,但数字锁定键会关闭数字键盘。当启用数字键盘时,它似乎也会与其他键(如 windows 键)混淆。我确实喜欢使用 shift+numlock 控制 numlock。我找不到使用替换和不使用它之间的任何区别。

Mic*_*era 1

这是一种仅使用 xkb 来完成此操作的方法,我认为这优于使用 xmodmap。这个答案比原来的问题包含了更多关于我想要实现的目标的细节。Xmodmap 和 xkb 并不总是能够很好地协同工作,这种方法提供了更多的灵活性:

这全部来自: https: //wiki.archlinux.org/index.php/X_keyboard_extension

有一个似乎可以在这里工作的可用键符号列表:http://docs.ev3dev.org/projects/grx/en/ev3dev-stretch/c-api/input_keysyms.html

这是手动完成的,以便您可以从计算机上已有的配置开始,以防止出现与不同键盘的兼容性问题。先前运行的示例可见于config_files/linux/keyboards

首先运行xkbcomp $DISPLAY output.xkb以获取当前的键盘设置。然后加:

    interpret osfLeft{
        repeat= True;
        action = RedirectKey(keycode=<LEFT>, clearmodifiers=Lock);
    };
    interpret osfRight{
        repeat= True;
        action = RedirectKey(keycode=<RGHT>, clearmodifiers=Lock);
    };
    interpret osfDown{
        repeat= True;
        action = RedirectKey(keycode=<DOWN>, clearmodifiers=Lock);
    };
    interpret osfUp{
        repeat= True;
        action = RedirectKey(keycode=<UP>, clearmodifiers=Lock);
    };
    interpret osfEndLine{
        repeat= True;
        action = RedirectKey(keycode=<END>, clearmodifiers=Lock);
    };
    interpret osfBeginLine{
        repeat= True;
        action = RedirectKey(keycode=<HOME>, clearmodifiers=Lock);
    };
    interpret osfEscape{
        repeat=True;
        action = RedirectKey(keycode=<ESC>, clearmodifiers=Lock);
    };
Run Code Online (Sandbox Code Playgroud)

到生成文件的兼容性部分。

在类型部分的底部添加:

   type "CUST_CAPSLOCK" {
       modifiers= Shift+Lock;
       map[Shift] = Level2;            // Note that this maps Shift only of {Shift,Lock} to Level2. Alt+Shift will be mapped to Level2
       map[Shift+Lock] = Level3;       // but Lock+Shift won't map to Level2 even without this line.
       map[Lock] = Level3;
       level_name[Level1]= "Base";
       level_name[Level2]= "Shift";
       level_name[Level3]= "Lock";
   };
   interpret osfDelete{
       repeat=True;
       action = RedirectKey(keycode=<DELE>, clearmodifiers=Lock);
   };
Run Code Online (Sandbox Code Playgroud)

搜索interpret Caps_Lock并更改LockMods为,SetMods 以便大写锁定仅设置修饰符,而不锁定它。

要允许 capslock + WASD 用作箭头键:编辑键<AD02><AC01><AC02>、以在第三个位置分别键入<AC03>、、、。CUST_CAPSLOCKosfUposfLeftosfDownosfRight

要允许 capslock + HJKL 用作箭头键:编辑键<AC06>, <AC07>, <AC08>,使其在第三个位置分别<AC09>具有 type和, , , 。CUST_CAPSLOCKosfLeftosfDownosfUposfRight

要允许 capslock + 0 注册为 home 和 capslock + $ 注册为 end:编辑键<AE04>和分别在第三个位置<AE10>键入CUST_CAPSLOCK和 hasosfEndLine和。osfBeginLine

要允许大写锁定 + 空格键注册为转义(对于 vim 来说很方便),请将键编辑<SPCE>为 type CUST_CAPSLOCKspace在第二个位置和osfEscape第三个位置都有。

要将numlock键变成删除键,并使capslock + numlock成为<NMLK>have类型CUST_CAPSLOCK,位置一和位置二具有osfDelete,位置三具有Num_Lock

现在使用以下命令将更改后的文件上传回服务器xkbcomp output.xkb $DISPLAY

如果一切正常,将文件放在某处,~/.Xkeymap工作并创建一个脚本,例如命名~/start_keyboard.sh为:

#!/bin/bash

xkbcomp ~/.Xkeymap $DISPLAY
Run Code Online (Sandbox Code Playgroud)

使其可执行 ( chmod u+x ~/start_keyboard.sh) 并将脚本添加到您的启动应用程序中。