LINUX.ORG.RU

Несколько консолей из одного приложения

 


0

1

Чем больше я думаю над задачей, тем больше мне кажется, что я хочу странного, но, мало, ли, может решение есть или хотя бы нечто похожее? Есть программа с графическим интерфейсом (не иксовым) Нужно, чтобы в какой то момент из нее запускалась новая консоль, не отображаемая на основном экране, но отображаемая на удаленном рабочем столе, в которой, в свою очередь, запускались какие-то приложения. Звучит дико?


по моему, ты вообще не понимаешь, что ты хочешь. Консоль — это всего лишь индикация процесса. Если ты хочешь удаленно запускать приложения, она тебе не нужна. Просто шлешь команды на удаленную машину, и все. Есть ssh и telnet. Можно реализовать через сервер на удаленной машине, который будет посредником между твоим приложением и окружением удаленной машины.

filequest
()

раскажи с муксимумом деталей что и зачем ты пытаешься сделать. какая у тебя задача.

val-amart ★★★★★
()
Ответ на: комментарий от val-amart

Не спорю, уровень понимания у меня совершенно нубский. Хочется же, примерно следующего. Есть некая программа, которая свой интерфейс рисует на графическом экране через framebuffer, а отладочную информацию сыпет в консоль. Чтобы консоль не отображалась на экране, она переопределена на tty3 Худо бедно это работает - если запускать программу с удаленного терминала, она на нем рисует сообщения консоли, а интерфейс на графическом экране устройства. Теперь топиковый вопрос: как сделать это прямо, то есть, чтобы программа , запускаясь не с удаленного терминала, а с устройства сама запускала удаленный терминал, в который сыпала консольные сообщения? Такая вот программа-минимум.

MBK
() автор топика
Ответ на: комментарий от MBK

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

val-amart ★★★★★
()
Ответ на: комментарий от MBK

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

если что-то из этого не «нужно» а просто артефакт твоего решения «так просто получается», так и скажи.

я правильно понял? если да, то как происходит вывод дебаг сообщений? как ты «переопределил консоль» (я без понятия что ты под этим имеешь ввиду).

val-amart ★★★★★
()
Ответ на: комментарий от MBK

Подозреваю, что правильно просто писать сообщения в лог-файл.

Нужны логи на другой машине — заходишь по ssh и читаешь tail-ом. ssh user@ip; tail -f /tmp/mylog.log.

anonymous
()

Ты пытаешься изобрести syslog?

annulen ★★★★★
()
Ответ на: комментарий от anonymous

У него, похоже, эмбедовка, поэтому много логов сохранить локально не получится, придется ротировать. А удаленный syslog лишен такой проблемы

annulen ★★★★★
()
Ответ на: комментарий от annulen

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

На самом деле, именно так происходит сейчас. Есть устройство и есть компьютер, подключенный к нему через ssh по удаленке. Если программу запустить с компьютерного терминала, то интерфейс выводится на графический экран устройства, а сообщения сыпятся в терминал. Однако, если я запускаю ее непосредственно с устройства, интерфейс отображается, но сообщения уходят в никуда. Я так понимаю, что это принципиальная проблема, кроме как через непрерывное чтение syslog отследить с удаленного устройства то, что делает программа принципиально невозможно? Или хотя бы есть какой то способ глянуть с удаленного компьютера содержимое этого самого tty3 на который направлена консоль?

MBK
() автор топика
Ответ на: комментарий от annulen

А без syslog никак? Куда этот вывод на tty3 идет посмотреть нельзя?

MBK
() автор топика
Ответ на: комментарий от MBK

во-первых, чтобы я увидел что ты мне ответил, тебе надо нажимать «ответить» на моем сообщении.

теперь по делу. есть миллион способов как это сделать. четыре вопроса:

1) как именно сейчас выводятся сообщения? что все-таки подразумевается под «перенаправил в tty3»? у тебя просто твое приложение пишет дебаг в stdout?

2) сообщения всегда надо видеть на одной и той же машине, или на разных? с ней/ними есть стабильная связь?

3) какой характер сообщений, их размер и частота? как ты потом хочешь эти сообщения использовать?

4) есть ли доступ к исходникам? на «устройстве» (ембеддед линукс?) можно менять все или ничего?

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

val-amart ★★★★★
()
Ответ на: комментарий от val-amart

1) как именно сейчас выводятся сообщения? что все-таки подразумевается под «перенаправил в tty3»? у тебя просто твое приложение пишет дебаг в stdout?

Выводятся обычным printfом, консоль перенаправлена в cmdline стоит console=tty3

2) сообщения всегда надо видеть на одной и той же машине, или на разных? с ней/ними есть стабильная связь?

Программа запускается на распбери, отладочные сообщения хочется видеть на PC через putty или удаленный рабочий стол. Сейчас во всяком случае, отлаживаю именно так.

4) есть ли доступ к исходникам? на «устройстве» (ембеддед линукс?) можно менять все или ничего?

В смысле, распбиан? Даже и не знаю, насколько его там менять можно, во всяком случае, cmdline ж меняю и загрузочные скрипты.

MBK
() автор топика
Ответ на: комментарий от MBK

Подозреваю, что ты хочешь gnu screen или tmux ;)

или даже банальный nohup

router ★★★★★
()
Последнее исправление: router (всего исправлений: 1)
Ответ на: комментарий от MBK

Выводятся обычным printfом, консоль перенаправлена в cmdline стоит console=tty3

понял. тогда лучше всего действительно писать в сислог вместо принтф, это тривиально, и так же тривиально потом сислог фасилити отдать по сети. остальные варианты будут много сложнее, как то перехват в ядре, обертка с прелоадом кастомной библиотеки, и т.п., да и потом по сети все равно его проще сислогом послать, чем изобретать для этого отдельный протокол и клиента. можно даже не настраивать сислог на удаленную отдачу, а просто писать им в файл, а на файл сделать ssh rasbian tail -100f /my/log/file с удаленной машины.

другой нормальный, простой вариант: писать через fprintf в определенный логфайл, читать его так же через tail -f. можно писать на в stdout а в stderr и при запуске перенаправлять шеллом только стдерр в файл, дальше снова тейл.

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