web-dev-qa-db-ja.com

rc.localから実行した場合のホイップテール/ダイアログ入力のバグ

Debianの起動時にダイアログの呼び出しを含むBashスクリプトを開始する必要があります。これが私がそれを行うことができた方法です:

  • デフォルトのrootパスワードの設定を解除します
  • -autologinオプションをinitrd1:2345:respawn:/ sbin/getty --autologin root tty1)のtty1に設定します
  • スクリプトのフルパスを/ etc/rc.localに記述します

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

display bug in dialog

次にEnterキーを押すと、キーがダイアログに送信され、対応するオプションが意図したとおりに選択されることに注意してください。スクリプトは、正常に実行されたときに動作することをテストしています。

シェルの初期化に何かが欠けていると思います。/bin/bashrc.localに入れると、no job control in this Shellメッセージが表示され、プロセスにシグナルを送信したり、pidを取得したりできません(疑問符が表示されます) topのpidの代わりに)。

なぜこの動作が発生し、どうすればそれを克服できますか?

1
pedroapero

Rc.localから起動されたインタラクティブスクリプトには、stdinでも同様の問題があるようです。回避策を見つけました スーパーユーザー

openvt -s -w /path/to/script.shを使用してスクリプトを起動するだけです

(元の投稿での説明)

3
pedroapero

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

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

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

または、プリマス自体に警告を表示するように手配することもできます。何かのようなもの

 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

警告:私はプリマスの専門家ではなく、上記を試したことがありません。

2
Toby Speight