Я пытаюсь получить сценарий запуска, требующий пользовательского ввода, выполняемого до запуска 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 ответа2

1

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
0

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

  [ -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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .