【Scripts】CapsLock Notification on Debian
自從得知 ThinkPad T410 的大寫鍵 Caps Lock 狀態燈離開螢幕下方的 LED 面板的以後,凍仁就一直很依賴右下角的通知(Notification),不是說新的設計不好,但用久了就會發現它早就被左手的小拇指遮住,哪還看得到什麼 LED ..!? 雖說官方早已幫 Windows 寫好 On-screen display(OSD),而 Mac OSX 上也有 CapSee,至於 Linux 上凍仁有找到 lock-keys-applet,但還是不像官方的直覺。
來加工一下唄!
1. 開啟 CompizConfig Settings Manager
2. 新增傾聽 Caps Lock 事件。
圖形化設定:
1. 開啟 應用程式選單 → 系統 → 偏好設定 → CompizConfig Settings Manager
1. 開啟 應用程式選單 → 系統 → 偏好設定 → 鍵盤捷徑鍵(Keyboard Shortcuts)
5. 編輯設定檔
7. 重新啟動 X Windows
註:上圖中的通知圖示皆從 Windows 上的 OSD 擷取,應該不可散佈。
安裝 notification 相關套件
凍仁是透過 notification-daemon 發送訊息來辨別當前的狀態,在開始之前得先安裝發送自訂訊息的套件。jonny@squeeze:~$ sudo aptitude install libnotify-bin [Enter]
程式主體
Google 半天才找到可以透過 xset 來查詢 LED 狀態。jonny@squeeze:~$ xset -q [Enter]Keyboard Control:
auto repeat: on key click percent: 0 LED mask: 00000002
XKB indicators:
00: Caps Lock: off 01: Num Lock: on 02: Scroll Lock: off
03: Compose: off 04: Kana: off 05: Sleep: off
06: Suspend: off 07: Mute: off 08: Misc: off
09: Mail: off 10: Charging: off 11: Shift Lock: off來加工一下唄!
jonny@squeeze:src$ vi capslock_notification.sh [Enter]
1 #!/bin/bash 2 # 用 notify-send 送出訊息時,在不加入單引號以及雙引號的情況下,空格會被當作換行處理 。 3 # Icon 路徑請自行更改。 4 5 if [ $( xset q | grep Caps | awk '{ print $4 }' ) = off ]; then 6 STATUS="'Lock keys' 'Caps-Lock has been disabled'"; 7 echo "notify-send -t '2000' -i $HOME/.icons/lock-keys/capslock_off.png $STATUS" | bash 8 else 9 STATUS="'Lock keys' 'Caps-Lock has been enabled'"; 10 echo "notify-send -t '2000' -i $HOME/.icons/lock-keys/capslock_on.png $STATUS" | bash 11 fi
設定 CapsLock 傾聽
方法一:Compiz
Command Line:1. 開啟 CompizConfig Settings Manager
jonny@squeeze:~$ ccsm & [Enter]
2. 新增傾聽 Caps Lock 事件。
jonny@squeeze:~$ vi $HOME/.config/compiz/compizconfig/Default.ini [Enter]
......
[commands]
......
as_command1 = /usr/local/bin/capslock.sh
as_run_command1_key = Caps_Lock
圖形化設定:
1. 開啟 應用程式選單 → 系統 → 偏好設定 → CompizConfig Settings Manager
![]() |
| 2. 點選自訂指令 |
![]() |
| 3. 輸入程式路徑 |
![]() |
| 4. 自訂啟動熱鍵 |
![]() |
| 5. 設定啟動鍵 |
方法二:gnome-keybinding-properties
基於不是每台 Debian 都會裝 Compiz,補上 Gnome 內建的鍵盤捷徑鍵(Keyboard Shortcuts)手動編輯設定檔方法,GUI 無法直接抓取 Caps Lock 事件。1. 開啟 應用程式選單 → 系統 → 偏好設定 → 鍵盤捷徑鍵(Keyboard Shortcuts)
![]() |
| 2. 新增 Caps Lock 熱鍵 |
![]() |
| 3. 命名並指定路徑 |
![]() |
| 4. 隨便自訂事件,事後再修改 # 註:事件觸發後才會產生新設定檔! |
5. 編輯設定檔
jonny@squeeze:~$ vi $home/.gconf/desktop/gnome/keybindings/custom5/%gconf.xml [Enter]
1 <?xml version="1.0"?> 2 <gconf> 3 <entry name="action" mtime="1299259480" type="string"> 4 <stringvalue>/home/jonny/bin/capslock-notify</stringvalue> 5 </entry> 6 <entry name="name" mtime="1299259480" type="string"> 7 <stringvalue>CapsLock</stringvalue> 8 </entry> 9 <entry name="binding" mtime="1299235446" type="string"> 10<stringvalue><Alt>grave</stringvalue>10 <stringvalue>Caps_Lock</stringvalue> 11 </entry> 12 </gconf>
![]() |
| 6. 修改完會發現 Shortcuts 被 Disabled |
7. 重新啟動 X Windows
jonny@squeeze:~$ sudo /etc/init.d/gdm3 restart [Enter]
![]() |
| 8. 完成 |
成果展示
![]() |
| Caps-Lock ON |
![]() |
| Caps-Lock OFF |
註:上圖中的通知圖示皆從 Windows 上的 OSD 擷取,
資料來源:
★ hardy.dropblog › Trying to detect the state of the caps-lock key in X
★ 用Nofity OSD通知指令工作執行結束 « WMの物語
★ I am LAZY bones ? : xchat的提醒方式蛮丰富的
★ NotifyOSD | Ubuntu Wiki












這個在 PC上也有用嗎?還是有限 NB 及機型?
回覆刪除您只要先用 xset -q 看看有沒有像凍仁那樣的結果,如果一樣了話就 ok!
回覆刪除有機會在找 PC 測試了,畢竟現在手邊只有小黑 XDD
notify-send 的 -t 參數 (expire time) 不是失效了嗎? -t 2000 有用嗎?
回覆刪除我的 Ubuntu 10.10 跟之前的 10.04 都是沒有用的。
在下在 Debian Squeeze 上可以很明顯的感覺出來有差別,ubuntu 的部份手邊只有 11.04,晚點有空重開再測囉 xd
回覆刪除sleep 2000 ; notify-send -i $HOME/.icons/lock-keys/capslock_off.png "$STATUS"
回覆刪除沒有 -t 就用 sleep
Dear:hepha
回覆刪除-t 指的是訊息 show 的延遲時間,而不是過了幾秒才顯示出來唷!
凍仁會想要即時訊息,但又不希望他 show 太久!
Ubuntu 11.04 現在已經有 indicator-keylock 可以用囉!!
回覆刪除Indicator for Lock Keys : T. Scott Barnes
刪除已成功在 Ubuntu 20.04 & 22.04 上,透過 Lock Keys (GNOME Shell Extensions) 啟用大寫鍵 (Caps Lock) & 數字鍵 (Number Lock) OSD (On-screen Display) 功能。
回覆刪除> Lock Keys | GNOME Shell Extensions - https://extensions.gnome.org/extension/36/lock-keys/