保持NumLock始终打开


29

我的标准键盘在右侧带有数字键(我想它叫104键键盘)。我只想将数字键用作数字键。这就是说,我不想NumLock打开和关闭数字键。

但是,有时会发生数字NumLock锁已关闭的情况(我不知道怎么办,也许是由于我不小心按下了键),我不得不再次按下它。这非常烦人。

是否可以禁用关闭numlock?

换句话说:我希望数字键始终充当数字键,并禁用numlock开关

我正在使用Debian和LXDE(Openbox)。



@MartinVegter您想在这里发布~/.config/openbox/autostart和的内容~/.config/openbox/rc.xml吗?
Risto Salminen

需要一个事件,如果它检测到数字锁已打开,将再次触发数字锁关闭。禁用numlock就像提到的一样容易xmodmap。剩下的唯一问题是如何举办活动……?
2014年

Answers:


7

在阅读完所有答案后,我很惊讶地发现您可以执行以下操作。

<keybind key="Num_Lock">
  <action name="Execute">
    <command>numlockx on</command>
  </action>
</keybind>

因此,每次按时Num,都会禁用数字锁定。它将执行numlockx on,重新激活numlock。

这个名字来自我的输出xev,给了我77键和名字Num_Lock

在@MartinVegters的情况下,他需要等待几秒钟,以便numlockx on在事件Num被处理后一定可以执行。由于在内核中的numlock处理与执行之间存在竞争条件numlockx

对于这种情况,您可以编写一个小的脚本,denumlock.sh例如

#!/bin/sh

sleep "$1"
numlockx on

并在Key绑定中使用它

<command>/bin/sh denumlock.sh 1</command>

这很脏但是可以用。

我推荐以下是我无法测试的内容。您最好遵循建议使用的第一个答案

xmodmap -e 'keycode 77 = Escape'

但是对于LXDE,您需要使用LXDE自动启动机制,该机制与Openbox编辑.NET的方式不同~/.config/openbox/autostart

在LXDE中,您显然需要进行编辑~/.config/lxsession/LXDE/autostart或使用Lubuntu 进行编辑~/.config/lxsession/Lubuntu/autostart,该工具包含用于启动的命令。(请参阅Arch文档LXDE文档)您可能需要创建该文件并添加此行。

@xmodmap -e 'keycode 77 = Escape'

遗憾的是,正如我所说的,我无法测试它是否有效,因为我只有一台运行LXDE的VM。


1
我已经尝试过您的解决方案,<keybind key="Num_Lock">但不幸的是它不起作用。numlockx on执行命令后,<kbd> NumLock </ kbd>仍将其功能零售为numlock。因此,我仍然可以打开/关闭numlock。
Martin Vegter 2014年

至于其他解决方案,使用时xmodmap,当我尝试Risto Salminen建议的解决方案时,该命令有效,但是我丢失了所有键绑定。
Martin Vegter 2014年

@MartinVegter嗯,您可以尝试使用a sleep 3; numlockx on作为键绑定。对于第二种解决方案,您是否尝试过使用自动启动?
拉斐尔·阿伦斯

我不明白为什么,但是甚至sleep 3; /usr/bin/numlockx on不起作用。NumLock仍然充当开/关开关。
Martin Vegter 2014年

@MartinVegter /usr/bin/numlockx on可以在您的系统上运行吗?
拉斐尔·阿伦斯

13

也许是因为我不小心碰到了NumLock钥匙

如果键盘是您自己的(而不是雇主的),则只需将其从键盘上物理移除

如果确实需要,您仍然可以用尖的东西按它。

在此处输入图片说明


4
是的,+ 1。简单就是优雅。
ypercubeᵀᴹ

