情况:我有一个脚本监视 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 -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 方法是禁用NumLock
using ,那么您根本xmodmap
不需要轮询状态。NumLock
换句话说,花费的CPU时间为零。这可以通过以下方式完成
xmodmap -e "remove mod2 = Num_Lock"
如果您想再次使用它,请使用以下命令将其打开
xmodmap -e "add mod2 = Num_Lock"
或者,创建一个~/.Xmodmap
具有类似行的文件,并确保您的 X 启动读取此文件(某些现代桌面环境不会)。
man xmodmap
详情请参阅。