Num Lock / Caps Lock Notifications
【摘要】用 BASH 和 Zenity 指令顯示 [Num Lock] 和 [Caps Lock] 鍵的狀態。
【目錄】
【前言】【方法】
【後語】
【前言】
一、本例的筆記型電腦沒有 LED 燈顯示「大寫鍵」和「數字鍵」是否開啟,最早是靠 LXPanel 來顯示。不用 LXPanel 後,就安裝程式來顯示。後來發現根本不需要靠其他程式,只要寫幾個簡短的指令就可以解決了。本文就敘述這些方法。
二、視窗管理員(window manager)通常有一個檔案可以設定快捷鍵,也就是按某一鍵或某些組合鍵即可執行某個動作或檔案。IceWM 和 FluxBox 都叫 keys
檔。如果將上述的幾個簡短指令存成檔案,然後在 keys
檔中設定,按大寫鎖定鍵 [Caps Lock] 或數字鎖定鍵 [Num Lock] 時,分別執行對應的檔案,即可顯示是否開啟「大寫鍵」和「數字鍵」。
三、Linux 系統通常會將「大寫鍵」和「數字鍵」的狀態儲存在某個檔案中。Debian GNU/Linux 10 是在 /sys/class/leds/
目錄內。「大寫鍵」是 input0::capslock/brightness
檔。「數字鍵」是 input0::numlock/brightness
檔。按鍵未開啟時,檔案內容是 0
;開啟時,是 1
。
本例的作業系統是自己組合的 FluxBox Debian GNU/Linux 10。/sys/class/leds/
目錄只是一個連結,其真正的目錄是 /sys/devices/platform/i8042/serio0/input/input0/
。為了簡化,本文用較簡短的連結,而不是真實的路徑。
四、本文曾在 Google 的 Blogger 發表為「Linux Ubuntu 系統鍵盤鎖定的顯示」,當時是用 notify-send
顯示訊息。今在 Debian GNU/Linux 10 系統,改用 Zenity 顯示按鍵的狀態,特分享於此。
五、用 Zenity 顯示通知需有 notification-daemon
程式。因本例的作業系統是自己組合的,當時並未安裝,所以先執行:
sudo apt install notification-daemon
然後在 FluxBox 的 startup 檔增加下行:
/usr/lib/notification-daemon/notification-daemon &
這樣才能使用 Zenity 的 --notification
選項。如果已有此程式,就略過此步驟。
【方法】
一、指令
原理是用 cat
指令取得 brightness
檔的值,再用 BASH 的 if-then-else-fi
顯示不同的狀態。
㈠ 大寫鍵 [Caps Lock]
sleep 0.3 if [ "$(cat /sys/class/leds/input0::capslock/brightness)" = "1" ] then zenity --notification --window-icon=$HOME/.icons/caps1.png --text=" Caps Lock is ON now!" else zenity --notification --window-icon=$HOME/.icons/caps0.png --text=" Caps Lock is OFF now!" fi
將以上指令用 Caps_Lock_status
為檔名儲存起來。
㈡ 數字鍵 [Num Lock]
sleep 0.3 if [ "$(cat /sys/class/leds/input0::numlock/brightness)" = "1" ] then zenity --notification --window-icon=$HOME/.icons/num1.png --text=" Num Lock is ON now!" else zenity --notification --window-icon=$HOME/.icons/num0.png --text=" Num Lock is OFF now!" fi
將以上指令用 Num_Lock_status
為檔名儲存起來。
㈢ 說明
⒈ 一開始的暫緩 0.3 秒,是必需的。因為系統需要時間將狀態寫入檔案。如果發覺按了 [Caps Lock] 或 [Num Lock] 鍵沒有預期的反應,稍微增加一點,例如到 0.5 秒。
⒉ 圖示可有可無。本例用以下四個很簡單的圖示,分別顯示 ON 和 OFF 的狀態。
⒊ 將上述兩檔放在某目錄中,本例是 $HOME/.local/bin/
。
二、keys 檔
「大寫鍵」和「數字鍵」的名稱可用 xev
指令得知。本例是 Caps_Lock
和 Num_Lock
。
在 FluxBox 的 keys 檔中,即可有如下的設定:
Caps_Lock : Exec bash $HOME/.local/bin/Caps_Lock_status Num_Lock : Exec bash $HOME/.local/bin/Num_Lock_status
【後語】
就這樣,很簡單。重新啟動 FluxBox 後,即可使用。