确保 NumLock 打开的最有效的 CPU 方法是什么?

确保 NumLock 打开的最有效的 CPU 方法是什么?

情况:我有一个脚本监视 NumLock 状态,并不是真正监视,而是每 1 秒将其打开一次。该脚本在后台运行。

推理:我经常不小心关闭 NumLock。而且键盘上没有 NumLock 状态指示灯。

操作系统、德语、DM、WM xmodmap、:

操作系统

$ lsb_release -a

No LSB modules are available.
Distributor ID: LinuxMint
Description:    Linux Mint 18 Sarah
Release:    18
Codename:   sarah

桌面环境

echo $DESKTOP_SESSION

cinnamon

显示管理器

cat /etc/X11/default-display-manager

/usr/sbin/mdm

窗口管理器

wmctrl -m | head -n 1

Name: Mutter (Muffin)

xmodmap

xmodmap -pm

xmodmap:  up to 4 keys per modifier, (keycodes in parentheses):

shift       Shift_L (0x32),  Shift_R (0x3e)
lock        Caps_Lock (0x42)
control     Control_L (0x25),  Control_R (0x69)
mod1        Alt_L (0x40),  Alt_R (0x6c),  Meta_L (0xcd)
mod2        Num_Lock (0x4d)
mod3      
mod4        Super_L (0x85),  Super_R (0x86),  Super_L (0xce),  Hyper_L (0xcf)
mod5        ISO_Level3_Shift (0x5c),  Mode_switch (0xcb)

我原来的 Bash 脚本如下:

#!/bin/bash

while true
do

  numlockx on

  sleep 1s

done

正如您所看到的,该脚本并不关心 NumLock 的当前状态。它只是不断地打开它。

目标:我想让剧本至少在某种程度上CPU效率

问题:什么是最CPU效率如何确保 NumLock 在 Linux (Mint 18) 中处于打开状态?

答案1

不,这效率不高。问题是,查询 NumLock 状态的成本与设置 NumLock 状态的成本相同。因此,如果您在设置状态之前尝试查询状态,则负载只会增加一倍。

您可以通过编写编译的 C 代码使情况变得更好一些,因为您可以避免 fork / exec 和解释成本,但它仍然是一个可怕的黑客攻击。

您可以做的是将 NumLock 设置为打开,然后禁用 NumLock 键(或者如果您想要的只是数字键盘始终为数字,则甚至忽略它的状态)。

看到这个超级用户帖子详细信息如何做到这一点xmodmap(1)

答案2

最有效的 CPU 方法是禁用NumLockusing ,那么您根本xmodmap不需要轮询状态。NumLock换句话说,花费的CPU时间为零。这可以通过以下方式完成

xmodmap -e "remove mod2 = Num_Lock"

如果您想再次使用它,请使用以下命令将其打开

xmodmap -e "add mod2 = Num_Lock"

或者,创建一个~/.Xmodmap具有类似行的文件,并确保您的 X 启动读取此文件(某些现代桌面环境不会)。

man xmodmap详情请参阅。

答案3

我们发现Code Review的解决方案

setxkbmap -option numpad:mac

到目前为止,我没有看到我的按键映射有任何损坏。

相关内容