システムデバイスのスクリプトが終了するまで、display-manager.serviceの起動をどのように遅らせることができますか?

システムデバイスのスクリプトが終了するまで、display-manager.serviceの起動をどのように遅らせることができますか?

起動中にリモートからいくつかのキーファイルをインポートできるようにするUbuntu 18 +用のクラウド同期スクリプトを作成しています。 Plymouthのようこそ画面の後、しかしユーザーログイン画面(グラフィック環境の有無にかかわらず)を以前に実行したいと思います。

このアプリケーションでは、コンソールにメッセージを印刷してログインする前にユーザーのキーを押す必要があるため、スクリプトが終了するまでログインを遅らせる必要がありますが、システムサービスデバイスを正しくインポートできないようです。 。

次の例は、非グラフィック環境(systemd default.target = multi-user.target)では機能しますが、グラフィック環境(default.target =graphical.target)では機能しません。私は何を見逃していますか?

[Unit]
Requires=network-online.target
After=network-online.target plymouth-quit-wait.service
[email protected]

[Service]
Type=oneshot
StandardInput=tty
StandardOutput=tty
StandardError=tty
TTYPath=/dev/tty1
ExecStart=/home/user/myscript.sh

[Install]
WantedBy=multi-user.target

答え1

正しい順序はafterplymouth-quit.serviceですがbeforeのようですdisplay-manager.service。これは以前に開始された最後のデバイスですplymouth-quit-wait.service。つまり、有効な場合はディスプレイマネージャを起動します。今後スプラッシュ画面が消えます。

したがって、優先ディスプレイマネージャサービスを追加せずにPlymouthの問題を克服するには、回避策はスクリプトで新しいサービスを実行してtty2仮想端末を切り替えることです。tty2

[Unit]
Requires=network-online.target
After=network-online.target plymouth-quit.service
Before=display-manager.service

[Service]
Type=oneshot
StandardInput=tty
StandardOutput=tty
StandardError=tty
TTYPath=/dev/tty2
TTYReset=yes
TTYVHangup=yes
ExecStart=/path/to/script.sh

[Install]
WantedBy=multi-user.target
#!/bin/bash

# Change the virtual terminal to tty2
# so user can interact with the script and see its output
chvt 2

# do stuff
echo "Hello, world!"

# Change back to tty1
# so user is shown console login,
# or sent to wherever the display manager decides
chvt 1

これはうまくいきますが、スクリプトにロジックを追加したりラッパーを作成したりしない限り、それほどクリーンではありません。tty1たとえば、デスクトップ以外の場所で実行している場合は、実行中またはすでにtty7使用tty2中です。

私のスクリプトは起動時にのみ実行する必要があるので大丈夫でしょう。しかし、全時間にわたってすべてを実行し続けることができる純粋なシステムソリューションがあるか、tty1それについて聞きたいです。default.targetmulti-users.targetgraphical.target

関連情報