起動中にリモートからいくつかのキーファイルをインポートできるようにする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.target
multi-users.target
graphical.target