Mic*_*era 5 keyboard remapping xkb
由于我的键盘布局,我想永久按下 numlock 并将 numlock 键用作删除键。我似乎无法让它发挥作用。关于如何做到这一点的任何想法将不胜感激。
编辑:我在 Ubuntu 16 上运行
这是我尝试过的:
受到这个问题的启发。我的理解是 xmodmap 已被弃用,所以这可能不是一个好主意。
~/.Xmodmap用线创建一个文件keycode 77 = Delete NoSymbolxmodmap ~/.Xmodmapnumlockx on这允许 numlock 用作删除并启用数字键盘,直到我第一次按下 numlock 键。然后数字锁定键禁用数字键盘。
/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 控制 numlock。我找不到使用替换和不使用它之间的任何区别。
这是一种仅使用 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_CAPSLOCK,space在第二个位置和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) 并将脚本添加到您的启动应用程序中。