web-dev-qa-db-ja.com

Ubuntuの起動時にインタラクティブスクリプトを開始するにはどうすればよいですか?

Ubuntuコア12.04に基づいて、起動可能なDVDを用意しました。起動後(コンソールのみ)、ユーザーとしてログインし、組み込みデバイスをインストールするためのスクリプトを開始できます。

Sudo install_script

起動時にこのスクリプトを実行するために、DVDのルートファイルシステムのイメージの/etc/rc.localに以下を追加しました。

/bin/bash -ic install_script

このスクリプトは無条件で実行されるため、ユーザーにインストールをバイパスしてログインプロンプトを表示する機会を与えたいと思います。そのために、install_scriptでreadを使用したいと思います。残念ながら、スクリプトは/etc/rc.localから実行したときにキーボード入力に反応しません。 (ログイン後にシェルから開始された同じスクリプトで問題はありません)。

起動時にユーザー入力を取得するにはどうすればよいですか?

(いくつかの考え:

  • たぶん、私はどういうわけかttyを検出してreadまたはスクリプトに接続できますか? /bin/bash -ic install_script </dev/consoleを試しましたが無駄になりました。
  • たぶん、/bin/bashまたはreadにもっと適切なオプションがありますか?
  • たぶん、.bashrcSudo install_scriptを呼び出して(sudoのパスワードチェックを回避しますか?)、特定のユーザーの単一のシェル(おそらく、ログインせずにroot?)で起動できますか?
  • たぶん、スクリプトを呼び出すためのより良い場所がありますか?
  • 次の理由で、インタラクション(以前に発生する)とinstall_script(たとえば、isolinuxを介して異なるブートオプションを提供し、スクリプトで/proc/cmdlineを調べることによって)を分離したくありません。ユーザーに尋ねる前に、システムを調べて、インストール中に正確に何が起こるかについての概要を説明したいと思います。起動プロセスの初期段階では、システムの検査に必要な情報がまだ簡単に入手できない場合があります。

5

現在のソリューションでは、openvtを使用してinstall_scriptに次の行を追加して\etc\rc.localを開始しています。

openvt -s -w /path/to/install_script
  • 新しい仮想端末を開きます(Alt-F[1-7]を介してUbuntuCore 12.04で利用可能な他の7つを除く)。
  • スイッチ-sは、openvtに(Alt-F8を押さずに)新しい仮想端末に切り替えるように指示します。
  • Switch -wは、openvtに与えられたコマンド/path/to/install_scriptの完了をopenvtに待機させます。
  • このように開始すると、スクリプトは通常どおりreadを呼び出すことでユーザーから入力を取得できます。
  • スクリプトが終了すると、仮想端末が閉じられ(Alt-F8を使用してスクリプトに切り替える必要がなくなります)、以前にアクティブだった仮想端末に制御が戻ります。
4

ラズパイのカスタムディストリビューションで作業しているときに、同じ問題が発生しました。次のコードをスクリプトに追加すると、スクリプトが確実に入力を受け取ることができることがわかりました。

入力を読み始める前に、このコードを呼び出すだけです。

exec < /dev/tty1
0
Phil