單使用者模式下的粘滯鍵
我一直在嘗試找到一種在單使用者模式下啟用粘滯鍵的方法,但我唯一能找到的是在桌面視窗環境中。
有沒有我需要載入的模組之類的?
對於那些最終會問我只能用一隻手打字的人,有時我必須在單使用者模式下工作。
看看這個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
刪除隨附的文件並嘗試建構核心。Using
dumpkeys
給出了一個比預設值大得多的表,儘管我不知道為什麼。您可能更喜歡找到目前鍵盤映射的源,例如未壓縮/usr/lib/kbd/keymaps/xkb/gb-intl.map.gz
或類似的,使用您的粘性更改進行編輯,然後將此文件提供給loadkeys --mktable
.請注意,一旦您啟動,這個內置的鍵盤映射可能會在早期被您的作業系統用來設置一些標準配置的鍵盤映射的任何機制覆蓋。