大寫鎖定 LED 在 Linux 控制台上不起作用

大寫鎖定 LED 在 Linux 控制台上不起作用

當我切換到 TTY 並打開大寫鎖定時,鍵盤上的大寫鎖定 LED 沒有打開。在X上它工作得很好。當我啟動大寫鎖定,然後切換到 TTY,然後按大寫鎖定(在 TTY 上)時,LED 保持亮起(即使 TTY 保留自己的大寫鎖定追蹤)。所以看來 TTY 根本不關心 LED。

我可以以某種方式啟用 TTY 上的 LED 嗎?被迫輸入某些內容而不知道大寫鎖定是否已啟動是非常煩人的。

我正在使用 Debian jessie(經常更新) arch:amd64

答案1

這是一個歷史悠久的 Debian漏洞。它似乎與底層內核有關漏洞這早已被修復了。問題似乎是Caps_Lock不適用於非 ASCII 字符,因此解決方法是將Shift_Lock或映射CtrlL_Lock到大寫鎖定鍵。

在 Debian 方面,該問題是由ckbcomp用於console-setup根據 XKB 鍵盤描述建立控制台鍵盤映射而建立的。請注意,錯誤報告中引用的原始代碼Shift_Lock似乎已被替換為不同的代碼,而是切換為CtrlL_Lock。如果您有興趣,可以broken_caps在 Perl 腳本中搜尋該變數的用法ckbcomp

我不知道該程式碼是否出於任何原因仍然是必要的,也許值得提交錯誤報告。但是,解決方法是添加以下行/etc/kbd/remap,重新啟動後應該可以修復該問題:

s/CtrlL_Lock/Caps_Lock/

或者,要在下次重新啟動之前進行臨時修復,請在會話中執行以下命令tty

dumpkeys | sed s/CtrlL_Lock/Caps_Lock/ | sudo loadkeys

更新

似乎只有在不可用/etc/kbd/remap時才實際使用。setupcon更好的解決方法是將以下行放入/etc/rc.local

dumpkeys | sed s/CtrlL_Lock/Caps_Lock/ | loadkeys

答案2

我找到了 Debian 6 和 Debian 7 的解決方案。

Debian 6

將以下內容放在文件末尾/etc/console-setup/remap.inc

keycode 58 = Caps_Lock

然後運行setupcon

Debian 7

將以下內容放在腳本末尾/etc/default/keyboard

dumpkeys | sed -e "s/keycode  58 = CtrlL_Lock/keycode  58 = Caps_Lock/" | \
   loadkeys 2>&1 >/dev/null

然後運行setupcon

請注意,keycode 和 58 之間有兩個空格/dev/null

相關內容