systemdを使ってUbuntu起動時にユーザに何かを入力させたい
systemdとは
Linuxの起動処理やサービスの管理をする仕組みです。 今回はOS起動時に、ユーザに何か入力させて、処理をしたいことがあったので、やり方を調べました。 やりたいことのほとんどは下記に書いてありました。
Execute an interactive script at boot with systemd
すぐに試せる手順
(1) 登録したいサービス用のファイルを配置する場所を作成する
# mkdir /usr/lib/systemd/system # cd /usr/lib/systemd/system
(2)simple-window-dialog.serviceを書く
# vi /usr/lib/systemd/system/simple-window-dialog.service
[Unit] Description=Simple interactive dialog window After=getty@tty2.service [Service] Type=oneshot ExecStart=/usr/bin/dialog-hello.sh StandardInput=tty TTYPath=/dev/tty2 TTYReset=yes TTYVHangup=yes [Install] WantedBy=default.target
(3)起動スクリプトを書く
dialogというツールを使います。
# apt install dialog # vi /usr/bin/dialog-hello.sh
#!/bin/sh sleep 5 # このスクリプトが実行される前に他に実行される処理が終わるのを待つ chvt 2 # tty2に変更する dialog --title "Who are you?" --inputbox "Please enter your name:" 19 73 2>name.txt S_NUM=$(cat name.txt) if [ "$S_NUM" = "John Doe" ] then dialog --msgbox "Enjoy your Computer !" 12 30 chvt 1 exit 0 else dialog --msgbox "Sorry, I d'not know about you. See you." 12 30 shutdown -h now sleep 10 fi
(4) 起動スクリプトを実行できるようにする
# chmod 755 /usr/bin/dialog-hello.sh
(5)ブート可能なイメージを作成する。
シンボリックリンクで、有効化することができる /usr/lib/systemd/system/default.target.wants/はあらかじめ作成しておく
# mkdir /usr/lib/systemd/system/default.target.wants/ # ln -sf /usr/lib/systemd/system/simple-window-dialog.service /usr/lib/systemd/system/default.target.wants/simple-window-dialog.service
(6)サービスを有効化する
# systemctl enable simple-window-dialog.service
(7)マシンをリブートして、試す
# reboot
すると次のような画面が表示されて、名前の入力を求められます。 「John Doe」を入力すると、そのまま使える画面に変更されます。 それ以外を入力すると、マシンは終了します。
もし、起動スクリプトを間違っている場合などは、正常に起動できなくなるので、リカバリブートをして 「root Drop to root shell prompt」を選択し、スクリプトを修正します。