Scroll Lock as Caps Lock

我的 Ubuntu /etc/default/keyboard 裡面有這設定:

1
XKBOPTIONS="terminate:ctrl_alt_bksp,ctrl:nocaps"

作用是「外加」一些選擇性的鍵盤設定。其中 terminate:ctrl_alt_bksp 這是 dpkg-reconfigure keyboard-configuration 就有選項可以設定,用途是這三個鍵一起按 就可以跳出 Xorg。而 ctrl:nocaps 則是手動加上,印象中圖形界面也可設定,但很久沒 用已不記得。這選項用途是把 Caps Lock 當成 Left Ctrl 來用。這樣設定的原因是,慣用 的編輯器 Emacs 使用時實在太常按 Ctrl,但筆電上用小指按久了會不舒服,所以用 Caps Lock 來代替。而原先的 Left Ctrl 功能仍然保留,因為外接實體鍵盤時用掌緣壓 Ctrl 很容易, 且筆電上有時仍然會用掌緣按而不用小指。

這樣設定是蠻順手,但仍有個缺點,就是沒有 Caps Lock 可用。比如要定義常數常常是 ALL_CAP_CONST 這種命名,一直按著 Shift 就有點不方便。

想到一個解決方案是拿真的沒在用的 Scroll Lock 當作 Caps Lock,偶爾要用時還有個鍵 可以按,於是想把這設定也做成一個 XKBOPTIONS,步驟如下。

首先新增 /usr/share/X11/xkb/symbols/local

1
2
3
xkb_symbols "sccaps" {
replace key <SCLK> { [ Caps_Lock ] };
};

接下來修改 /usr/share/X11/xkb/rules/evdev,在 ! option = symbols 這段最後面 補上

1
local:sccaps          =       +local(sccaps)

以及 /usr/share/X11/xkb/rules/evdev.lst, /usr/share/X11/xkb/rules/evdev.xml 都按照原先的格式加入 local:sccaps 這選項。最後把 /etc/default/keyboard 那行改為

1
XKBOPTIONS="terminate:ctrl_alt_bksp,ctrl:nocaps,local:sccaps"

重跑 dpkg-reconfigure keyboard-configuration 就生效。