1
不幸的是,我的NumLuck的默认状态是错误的状态:(
MichaelChirico

6

在我的笔记本电脑键盘(Ubuntu 10.04)上,键盘锁当前处于打开状态。

$ xmodmap -pke|grep 77
keycode  77 = Num_Lock Pointer_EnableKeys Num_Lock Pointer_EnableKeys
keycode 177 = XF86Phone NoSymbol XF86Phone
$ xmodmap -e "keycode 77 ="

瞧!numlock现在已禁用。

xmodmap -e "keycode  77 = Num_Lock Pointer_EnableKeys Num_Lock Pointer_EnableKeys"

再放回去。(也许为Num_lock摸索是一个更好的主意,但是您的主旨是)。

回复@Martin Vegter的评论。

好的,回复您的评论xmodmap破坏了您的绑定,理解。

我刚刚查看了Openbox文档

看看〜/ .config / openbox / lxde-rc.xml

ls -l lxde-rc.xml (您也有rc.xml吗?,请检查)。

将其副本作为备份

(使用编辑器)搜索numlock(也许是nmlk)。

你看到这样的东西吗?

<keybind key="Numlock">
<action name="whatEverItSays"/>
</keybind>

注释掉或更改将键绑定键值更改为其他选项,例如Alt-Numlock进行切换

key="A-Numlock"

例如

注释掉

<!-Commented out from here
    <keybind key="Numlock">
    <action name="whatEverItSays"/>
    </keybind>
To Here -->

要么

更改为Alt + Numlock切换

<keybind key="A-Numlock">
  <action name="whatEverItSays"/>
</keybind>

保存更改并注销/登录或重新启动。


问题是,任何xmodmap命令(即xmodmap -e 'keycode 77 = Escape')都会破坏我现有的键绑定,这些键绑定定义于.config/openbox/lxde-rc.xml
Martin Vegter,2013年

1
我在上面回答过以获得更好的格式。
X天

感谢您的回复。但是,在我的.config/openbox/lxde-rc.xml行中,没有包含Numlock或的行Num_Lock。当我创建一个时,它无效:<keybind key =“ Num_Lock”> <action name =“ Execute”> <command> / bin / true </ command> </ action> </ keybind>
Martin Vegter

1
在主目录中的文件之前,必须先读取另一个配置文件。我建议在两个地方查找/ etc / xdg / openbox和/ usr / share /...。如果这没有帮助,我需要放弃-抱歉。
X田

从3.4.7更改了日志(openbox)“如果无法翻译同一级别的多个绑定,则修复了键绑定丢失(修复了导致Openbox键绑定停止工作的VMWare)”
X Tian

5

使用查找数字锁密码xev。例如,此处的Num_Lock为77。

使用xmodmap重新映射键码:

  • 对于当前的X会话,请在shell中使用xmodmap -e 'keycode 77 = '
  • 为了将来所有的X会话,里面~/.xprofile的地方xmodmap -e 'keycode 77 = '

    编辑:注意:如果软件正在更改Num Lock状态,则该功能无效。


1
该命令xmodmap -e 'keycode 77 = '起作用了,但是却引起了一个严重的问题:我所有的键绑定都停止工作
Martin Vegter 2013年

好吧,您可以尝试将其映射到有效,无害的密钥。就像xmodmap -e 'keycode 77 = Escape'(YMMV,ESC对我来说似乎很安全)。您有〜/ .Xmodmap文件吗?如果是,则将而不是~/.xprofile放在keycode 77 = Escape此文件的末尾。
emp.justine

1
问题是,任何xmodmap命令(即xmodmap -e 'keycode 77 = Escape')都会破坏我现有的键绑定,这些键绑定定义于.config/openbox/lxde-rc.xml
Martin Vegter,2013年

4

只需将NumLock键映射映射为空即可将其删除:首先运行xev并按Num Lock(它可能会显示77),然后运行以下命令:

xmodmap -e "keycode # = """

其中#是NumLock的键控代码。

您还可以将~/.xprofile其禁用以禁用x个会话中的NumLock。


以防我最初的问题不清楚:我不想关闭numlock。我要相反。我想确保它不能关闭(我希望numlock始终打开)
Martin Vegter

啊,我的想法显然有误,谢谢您告诉我。:)我会看看我是否可以改善答案。
Risto Salminen

这对我的系统没有影响:xmodmap -e "remove Lock = Num_Lock"
Martin Vegter 2013年

现在该命令可以使用了,但是它破坏了我所有的键绑定。所有键绑定均停止工作。
Martin Vegter 2013年

好吧,根据对superuser的回答,不应该这样
Risto Salminen

4

键盘选项的图片使用LinuxMint 17.2,我想可以使用其他版本的Ubuntu,请转到键盘设置,然后在该页面上的“布局”中找到一个小的“选项”按钮。

从那里转到“杂项兼容性选项”,然后选中“数字键始终输入数字”

这对我来说是个救星。输入数字并将其移动到页面上的其他位置,这使我烦恼。干杯! ;)


1
这个答案应该有更多的要点!
卡洛斯·甘特

这可以通过也做了命令行setxkbmap -option numpad:mac或通过设置Option "XkbOptions" "numpad:mac"xorg.conf
j123b567

2

这里的其他答案建议使用numlockx onwith xmodmap -e 'keycode 77 =',但numlockx on不能与该xmodmap命令一起在我的系统上使用,显示一条错误消息:

$ numlockx on
X Error of failed request:  BadValue (integer parameter out of range for operation)
  Major opcode of failed request:  132 (XTEST)
  Minor opcode of failed request:  2 (X_XTestFakeInput)
  Value in failed request:  0x0
  Serial number of failed request:  17
  Current serial number in output stream:  20

并且xmodmap -e 'keycode 77 ='由于某种原因,设置也会删除我用进行的所有键绑定xbindkeys

但是,对类似问题的回答对我有所帮助。我的一部分~/.xinitrc

