Keyboard

單使用者模式下的粘滯鍵

  • February 6, 2017

我一直在嘗試找到一種在單使用者模式下啟用粘滯鍵的方法,但我唯一能找到的是在桌面視窗環境中。

有沒有我需要載入的模組之類的?

對於那些最終會問我只能用一隻手打字的人,有時我必須在單使用者模式下工作。

看看這個howto。它說loadkeys理解鍵符,就像SShift, SCtrl, SAlt你可以放在控制台鍵盤映射中的粘性等價物一樣。

這個archlinux 頁面向您展示了該做什麼。基本上,創建一個小的 keymaps 文件,通過粘性等效項覆蓋 shift 等鍵。以下內容可能會為您提供所需的鍵碼集:

dumpkeys |
awk 'NR==1{print}
    $4~"Shift|Control|Alt"{printf "%s %s %s S%s\n",$1,$2,$3,$4}'

範例輸出:

keymaps 0-255
keycode 29 = SControl
keycode 42 = SShift
keycode 54 = SShift
keycode 56 = SAlt
keycode 97 = SControl
keycode 100 = SAlt
keycode 125 = SAlt
keycode 126 = SAlt

將此數據放入文件stickyKeys並載入

sudo loadkeys stickyKeys

archlinux 頁面為您提供了一個合適的 systemd 單元來在啟動時載入它。如果出現問題,您可以showkey在鍵入鍵時顯示每個鍵碼。


我沒有嘗試過,但是當你建構核心時,會編譯一個預設的鍵盤映射。你可以用你想要的替換這個鍵盤映射。如果我們查看drivers/tty/vt/Makefile,我們會看到一條規則defkeymap.o

$(obj)/defkeymap.o:  $(obj)/defkeymap.c

但在目錄中沒有defkeymap.c. 但是有文件defkeymap.c_shipped,似乎KBuild將刪除_shipped建構的後綴。稍後在 Makefile 中有一條註釋和可選規則:

# Uncomment if you're changing the keymap and have an appropriate
# loadkeys version for the map. By default, we'll use the shipped
# versions.
# GENERATE_KEYMAP := 1
ifdef GENERATE_KEYMAP
$(obj)/defkeymap.c: $(obj)/%.c: $(src)/%.map
       loadkeys --mktable $< > $@
endif

所以我們可以看到如何defkeymap.c通過執行從目前的鍵盤映射創建我們自己的文件

dumpkeys | loadkeys --mktable >defkeymap.c

刪除隨附的文件並嘗試建構核心。Usingdumpkeys給出了一個比預設值大得多的表,儘管我不知道為什麼。您可能更喜歡找到目前鍵盤映射的源,例如未壓縮/usr/lib/kbd/keymaps/xkb/gb-intl.map.gz或類似的,使用您的粘性更改進行編輯,然後將此文件提供給loadkeys --mktable.

請注意,一旦您啟動,這個內置的鍵盤映射可能會在早期被您的作業系統用來設置一些標準配置的鍵盤映射的任何機制覆蓋。

引用自:https://unix.stackexchange.com/questions/342595