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効率Linux(Mint 18)でNumLockがオンになっていることを確認する方法は?

答え1

いいえ、これは効率的ではありません。問題は、NumLock 状態を照会するコストが NumLock 状態を設定するコストと同じであることです。したがって、状態を設定する前に照会しようとすると、負荷が2倍になります。

フォーク/実行と解釈のコストを避けることができるので、コンパイルされたCコードを書くことは状況を少し良くするかもしれませんが、それでもひどいハッキングです。

あなたができることは、NumLockをオンに設定してからNumLockキーを無効にすることです(または、必要なのは、テンキーが常に数字の場合はその状態を無視することができます)。

これを見てスーパーユーザーの投稿詳細な方法xmodmap(1)

答え2

最もCPU効率的なアプローチは、NumLock使用を無効にすることです。これにより、xmodmap状態をまったくポーリングする必要はありません。NumLockつまり、CPU時間はまったく使用されません。これは次の方法で行うことができます。

xmodmap -e "remove mod2 = Num_Lock"

再利用したい場合は、次のコマンドで開く

xmodmap -e "add mod2 = Num_Lock"

または~/.Xmodmap、同様の行を含むファイルを作成し、Xの起動がこのファイルを読み取っていることを確認してください(一部の最新のデスクトップ環境では読まれません)。

man xmodmap詳細より。

答え3

我々は発見するコードレビューソリューション:

setxkbmap -option numpad:mac

これまではキーマップが破損していませんでした。

関連情報