Num Lock / Caps Lock Notifications

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 的狀態。

caps_on caps_off num_on num_off

⒊ 將上述兩檔放在某目錄中,本例是 $HOME/.local/bin/


二、keys 檔

「大寫鍵」和「數字鍵」的名稱可用 xev 指令得知。本例是 Caps_LockNum_Lock

在 FluxBox 的 keys 檔中,即可有如下的設定:

Caps_Lock : Exec bash $HOME/.local/bin/Caps_Lock_status
Num_Lock : Exec bash $HOME/.local/bin/Num_Lock_status

【後語】

就這樣,很簡單。重新啟動 FluxBox 後,即可使用。

發表留言