Como faço o serviço systemd pausar a inicialização ao aguardar a entrada do usuário?

Como faço o serviço systemd pausar a inicialização ao aguardar a entrada do usuário?

Tanto read quanto sleep (with openvt -w) são executados ( read -pa mensagem é exibida), mas não conseguem pausar a inicialização.

Tentei muitas combinações de opções em /etc/systemd/system/<service>:

Type=oneshot
TimeoutSec=5000
StandardInput=tty

Um caso de uso está carregando a GUI somente depois que o script de serviço para de ser executado. Opcionalmente, preciso montar o sshfs (também várias opções de nome de usuário e host) como /home antes que a GUI seja carregada e "congela" /home como partição local (padrão).

Responder1

"Pausar a inicialização" não se aplica exatamente ao systemd; systemd executa vários serviços em paralelo.

No entanto, ao adicionar "dependências" aos serviços, você pode essencialmente especificar em que ponto a "inicialização deve pausar" e aguardar pelo seu serviço.

Para o caso de uso acima, adicione a /etc/systemd/system/<service>:

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

Isso forçará display-manager.servicea esperar <service>. No meu caso, <service>envolveentrada do usuário(para os leitores que não conseguiram a conexão), efetivamente "pausando a inicialização".

Há também um comentário abaixo para outros comentaristas que expressaram ceticismo:

Existe um caso de uso para esse tipo de coisa: desbloquear partições criptografadas. Por causa de bugs no systemd (bugs.freedesktop.org/show_bug.cgi?id=88483) não é possível desbloquear um array Btrfs criptografado para vários dispositivos durante a inicialização usando o mecanismo systemd pronto para uso. Você precisa criar seu próprio arquivo de serviço systemd e esta resposta tinha a parte que faltava em meu arquivo de serviço após horas de tentativas. Obrigado Argle.

informação relacionada