跳转到内容

为应对本站因各种原因无法访问,建议用户安装 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",
};