Ubuntuコア12.04に基づいて、起動可能なDVDを用意しました。起動後(コンソールのみ)、ユーザーとしてログインし、組み込みデバイスをインストールするためのスクリプトを開始できます。
Sudo install_script
起動時にこのスクリプトを実行するために、DVDのルートファイルシステムのイメージの/etc/rc.local
に以下を追加しました。
/bin/bash -ic install_script
このスクリプトは無条件で実行されるため、ユーザーにインストールをバイパスしてログインプロンプトを表示する機会を与えたいと思います。そのために、install_scriptでread
を使用したいと思います。残念ながら、スクリプトは/etc/rc.local
から実行したときにキーボード入力に反応しません。 (ログイン後にシェルから開始された同じスクリプトで問題はありません)。
起動時にユーザー入力を取得するにはどうすればよいですか?
(いくつかの考え:
read
またはスクリプトに接続できますか? /bin/bash -ic install_script </dev/console
を試しましたが無駄になりました。/bin/bash
またはread
にもっと適切なオプションがありますか?.bashrc
がSudo install_script
を呼び出して(sudoのパスワードチェックを回避しますか?)、特定のユーザーの単一のシェル(おそらく、ログインせずにroot
?)で起動できますか?/proc/cmdline
を調べることによって)を分離したくありません。ユーザーに尋ねる前に、システムを調べて、インストール中に正確に何が起こるかについての概要を説明したいと思います。起動プロセスの初期段階では、システムの検査に必要な情報がまだ簡単に入手できない場合があります。)
現在のソリューションでは、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
を押さずに)新しい仮想端末に切り替えるように指示します。-w
は、openvt
に与えられたコマンド/path/to/install_script
の完了をopenvt
に待機させます。read
を呼び出すことでユーザーから入力を取得できます。ラズパイのカスタムディストリビューションで作業しているときに、同じ問題が発生しました。次のコードをスクリプトに追加すると、スクリプトが確実に入力を受け取ることができることがわかりました。
入力を読み始める前に、このコードを呼び出すだけです。
exec < /dev/tty1