Shell-Script
確保 NumLock 處於開啟狀態的 CPU 效率最高的方法是什麼?
*情況:*我有一個監視 NumLock 狀態的腳本,不是真的在看,而是每 1 秒打開一次。該腳本在後台執行。
*推理:*我經常不小心關閉了NumLock。而且我沒有在鍵盤上顯示 NumLock 狀態。
作業系統,DE,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 效率。
問題:在 Linux (Mint 18) 中確保 NumLock 開啟的CPU 效率最高的方法是什麼?
不,它沒有效率。問題是,查詢 NumLock 狀態的成本與設置 NumLock 狀態的成本相同。因此,如果您在設置狀態之前嘗試查詢狀態,您只會加倍負載。
你可以通過編寫編譯後的 C 程式碼讓它變得更好,因為你可以避免 fork / exec 和解釋成本,但它仍然是一個可怕的 hack。
相反,您可以做的是將 NumLock 設置為打開,然後禁用 NumLock 鍵(如果您想要的只是數字鍵盤始終是數字,甚至可以忽略它的狀態)。
有關如何使用*xmodmap(1)*執行此操作的詳細資訊,請參閱此SuperUser 文章。
最高效的 CPU 方法是禁用
NumLock
usingxmodmap
,然後您根本不需要輪詢NumLock
狀態。換句話說,花費的 CPU 時間為零。這可以通過xmodmap -e "remove mod2 = Num_Lock"
如果你想再次使用它,打開它
xmodmap -e "add mod2 = Num_Lock"
或者,
~/.Xmodmap
使用類似的行創建一個文件,並確保您的 X 啟動讀取該文件(一些現代桌面環境不讀取)。詳情請參閱
man xmodmap
。