AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / ubuntu / 问题 / 1131325
Accepted
Michael Sobrepera
Michael Sobrepera
Asked: 2019-04-05 17:10:27 +0800 CST2019-04-05 17:10:27 +0800 CST 2019-04-05 17:10:27 +0800 CST

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

  • 772

由于我的键盘布局,我想永久按下 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 来控制数字锁。我找不到使用替换和不使用替换之间的任何区别。

keyboard xkb remapping
  • 2 2 个回答
  • 2455 Views

2 个回答

  • Voted
  1. UnKNOWn
    2019-04-06T10:43:48+08:002019-04-06T10:43:48+08:00

    请观看 30 秒视频https://imgur.com/3eLhv14

    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的物理键。DELNUMLOCK

    • 要打开和关闭 Numlock 状态,您想使用问题中提到的Shift+Physical Key NUMLOCK,这可以通过xbindkeys结合xte或xdotool等来模拟在此阶段Num_Lock是物理键的键。DEL

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

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

    这意味着当您按下Shift+时NUMLOCK,它会模拟DEL按键,从而更改 Num_Lock 状态 On 和 Off。

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

    在此处输入图像描述

    • 1
  2. Best Answer
    Michael Sobrepera
    2020-01-14T08:16:31+08:002020-01-14T08:16:31+08:00

    这是一种仅使用 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 以便 caps lock 仅设置修饰符,不锁定它。

    要允许 capslock + WASD 用作箭头键:编辑键<AD02>, <AC01>, <AC02>,<AC03>使其分别具有 typeCUST_CAPSLOCK和osfUp, osfLeft, osfDown,osfRight在第三个位置。

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

    要允许 capslock + 0 注册为 home 并允许 capslock + $ 注册为 end:编辑键<AE04>并<AE10>使其具有 type和CUST_CAPSLOCKhave 分别位于第三个位置。osfEndLineosfBeginLine

    要允许 capslock + 空格键注册为转义(对 vim 很方便),请将键编辑为<SPCE>type CUST_CAPSLOCK,space在第二个位置和osfEscape第三个位置。

    将 numlock 键变成 delete 键并使 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) 并将脚本添加到您的启动应用程序。

    • 1

相关问题

  • 有哪些有用的键盘快捷键?[关闭]

  • 如何在 Compiz->Commands 中获得超过 12 个命令?[关闭]

  • 输入语言切换键只接受 shift-alt 而不是 alt-shift [关闭]

  • 如何在键盘上映射未映射的键?[关闭]

  • 如何重置我的键盘布局?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何运行 .sh 脚本?

    • 16 个回答
  • Marko Smith

    如何安装 .tar.gz(或 .tar.bz2)文件?

    • 14 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Martin Hope
    Flimm 如何在没有 sudo 的情况下使用 docker? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve