LINUX.ORG.RU

ncurses без управляющего терминала?


0

0

Я хочу чтобы моя программа запускалась из /usr/local/etc/rc.d т.е. до loginа и использовала ncurses т.е. чтобы могла вывести на экран и опрашивать клавиатуру. Та что есть до логина запускаться не хочет естественно, говорит недоступен терминал. Подскажите кто знает.

anonymous

AFAIK, для ncurses требуется, чтобы была установлена переменная окружения TERM. Попробуй в начале работы своей проги сделать так:
int main()
{
putenv("TERM=linux");
/* дальше твой рабочий код */
}

nobody ★★
()

Спасибо за совет. Она теперь выводит на экран но на клавиатуру не реагирует и что самое обидное теперь нельзя залогиниться с консоли когда она работает.

anonymous
()

Ну тогда давай по порядку. Расскажи, что ты хочешь сделать. В смысле, для чего ты эту прогу пишешь? Может быть, найдется другой способ сделать то, что тебе нужно.

nobody ★★
()

То что другой способ существует не вызывает у меня сомнений, но программа уже работает и вносить в нее большие изменения нежелательно. У нее есть некоторое неудобство она не запускается автоматически, т.е. приходится логинится и запускать ее самому. А хотелось бы чтобы она запускалась при запуске системы. Но при этом программа интерактивная т.е. вывадит на экран важные сведения и имеет меню для выбора настроек. А служит она для отправки файлов и тут время на то чтобы залогиниться является критическим. К тому же с ней будут работать люди которые вообще не знают что такое UNIX от которых в случае возникновения внештатной ситуации требуется лишь нажать на ресет.

anonymous
()

Насколько я понял, юзер, после входа в систему, должен попасть на твою прогу? А можно запихнуть ее вызов в стартовый скрипт оболочки?

nobody ★★
()

Насчет юзера это конечно правильно, однако есть желание обойтись совсем без юзера, по крайней мере, на этапе загрузки.

anonymous
()

Может быть, тогда написать мини-программку, которая сделает все, что должен делать "login", только без запроса пароля у юзера? Т.е., она установит все переменные окружения, все сделает, а потом
"exec <твоя_прога_на_ncurses>"

nobody ★★
()

Для того, чтобы программа запускалась автоматом, нужно запускать систему с runlevelom 2, 3 или 4. Причем программу эту необходимо вызывать в файле /etc/rc.d/rc.sysinit (это шелл-скрипт), и вызвать ее нужно раньше вызова /sbin/getkey (в самом конце rc.sysinit), т.к. getkey будет ждать нажатия клавиши. Если тебе не нужно, чтобы юзер вышел в Шелл (случайно или специально), лучше еще перегрузить Ctrl-C, а по завершении программы сделать вместо exit(0) - system("init 6"); А как ты вообще грузишься, с винта или с дискеты?

Akan
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.