Upstart: принять пользовательский ввод для переключения xorg.conf

Я пытаюсь получить сценарий запуска, требующий пользовательского ввода, выполняющегося до запуска gdm (сценарий должен позволить мне выбрать из списка xorg.conf тот, который я хотел бы использовать для текущего сеанса).

Уже пытался создать файл pregdm.conf в / etc / init, содержащий:

start on filesystem
stop on runlevels [06]
#  ...
console output

script
  # script that uses read to gather user input and replaces xorg.conf with the selected one
end script

и меняется start on в /etc/init/gdm.conf чтобы:

start on (filesystem
          and started dbus
          and started pregdm
          and (drm-device-added card0 PRIMARY_DEVICE_FOR_DISPLAY=1
               or stopped udevtrigger))

Эхо отображается в консоли, но я не могу заставить его ждать ввода пользователя: GDM запускается сразу.

Есть указатели?

большое спасибо

2 ответа

Upstart не предназначен для интерактивного использования.

Вполне вероятно, что стандартный ввод для вашего сценария перенаправлен от вас. Вы можете попробовать использовать другой файловый дескриптор.

#!/bin/bash
exec 3<&0
read -u 3 -p "Choose one: " input
exec 3<&-

Вот полный демонстрационный скрипт, который показывает входные данные из файла и от пользователя:

#!/bin/bash
exec 3<&0
while read -r line
do
    read -r -p "$line " -u 3 input
    echo "$line/$input"
done < inputfile

Если вы используете оболочку, которая не имеет -u опция для чтения:

read input <&3

Я думаю, что вы должны сделать что-то вроде этого:

  [ -x /usr/bin/plymouth ] && /usr/bin/plymouth --hide-splash
  while : ; do
      echo -n $"XXX $1 (Y)es/(N)o? [Y] "
      read answer
      if strstr $"yY" "$answer" || [ "$answer" = "" ] ; then
         ...
  [ -x /usr/bin/plymouth ] && /usr/bin/plymouth --show-splash
Другие вопросы по тегам