跳至內容

为应对本站因各种原因无法访问,建议用户安装 arch-wiki-docs-zh-cnCNRepo 或者 arch-wiki-docs-zh-twCNRepo 离线文档包备用,也可尝试使用经由Cloudflare CDN的替代版本aw.lilydjwg.me

啟動時打開數字鎖定鍵

出自 Arch Linux 中文维基

控制台

[編輯 | 編輯原始碼]

早期啟動 (mkinitcpio)

[編輯 | 編輯原始碼]

您可以在內核啟動後立即在 initramfs 中啟用 numlock。這是確保即使在輸入全盤加密密碼期間 numlock 也開啟的唯一方法。安裝 mkinitcpio-numlockAUR ,並在 /etc/mkinitcpio.conf HOOKS 數組中的 encrypt 之前添加 numlock mkinitcpio 鈎子:

/etc/mkinitcpio.conf
...
HOOKS=(base udev autodetect microcode modconf kms keyboard keymap consolefont numlock block encrypt lvm2 filesystems fsck)
...

然後重新生成鏡像以應用更改。

注意:numlock 鈎子在基於 systemd 的 initramfs 上不起作用。這種情況下,可以安裝 mkinitcpio-sd-numlockAUR 並在 initramfs 配置中使用 sd-numlock

使用此方法的優勢在於,numlock 設置將在後續啟動過程中被複製,並且新的虛擬控制台將默認開啟 numlock。

使用 systemd 服務

[編輯 | 編輯原始碼]

本文或本章節的事實準確性存在爭議。

原因: numlockx 只能用於 X11,不能用於 Wayland。(在 en:Talk:Activating numlock on bootup 中討論)


提示:安裝 systemd-numlockonttyAUR啟用 numLockOnTty 服務可以替代這些步驟。

首先安裝 numlockx

然後創建在特定 TTY 上設置 numlock 的腳本:

/usr/local/bin/numlock
#!/bin/bash

for tty in /dev/tty{1..6}
do
    /usr/bin/setleds -D +num < "$tty";
done

創建好文件後,添加可執行權限,這樣才能運行腳本。

然後創建並啟用 systemd 服務:

/etc/systemd/system/numlock.service
[Unit]
Description=numlock

[Service]
ExecStart=/usr/local/bin/numlock
StandardInput=tty
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

擴展 getty@.service

[編輯 | 編輯原始碼]

這個方法比使用單獨服務簡單,不需要在腳本中寫入 TTY 編號。在原始 gettty 單元文件上添加一段擴展:

/etc/systemd/system/getty@.service.d/activate-numlock.conf
[Service]
ExecStartPre=/bin/sh -c 'setleds -D +num < /dev/%I'

要禁用登錄屏幕上的數字鍵啟用提示,編輯 getty@tty1.service,添加 --nohints 到 agetty 選項:

[Service]
ExecStart=
ExecStart=-/sbin/agetty --noreset --nohints --noclear - ${TERM}

Bash 替代方案

[編輯 | 編輯原始碼]

setleds -D +num 加入到 ~/.bash_profile。需要注意的是,不同於其他方法,這種方式將會在你登錄後才生效。

有許多可選方案:

安裝 numlockx 包,並將其添加到 ~/.xinitrc xinitrc 文件所有 exec 語句前:

~/.xinitrc
numlockx &
exec window manager

MATE 默認會保存上次啟動時的數字鍵盤狀態,要確保每次啟動都啟用:

$ dconf write org.mate.peripherals-keyboard remember-numlock-state false
$ dconf write org.mate.peripherals-keyboard numlock-state 'on'

KDE Plasma

[編輯 | 編輯原始碼]

前往系統設置 > 輸入和輸出 > 鍵盤,在鍵盤標籤頁的 NumLock 在開機時的狀態部分,選擇所需的 NumLock 行為。

要使其生效,請確保系統設置 > 系統 > 會話 > 後台服務 > 鍵盤守護進程已啟用。

注意:如果在 KDE Plasma 中無法通過系統設置訪問後台服務部分,運行 shell 命令 kcmshell6 kcm_kded(必要時替換為您的 kcmshell 版本)應該會顯示此菜單。

運行下面命令:

$ gsettings set org.gnome.desktop.peripherals.keyboard numlock-state true

要記住上次的 numlock 狀態:

$ gsettings set org.gnome.desktop.peripherals.keyboard remember-numlock-state true

或者也可以將 numlockx on(來自 numlockx)添加到啟動腳本或 ~/.profile 中。

創建以下 dconf 配置文件:

/etc/dconf/db/gdm.d/90-numlock
[org/gnome/desktop/peripherals/keyboard]
remember-numlock-state=true
numlock-state=true

根據 gsettings 定義remember-numlock-state 決定是否記住並恢復上次的 numlock 狀態,而 numlock-state 提供的是上次的 numlock 狀態。mutter 源代碼表明,如果 remember-numlock-state 為 false,則 numlock-state 設置根本不會被觸及,查詢函數將直接返回默認值 false。

若要阻止 GDM 更新 numlock-state 的值(強制一個確定的 numlock 狀態),用 GNOME 指南所述的方式創建一個 locks 目錄並鎖定該鍵,所述:

/etc/dconf/db/gdm.d/locks/numlock
/org/gnome/desktop/peripherals/keyboard/numlock-state

然後運行以下命令:

# dconf update

這是一種通用方法,也同樣適用於 Wayland 上的 GDM。

~/.config/xfce4/xfconf/xfce-perchannel-xml/keyboards.xml 中確保以下值設定為 true:

<property name="Numlock" type="bool" value="true"/>
<property name="RestoreNumlock" type="bool" value="true"/>
注意:如果文件不存在,可以通過設置 > 鍵盤 中的啟動時恢復數字按鍵狀態進行配置,它會自動創建 keyboards.xml

/etc/sddm.conf配置文件中, 在[General]部分中添加以下行:

[General]
Numlock=on

取消文件/etc/slim.conf中如下行的注釋(刪除#):

#numlock             on

在文件 ~/.config/openbox/autostart 中加入如下內容:

numlockx &

參見 LightDM#NumLock on by default.

/etc/lxdm/lxdm.conf 中設置:

numlock=1

~/.config/lxqt/session.conf 中設置:

[Keyboard]
numlock=true

參見 Sway#啟動時啟用 NumLock

~/.config/hypr/hyprland.conf 中配置:

~/.config/hypr/hyprland.conf
input {
  numlock_by_default = true
  ...
}

參見 Labwc#啟動時啟用 numlock英語Labwc#Activating numlock on startup

SDDM 啟動 KWin(KDE Plasma)

[編輯 | 編輯原始碼]

創建或編輯 /var/lib/sddm/.config/kcminputrc

/var/lib/sddm/.config/kcminputrc
[Keyboard]
NumLock=0

該文件擁所有者必須為 sddm:sddm

Plasma 登錄管理器

[編輯 | 編輯原始碼]

編輯 /var/lib/plasmalogin/.config/kdedefaults/kcminputrc

/var/lib/plasmalogin/.config/kdedefaults/kcminputrc
[Keyboard]
NumLock=0

該文件的所有者必須為 plasmalogin:plasmalogin

初始化 xkb_rules 結構體時啟用 numpad:mac 選項:

[dwl_source_root]/config.def.h
static const struct xkb_rule_names xkb_rules = {
  .options = "numpad:mac",
};