Ubuntu(またはすべてのLinuxディストリビューション)をプリインストールした後、最初の起動中にいくつかのインストールまたは設定が発生するというメッセージ/警告をユーザーに表示したいと思います。残念ながら、セキュリティ制限のため、x11に関連するものは機能しません(ユーザーにrootを表示できない)。
このため、私はダイアログボックスと自己破壊サービス(今まで見つけた最高の方法)を使用することにしました。
サービスは次のスクリプトを実行しようとします(関連がないため、スリープに置き換えられます)。ダイアログボックスの表示、ドライバのインストール(プロビジョニング中にコンパイルできない)、プリンタの追加などを実行するためにtty2に変更しようとしています。
仮想マシン内で仮想マシンを使用すると正常に動作します。残念ながら、マシンではこれは機能しません。 tty2に変更されますが、ログインマネージャに切り替える前に黒い画面のみが表示されます(この場合はスリープモード中)。
これはBefore
-StatementのXDM / SDDMでは機能しますが、GDM3およびでは機能しません。後者と連携する必要があります。。
-StatementにBefore
リストされているディスプレイマネージャといくつかのサービスを追加しようとしましたが、display-manager.service
成功しませんでした。これは gdm3 バイナリ自体の性質によるものです。
質問:サービスが完了するまでgdm/display-manager.serviceの起動をどのように遅らせることができますか?それとも、スクリプトが完了するまで警告を表示するより良い方法はありますか?
提供する
[Unit]
Description=FirstBoot
Wants=network-online.target
[email protected] plymouth-quit.service network.target network-online.target
Before=gdm3.service
Requires=cups.service
[Service]
Type=oneshot
ExecStart=/bin/bash /home/admin00/firstboot.sh
ExecStop=/bin/systemctl disable firstboot.service
ExecStopPost=/bin/sh -c 'rm /etc/systemd/system/firstboot.service'
StandardInput=tty
TTYPath=/dev/tty2
TTYReset=yes
TTYVHangup=yes
[Install]
WantedBy=multi-user.target
スクリプト
#!/bin/bash
ABSOLUTE_PATH="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/$(basename "${BASH_SOURCE[0]}")"
if ! chvt 2 &>/dev/null; then
break
fi
(
sleep 30s
) | dialog --title "IT Afterconfiguration" --infobox "\n P L E A S E\n W A I T\n\n Your system is being configured" 8 40
dialog --no-cancel --no-ok --pause ' Continuing in ...' 6 27 5 --
rm -rf $ABSOLUTE_PATH
答え1
Type=oneshot
あなたのサービスでこれを設定および解除することができますRemainAfterExit=yes
。
Type=oneshot
「準備完了」シグナルは、サービスが完了した後にのみ(開始されません)送信され、サービスのステートメントのためにgdm3
待機する必要があることを確認してください。 (同様に)後でサービスを実行するように設定するには、-ステートメントがBefore=
必要です。RemainAfterExit
active
dead
Type=
詳しくは - 説明をご覧ください。ここ
注:デフォルトType
(設定されていない場合)は、simple
プロセスの開始時に次のプロセス/サービスがリリースされることです。
答え2
私はそれを試してみることにしましたが、After=gdm.service
効果があるようです。起動時にgdmを使用して起動/修正することがあるかもしれませんが、理解することはできません。だから私は同意しましたAfter
- 声明。
これがうまくいくためには、chvt
ログインマネージャのtty1を返すためにスクリプトの最後に他のものを追加する必要がありました。
ExecStartPreにいくつかの省電力モードを追加すると便利です。仮想マシンを使用して並列にテストしてみてください。早すぎない場合は、ログインマネージャに直接戻ります。使用するマシンによって異なると思います。
提供する
# Using gdm/lightdm/lxdm, the dialog script needs to be started After=gdm.service, else you receive a blank screen
# With sddm/xdm you can start the dialog script i.e. Before=sddm.service
[Unit]
Description=FirstBoot
Wants=network-online.target cups.service
[email protected] plymouth-quit.service network.target network-online.target cups.service gdm.service
[Service]
Type=oneshot
ExecStart=/bin/bash /home/admin00/firstboot.sh
ExecStop=/bin/systemctl disable firstboot.service
ExecStopPost=/bin/sh -c 'rm /etc/systemd/system/firstboot.service'
StandardInput=tty
TTYPath=/dev/tty2
TTYReset=yes
TTYVHangup=yes
[Install]
WantedBy=multi-user.target
スクリプト
#!/bin/bash
ABSOLUTE_PATH="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/$(basename "${BASH_SOURCE[0]}")"
#Change to tty2 to display the dialog
if ! chvt 2 &>/dev/null; then
break
fi
(
script stuff
) | dialog --title "IT Afterconfiguration" --infobox "\n P L E A S E\n W A I T\n\n Your system is being configured" 8 40
dialog --no-cancel --no-ok --pause ' Continuing in ...' 6 27 5 --
clear
rm -rf $ABSOLUTE_PATH
#Change back to tty1 / login manager
if ! chvt 1 &>/dev/null; then
break
fi