由于我的键盘布局,我想让 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
- 使用文件中的以下代码交换键Num_Lock& 。如果尚未分配,请创建文件。Delete
~/.xmodmaprc
xmodmap
根据您的键盘结果更改键码,得到以下代码。
keycode 77 = Delete
keycode 119 = Num_Lock
clear Mod2
add Mod2 = Num_Lock
- 运行命令后检查密钥交换是否有效
xmodmap ~/.xmodmaprc
- 如果交换密钥有效,请为 xmodmap 创建一个启动应用程序,如下所示。
此时您几乎已经实现了您想要的效果,即物理按键看起来如NUMLOCK一样工作DEL,物理按键看起来DEL如 一样工作NUMLOCK。
- 要切换 Numlock 状态的开启和关闭,您需要使用问题中提到的Shift+Physical Key ,这可以通过结合或等来实现,以模拟此阶段的物理键。NUMLOCK
xbindkeys
xte
xdotool
Num_LockDEL
将以下代码粘贴到文件中~/.xbindkeysrc.scm
&重启。如果尚未创建,则创建文件。根据键盘的结果xbindkeys
更改值。通过运行并按下物理键"c:77"
xbindkeys --key
NUMLOCK
(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
分别具有osfUp
、osfLeft
、osfDown
。osfRight
要使 capslock + HJKL 充当箭头键:编辑键<AC06>
、<AC07>
、<AC08>
,<AC09>
使其类型为,并在第三位置CUST_CAPSLOCK
分别具有osfLeft
、osfDown
、osfUp
。osfRight
要使 capslock + 0 注册为 home 并将 capslock + $ 注册为 end:编辑键<AE04>
和以在第三个位置分别<AE10>
输入和具有和。CUST_CAPSLOCK
osfEndLine
osfBeginLine
为了允许 capslock + 空格键注册为退出键(对于 vim 很方便),请编辑键<SPCE>
以键入CUST_CAPSLOCK
,space
在第二个位置和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
)并将脚本添加到您的启动应用程序中。