Разбивка диска: Единственный шифруемый раздел на весь диск, отданный под корень. Если после установки добавить FEATURES += plymouth в /etc/initrd.mk и включить тему branding-xalt-kworkstation, то запрос на ввод пароля не показывается пользователю. В Fedora ситуация обрабатывается корректно и запрос пароля виден пользователю на экране загрузки.
Но при чем тут plymouth? Он просто показывает картинку. Это все происходит в initrd, значит initrd должен корректно эту ситуацию обрабатывать. В systemd есть специальные утилиты systemd-tty-ask-password-agent (/sbin/systemd-tty-ask-password-agent --watch --plymouth) которые умеют работать с plymouth, но в нашем initrd они не используются. В fedora используются и эти утилиты и systemd внутри initrd, поэтому у них все работает.
Очень печальное будущее у этой фичи, если для правильной работы plymouth нужен systemd и его утилиты. Судя по всему фича уже давно сломана.
Насколько мне известно, в plymouth есть вызов "plymouth ask-for-password", который можно использовать для ввода пароля через plymouth и передачи его куда-либо ещё, например в cryptsetup. Возможно есть и другие вызовы. О зависимостях таких вызовов на systemd мне ничего не известно, т.е. предположительно такой зависимости нет.
Пока что я смог выяснить, что plymouth корректно обрабатывает нажатия клавиш и заполняет буфер тем, что надо. При нажатии Enter показывает соответствующее сообщение (с plymouth.debug) Но в cryptsetup оно не передается и прилетает в него почему-то пустой пароль. В Ubuntu cryptsetup работает через FIFO, в Fedora, я так понимаю, тоже. Но пока не могу найти конкретное место, плюс оно работает через какую-то обёртку. Как оно работает - ещё не разобрался.
PS мы обсуждаем ошибку 38949
В Fedora используется systemd-cryptsetup, который через libcryptsetup занимается разблокировкой дисков. Насколько я понял, сначала отрабатывают правила udev, которые для каждого luks запускают генератор юнитов, в каждом запускается свой systemd-cryptsetup, а он через libcryptsetup занимается расшифровкой.
Должно быть исправлено в 2.11.0.