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

1035
Utaal

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

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

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

0

2 ответа на вопрос

1
Dennis Williamson

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 
Я почти забыл об этом. Большое спасибо за указатели (и демо) о перенаправлении ввода / вывода, не знал об этом. Насколько я понял, возиться с выскочкой не является хорошим решением для моей проблемы: есть ли у вас идеи, как реализовать простое интерактивное меню запуска? Utaal 13 лет назад 0
@ Utaal: я не знаю Вы смотрели на что-то делать через Grub? Dennis Williamson 13 лет назад 0
0
zhigang

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

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

Похожие вопросы