numlockx on
xmodmap -e 'keycode 77 = NoSymbol Num_Lock'

这样,NumLock本身不会执行任何操作,但是如果按下Shift键,则可以达到其原始的目的(大多数是无用的),最重要的是,它不会阻止numlockx on系统运行或破坏我的xbindkeys键绑定。


1

另一种方法,如果要禁用该numlock键,则永久禁用。您可以通过修改键码77来修改当前的键映射文件。

将此值设置为“ none”(无),以便意外按下该键将无效。

使用numlockx在启动时启动,并使用修改后的键盘映射文件中启动脚本例如一个~/.bashrc/etc/profile

注意:我还没有测试过,但是应该可以。


1

在带有KDE的OpenSuse 13.x上,这对我有用:

  • 安装numlockx
  • 添加自定义快捷方式:
    • 自定义快捷方式->编辑->新建->全局快捷方式->命令/ URL:
    • 动作名称:NumLockOn
    • 评论:保持警惕
    • 触发器:设置为NumLockk
    • 动作->命令/ URL:sh -c'sleep 0.5; numlockx on'
    • 点击申请
    • (完成)

如果由于关闭而需要启用NumLock,请使用% numlockx on


这就是我所需要的。在Xubuntu 16.04上工作。
kodmanyagha


0

它可能不是最好的解决方案,但这对我有用:

stdbuf -oL xinput test 11 | mawk -W interactive '$3==77 {printf "/usr/bin/numlockx on\n"}' | bash

其中11是键盘的ID。做一个xinput列表来确定您的键盘ID(在我的情况下是11):

user@host:~$ xinput list
⎡ Virtual core pointer                      id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
⎜   ↳ DualPoint Stick                           id=12   [slave  pointer  (2)]
⎜   ↳ AlpsPS/2 ALPS DualPoint TouchPad          id=13   [slave  pointer  (2)]
⎣ Virtual core keyboard                     id=3    [master keyboard (2)]
    ↳ Virtual core XTEST keyboard               id=5    [slave  keyboard (3)]
    ↳ Video Bus                                 id=6    [slave  keyboard (3)]
    ↳ Sony Vaio Keys                            id=7    [slave  keyboard (3)]
    ↳ Video Bus                                 id=8    [slave  keyboard (3)]
    ↳ Power Button                              id=9    [slave  keyboard (3)]
    ↳ USB 2.0 Camera                            id=10   [slave  keyboard (3)]
    ↳ AT Translated Set 2 keyboard              id=11   [slave  keyboard (3)]

显然,numlockx必须安装该软件才能正常工作。

说明:

  • stdbuf -oL 将输出流的缓冲操作修改为行缓冲
  • xinput test 11 将按下的键打印到标准输出
  • mawk -W interactive '$3==77 {printf "/usr/bin/numlockx on\n"}'对于每行包含77(数字锁定键)的打印行,请构建命令/usr/bin/numlockx on...
  • | bash ...并将其通过管道传送到bash以执行它。

您可以将此oneliner插入桌面环境的初始脚本之一,也可以在后台运行它。


0

我还希望数字小键盘的数字键始终是数字,而不是KP _...东西。

我的解决方案是与Windows repo 一起使用的Remapping Apple Keyboard的一部分。

基本上,它只是将Num_Lock重映射为F20,并将数字重映射为它们自己。

该解决方案始终提供期望的结果,并提供额外的功能键作为附带优势。


-1

创建以下脚本,并使其可执行 chmod +x <filename>

#!/bin/bash
if [ -x /usr/bin/numlockx ];then
/usr/bin/numlockx on
fi

将文件路径放入 .config/openbox/autostart

或者将其作为cron作业,每隔几分钟检查一次,如果关闭了numlocks,则运行脚本。

crontab -e 
*/1 * * * * <path-to-file>

或者只是循环运行脚本。

#!/bin/bash
  x=0
  while [ x -eq 0 ];do
    if [ -x /usr/bin/numlockx ];then
    /usr/bin/numlockx on
    fi
  done

如果您没有numlockx,则应该可以使用 sudo apt-get install numlockx


不,这当然不是一个好的解决方案。抱歉
Martin Vegter

1
你能解释为什么不吗?
13年

1
好吧,因为这是一个非常肮脏的解决方法。它不能解决潜在的问题,只能清除地毯下的症状。
Martin Vegter 2013年

不幸的是,如果xmodmap不起作用,那么您实际上没有其他选择。编写脚本来检查并启用numlock并不能解决所有问题。可以将它视为平衡胖手指的制衡手段。没有副作用,脚本可以随时轻松停止/启动。真的没有那么麻烦的解决方法。我发现您每天使用的程序的实际源代码中所做的事情要糟糕得多。
高度,

您怎么能确定我没有其他选择?
Martin Vegter 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.