Как заставить службу systemd приостановить загрузку при ожидании ввода данных пользователем?

Как заставить службу systemd приостановить загрузку при ожидании ввода данных пользователем?

Оба режима — чтение и сон (с openvt -w) — выполняются ( read -pотображается сообщение), но не приостанавливают загрузку.

Я перепробовал много комбинаций вариантов /etc/systemd/system/<service>:

Type=oneshot
TimeoutSec=5000
StandardInput=tty

Пример использования — загрузка GUI только после того, как скрипт службы перестает работать. Мне нужно опционально смонтировать sshfs (также несколько вариантов имени пользователя и хоста) как /home до того, как GUI загрузится и «заморозит» /home как локальный раздел (по умолчанию).

решение1

«Приостановка загрузки» не совсем применима к systemd; systemd запускает несколько служб параллельно.

Однако, добавляя «зависимости» к службам, вы по сути можете указать, в какой момент «загрузка должна приостановиться» и дождаться вашей службы.

Для варианта использования выше добавьте /etc/systemd/system/<service>:

[Unit]
Description=commands to run before GUI loads
Before=display-manager.service

Это заставит display-manager.serviceждать <service>. В моем случае, <service>включает в себяпользовательский ввод(для тех читателей, которые не поняли связь), по сути «приостанавливая загрузку».

Ниже также приведен комментарий других комментаторов, высказавших скептицизм:

Для такого рода вещей есть вариант использования — разблокировка зашифрованных разделов. Из-за ошибок в systemd (bugs.freedesktop.org/show_bug.cgi?id=88483) невозможно разблокировать зашифрованный массив Btrfs с несколькими устройствами во время загрузки с помощью встроенного механизма systemd. Вам нужно создать свой собственный файл службы systemd, и в этом ответе был недостающий бит, который мне был нужен в моем файле службы после нескольких часов попыток. Спасибо, argle.

Связанный контент