Activating numlock on bootup
控制台
早期启动 (mkinitcpio)
您可以在内核启动后立即在 initramfs 中启用 numlock。这是确保在全盘加密密码输入期间 numlock 依然开启的唯一方法。安装 mkinitcpio-numlockAUR,并在 /etc/mkinitcpio.conf 的 HOOKS 数组中将 numlock mkinitcpio 钩子添加到 encrypt 之前
/etc/mkinitcpio.conf
... HOOKS=(base udev autodetect microcode modconf kms keyboard keymap consolefont numlock block encrypt lvm2 filesystems fsck) ...
然后重新生成 initramfs 使更改生效。
numlock 钩子不适用于基于 systemd 的 initramfs。在这种情况下,您可以安装 mkinitcpio-sd-numlockAUR 并在 mkinitcpio 配置中使用 sd-numlock 钩子。使用此方法的一个优点是,numlock 设置将在随后的启动过程中被复制,且新的虚拟控制台将默认开启 numlock。
使用systemd服务
首先安装 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
这比使用单独的服务更简单,且不需要在脚本中硬编码 VT 的数量。为 getty@.service 创建一个drop-in 片段,该片段将应用于原始单元之上
/etc/systemd/system/getty@.service.d/activate-numlock.conf
[Service] ExecStartPre=/bin/sh -c 'setleds -D +num < /dev/%I'
ExecStartPre 替换为 ExecStartPost,以及/或者禁用如下所述的提示。若要禁用登录屏幕上显示的 numlock 激活提示,请编辑 getty@tty1.service 并在 agetty 选项中添加 --nohints
[Service]
ExecStart=
ExecStart=-/sbin/agetty --noreset --nohints --noclear - ${TERM}
Bash 替代方案
将 setleds -D +num 添加到 ~/.bash_profile。请注意,与其他方法不同,这将直到您登录后才会生效。
X.org
有多种方法可用。
startx
安装 numlockx 软件包并将其添加到 xinitrc 文件的任何 exec 语句之前
~/.xinitrc
numlockx & exec window manager
MATE
默认情况下,MATE 在注销时保存最后状态并在下次登录时恢复。若要在每次登录时启用 numlock,必须更改以下 dconf 属性
$ dconf write org.mate.peripherals-keyboard remember-numlock-state false $ dconf write org.mate.peripherals-keyboard numlock-state 'on'
KDE Plasma
进入 系统设置 > 输入与输出 > 键盘,在 硬件 选项卡中,在 Plasma 启动时开启 NumLock 部分,选择所需的 NumLock 行为。
为了使其生效,请确保 系统设置 > 系统 > 会话 > 背景服务 > 键盘守护进程 (Keyboard Daemon) 已启用。
kcmshell6 kcm_kded(根据需要替换您的 kcmshell 版本)应可打开此菜单。GNOME
运行以下命令
$ 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 中。
GDM
创建以下 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 提供一个初始值。mutter 源代码显示,如果 remember-numlock-state 为 false,则 numlock-state 设置根本不会被触碰,查询函数将直接返回默认的 false 值。
为了防止 GDM 更新 numlock-state 的值(强制执行确定的 numlock 状态),请创建一个 locks 目录并将其锁定,如指南所述
/etc/dconf/db/gdm.d/locks/numlock
/org/gnome/desktop/peripherals/keyboard/numlock-state
并运行以下命令
# dconf update
这是一个通用方法,也适用于 Wayland 上的 GDM。
Xfce
在文件 ~/.config/xfce4/xfconf/xfce-perchannel-xml/keyboards.xml 中,确保以下值被设置为 true
~/.config/xfce4/xfconf/xfce-perchannel-xml/keyboards.xml
<property name="Numlock" type="bool" value="true"/> <property name="RestoreNumlock" type="bool" value="true"/>
keyboards.xml 文件。SDDM
在文件 /etc/sddm.conf 的 [General] 部分,设置 Numlock=on
[General] ... Numlock=on
SLiM
在文件 /etc/slim.conf 中,找到该行并取消注释(删除 #)
/etc/slim.conf
numlock on
OpenBox
在自动启动文件中,添加
~/.config/openbox/autostart
numlockx &
LightDM
请参阅 LightDM#NumLock on by default。
LXDM
在 lxdm.conf 中设置该选项
/etc/lxdm/lxdm.conf
numlock=1
LXQt
在 ~/.config/lxqt/session.conf 中设置该选项
~/.config/lxqt/session.conf
[Keyboard] numlock=true
Wayland
Sway
请参阅 Sway#Activating numlock on startup。
Hyprland
在 ~/.config/hypr/hyprland.conf 中设置该选项
~/.config/hypr/hyprland.conf
input {
numlock_by_default = true
...
}
Labwc
请参阅 Labwc#Activating numlock on startup。
带有 KWIN 的 SDDM (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 所有
DWL
使用 numpad:mac 选项初始化 xkb_rules 结构体
[dwl_source_root]/config.def.h
static const struct xkb_rule_names xkb_rules = {
.options = "numpad:mac",
};