rc.localで実行するとWhiptail/ダイアログボックスの入力エラー

rc.localで実行するとWhiptail/ダイアログボックスの入力エラー

Debian の起動時に、会話呼び出しを含む Bash スクリプトを起動する必要があります。これが私ができることです:

  • デフォルトのルートパスワードの設定を解除
  • 置く- 自動ログインtty1のオプション初期化プログラム1:2345:respawn:/sbin/getty --root tty1 に自動的にログイン)
  • 私のスクリプトのフルパスを作成してください。/etc/rc.local

ただし、ダイアログボックスには異常な動作があります。ボックスが表示されますが、標準入力が標準出力をオーバーフローしているようです。矢印キーを押すとボタンは選択されませんが、デフォルトの選択位置から始まり、対応するASCII文字がダイアログボックスの上部に表示されます。

ダイアログボックスにエラーを表示

次にEnterキーを押すと、キーストロークがダイアログボックスに送信され、期待どおりに適切なオプションが選択されます。スクリプトが正常に実行されたときに動作することを確認するためにテストされました。

シェル初期化に何か抜けたものがあるようです。と入力すると/bin/bashメッセージがrc.local表示され、no job control in this shellプロセスに信号を送信できず、pidも取得できません(pidではなく疑問符が表示されますtop)。

なぜこのような問題が発生しますか?どうやって克服しますか?

答え1

rc.localで実行されるすべての対話型スクリプトにはstdinと同様の問題があるようです。解決策が見つかりましたスーパーユーザー:

次にスクリプトを起動します。openvt -s -w /path/to/script.sh

(説明は元の投稿を参照)

答え2

コンソールがstdinプロセスに接続されていませんwhiptail

で見たのと同じ問題のようです。rc.local 読み取りはキーストロークをエコーし​​ません。

plymouth quit提案された答えは、コンソール入力を試みる前に追加することです。

あるいは、Plymouth が次のように警告を表示するように設定することもできます。

 plymouth pause-progress 
 plymouth message --text="Your system will be hosed.  Is that what you want?  What you really, really want? [yn]" 
 plymouth watch-keystroke --keys="YyNn " --command="tee /tmp/key_pressed"
 case $(cat /tmp/key_pressed) in
     [nN])
         poweroff;          # abort!
         ;;
 esac
 plymouth message --text="Okay, you asked for this" 
 plymouth unpause-progress

警告:私はPlymouthの専門家ではなく、上記の方法を試していません。

関連情報