如何使用 upstart 在启动过程中与用户交互?

如何使用 upstart 在启动过程中与用户交互?

可能重复:
Upstart 脚本:在启动时检测 Shift 键按下

我想在启动时添加一个问题。用户应该进行键盘输入,并且根据这些输入,脚本中有一个 if 条件。

“你想要 X 还是 Y?”

“或者只需等待 10 秒即可默认为 X。”

答案1

这有点棘手,但您可以在系统启动时使用 plymouth 与用户交谈。这仅当您的作业阻止启动时才有效,因为一旦达到运行级别 2 并且 plymouth 终止,您将无法再进行交互。

基本上,您想要执行“plymouth ask-question”或“plymouth watch-keystroke”,然后系统会提示用户。因此,如果您想等待用户 10 秒钟,则需要执行如下新任务(这完全是理论上的,未经测试!):

start on starting rc RUNLEVEL=[2345]
task
script
  myscript=`mktemp /tmp/killme.sh.XXXXXX`
  chmod 0750 /tmp/killme.sh
  cat > $myscript <<EOF
#!/bin/sh
# script is sent key pressed
cat > /tmp/keypresses.txt
kill -USR1 $$
EOF
  key=""
  handle_usr1() {
    key=`cat /tmp/keypresses.txt`
    plymouth display-message --text="you pressed $key"
    exit 0
  }
  trap handle_usr1 USR1
  plymouth watch-keystroke --command=$myscript --keys="ABCD"
  timeleft=10
  while [ $timeleft -gt 0 ] ; do
    plymouth display-message --text="you have $timeleft seconds to press A,B,C, or D..."
    timeleft=(($timeleft-1))
  done
  plymouth display-message --text="Timed out..."
end script

相关内容