在普利茅斯的 cryptdisk 启动密码提示期间保留数字锁定状态

在普利茅斯的 cryptdisk 启动密码提示期间保留数字锁定状态

每次我的电脑启动时,都会提示输入密码来解密硬盘(ubuntu 使用 plymouth)。我想使用数字键盘,但不幸的是,plymouth 将数字锁定状态更改为关闭,忽略了我的 bios 设置以在启动时启用数字锁定(这有点烦人)。是否有任何“技巧”可以保留数字锁定设置,而不是被迫手动将数字锁定更改为“开启状态”?

答案1

Plymouth 从 initrd 启动,远早于 /etc 目录中的配置文件可供访问和读取。当 plymouth 提示输入密码以解密根分区时,只能访问 initrd 内的文件。

使用 mdm、lightdm 等配置文件激活 numlock 的传统解决方案均不起作用。因为这些欢迎程序启动Plymouth。当我尝试基于“numlockx”的解决方案时,它们都不起作用。所以我推测 plymouth,至少在最近的版本中,在 serverX 之前启动。

在阅读了一些手册页并多次尝试后,我终于在 Plymouth 提示输入密码时成功激活了数字锁定。请注意,我是 Mint 17.3 用户,我的解决方案可能需要根据 Linux 发行版进行一些调整(请参阅“initramfs-tools”和“setleds”手册页)。Mint 和 Ubuntu 非常接近,因此实际上下面描述的程序可能相同或至少非常相似。

我不是 Linux 新手,但我也不是“initramfs”阶段的专家……因此,我很高兴能提出任何可以使我的方法更安全的改进建议。

注意:请确保您确切知道如何从备用或备份的 initrd 启动您的操作系统,以避免在按以下指令生成的 initrd 拒绝启动时卡住!

我们将使用 setleds 二进制文件来激活 numlock。因此我们必须确保它在 initrd 映像中可用。在“/etc/initramfs-tools/hooks”目录(或其等效目录,根据您的 Linux 发行版)中包含以下行:

#! /bin/sh -e

PREREQ=""

prereqs () {
    echo "$PREREQ"
}

case $1 in
prereqs)
    prereqs
    exit 0
    ;;
esac

. /usr/share/initramfs-tools/hook-functions

# Add setleds to initrd
if test -x /usr/bin/setleds ; then
   copy_exec /usr/bin/setleds /usr/bin/setleds
fi

exit 0

将此文件标记为可执行文件:

# chmod 0755 numlock

下次我们重建“initramfs”时,就可以从 initrd 内部访问 setleds 二进制文件。

现在,我们只需要编写一个小脚本来使用 setleds 激活数字锁定... 主要问题是选择正确的时间来执行脚本。 如果执行得太早,我猜 Plymouth 提示所在的 tty 尚未可用,或者键盘配置可能会覆盖数字锁定状态。 如果在 Plymouth 提示之后执行脚本,数字锁定将激活得太晚...

根据我自己的实验,如果将脚本放在“/etc/initramfs-tools/scripts/init-top”目录中,并以“console_setup”和“brltty”为先决条件,则一切都正常(不完全确定这些先决条件是否必要,但对我来说是可行的。可能的话,根据“/usr/share/initramfs-tools/scripts/init-top”目录中的键盘配置脚本进行更正)。

只需在您的“/etc/initramfs-tools/scripts/init-top“脚本“numlock”包含以下几行:

#!/bin/sh

PREREQ="console_setup brltty"
prereqs()
{
    echo "$PREREQ"
}
case $1 in
# get pre-requisites
prereqs)
    prereqs
    exit 0
    ;;
esac

if [ -x /usr/bin/setleds ] ; then
   INITTY=/dev/tty[1-8]
   for tty in $INITTY ; do 
       setleds -D +num < $tty 
       done 
fi

exit 0

当然,将此文件标记为可执行文件:

# chmod 0755 numlock

重新构建你的 initrd:

# update-initramfs -u

如果幸运的话,下次启动时,numlock 应该会在 plymouth 提示符下自动激活。注意:我在几台生产计算机上成功复制了此方法。其中只有一台在第一次重启时速度有点慢……但我怀疑这是由于 initramfs 配置文件中的另一个小错误造成的。

相关内容