如何将 NUMLOCK 键重新映射为 DELETE?

如何将 NUMLOCK 键重新映射为 DELETE?

由于我的键盘布局,我想让 numlock 一直处于按下状态,并将 numlock 键用作删除键。我似乎无法实现这一点。如果您能提供任何关于如何实现这一点的建议,我将不胜感激。

编辑:我在 Ubuntu 16 上运行

以下是我尝试过的:

将 Xmodmap 与 numlockx 结合使用

灵感来自这个问题。我的理解是 xmodmap 已被弃用,所以这可能不是一个好主意。

  • ~/.Xmodmap创建包含以下行的文件keycode 77 = Delete NoSymbol
  • 跑步xmodmap ~/.Xmodmap
  • 跑步numlockx on

这样可以让 numlock 发挥删除功能,并启用数字键盘,直到我第一次按下 numlock 键。然后 numlock 键会禁用数字键盘。

使用 XKB

  • 编辑/usr/share/X11/xkb/symbols/us以位于key <NMLK> { [Delete, Num_Lock] };基本键盘映射的末尾。
  • 重启计算机

还尝试过:

  • 编辑/usr/share/X11/xkb/symbols/us以位于replace key <NMLK> { [Delete, Num_Lock] };基本键盘映射的末尾。
  • 重启计算机

这种方法存在与其他方法类似的问题,虽然删除功能有效,但数字锁定键会关闭数字键盘。当启用数字键盘时,它似乎还会干扰其他键,例如 Windows 键。我确实喜欢使用 shift+numlock 来控制数字锁定。我找不到使用替换和不使用它之间的任何区别。

答案1

请观看 30 秒视频https://i.stack.imgur.com/5ogxr.jpg

  1. 使用文件中的以下代码交换键Num_Lock& 。如果尚未分配,请创建文件。Delete~/.xmodmaprcxmodmap

根据您的键盘结果更改键码,得到以下代码。

keycode 77 = Delete
keycode 119 = Num_Lock
clear Mod2
add Mod2 = Num_Lock
  1. 运行命令后检查密钥交换是否有效xmodmap ~/.xmodmaprc
  2. 如果交换密钥有效,请为 xmodmap 创建一个启动应用程序,如下所示。

在此处输入图片描述

此时您几乎已经实现了您想要的效果,即物理按键看起来如NUMLOCK一样工作DEL,物理按键看起来DEL如 一样工作NUMLOCK

  • 要切换 Numlock 状态的开启和关闭,您需要使用问题中提到的Shift+Physical Key ,这可以通过结合或等来实现,以模拟此阶段的物理键。NUMLOCKxbindkeysxtexdotoolNum_LockDEL

将以下代码粘贴到文件中~/.xbindkeysrc.scm&重启。如果尚未创建,则创建文件。根据键盘的结果xbindkeys更改值。通过运行并按下物理键"c:77"xbindkeys --keyNUMLOCK

(xbindkey '(shift "c:77") "xte 'key Num_Lock'")

这意味着当您按下Shift+时NUMLOCK,它会模拟DEL键,从而将 Num_Lock 状态更改为开或关。

在下面的 GIF 中,您可以在左上角看到符号 1 和 Shift,当我按下并释放 Shift+NUMLOCK 键时,符号 1 会切换。

在此处输入图片描述

答案2

这是仅使用 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);
    };

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

在类型部分的底部添加:

   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);
   };

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

要允许 capslock + WASD 作为箭头键使用:编辑键<AD02><AC01><AC02><AC03>使其类型为,并在第三位置CUST_CAPSLOCK分别具有osfUposfLeftosfDownosfRight

要使 capslock + HJKL 充当箭头键:编辑键<AC06><AC07><AC08><AC09>使其类型为,并在第三位置CUST_CAPSLOCK分别具有osfLeftosfDownosfUposfRight

要使 capslock + 0 注册为 home 并将 capslock + $ 注册为 end:编辑键<AE04>和以在第三个位置分别<AE10>输入和具有和。CUST_CAPSLOCKosfEndLineosfBeginLine

为了允许 capslock + 空格键注册为退出键(对于 vim 很方便),请编辑键<SPCE>以键入CUST_CAPSLOCKspace在第二个位置和osfEscape第三个位置有 。

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

现在将更改后的文件上传回服务器:xkbcomp output.xkb $DISPLAY

如果一切正常,请将文件放在某处,~/.Xkeymap然后创建一个名为的脚本~/start_keyboard.sh

#!/bin/bash

xkbcomp ~/.Xkeymap $DISPLAY

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

相关内容