Каждый раз, когда мой компьютер загружается, появляется запрос пароля для расшифровки жесткого диска (Ubuntu использует Plymouth). Я бы хотел использовать цифровую клавиатуру, но, к сожалению, plymouth изменяет статус numlock на off, игнорируя мои настройки BIOS, чтобы включить numlock при загрузке (что немного раздражает). Есть ли какая-то хитрость для сохранения настроек numlock вместо того, чтобы принудительно менять numlock на "on state" вручную?
1 ответ
Plymouth запускается с initrd, задолго до того, как ваши файлы конфигурации в каталоге /etc будут доступны и прочитаны. Доступ к файлам в initrd возможен только тогда, когда plymouth запрашивает пароль для расшифровки корневого раздела.
Ни одно из классических решений для активации numlock с помощью файлов конфигурации mdm, lightdm и т.д. Не будет работать. Потому что эти встречники начинаются после Плимута. Когда я пробовал решения, основанные на "numlockx", ни одно из них не работало. Поэтому я предполагаю, что Plymouth, по крайней мере в последних версиях, запускается до serverX.
После прочтения нескольких man-страниц и множества попыток мне, наконец, удается активировать numlock, когда Плимут запрашивает пароль. Обратите внимание, что я пользователь Mint 17.3 и моему решению могут потребоваться некоторые адаптации в зависимости от дистрибутива Linux (см. Справочные страницы "initramfs-tools" и "setleds"). Mint и Ubuntu очень близки, поэтому описанная ниже процедура может быть идентичной или, по крайней мере, очень похожей.
Я не новичок в Linux, но, тем не менее, я не эксперт фазы "initramfs" ... поэтому я был бы рад любому предложенному улучшению, которое могло бы сделать мой метод более безопасным.
ВНИМАНИЕ: Убедитесь, что вы точно знаете, как запустить свою ОС с альтернативного или резервного копирования initrd, чтобы избежать зависания, если initrd, сгенерированный следующими инструкциями, отказывается загружаться!
Мы будем использовать бинарный файл setleds для активации numlock. Поэтому мы должны быть уверены, что он доступен из образа initrd. Создайте файл "numlock" в каталоге « /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
Двоичный файл setleds будет доступен из initrd в следующий раз, когда мы восстановим "initramfs".
Теперь нам просто нужно написать небольшой скрипт, чтобы использовать setleds для активации numlock ... Основная проблема состоит в том, чтобы выбрать правильное время для выполнения сценария. Если он будет выполнен в ближайшее время, я думаю, что tty, где подсказки Plymouth еще не будут доступны, или конфигурация клавиатуры рискует переопределить статус numlock. Если сценарий будет выполнен после приглашения Плимута, numlock будет активирован слишком поздно ...
Согласно моим собственным экспериментам, все в порядке, если сценарий помещен в каталог "/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.