启动时打开数字锁定键
您可以在内核启动后立即在 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。
首先安装 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
这个方法比使用单独服务简单,不需要在脚本中写入 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}
将 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'
前往系统设置 > 输入和输出 > 键盘,在键盘标签页的 NumLock 在开机时的状态部分,选择所需的 NumLock 行为。
要使其生效,请确保系统设置 > 系统 > 会话 > 后台服务 > 键盘守护进程已启用。
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
在 ~/.config/hypr/hyprland.conf 中配置:
~/.config/hypr/hyprland.conf
input {
numlock_by_default = true
...
}
创建或编辑 /var/lib/sddm/.config/kcminputrc:
/var/lib/sddm/.config/kcminputrc
[Keyboard] NumLock=0
该文件拥所有者必须为 sddm:sddm。
编辑 /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",
};