Терминальный прокси или экран без эмуляции терминала

1522
ZyX

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

\ Начать

Я хочу, чтобы мое терминальное приложение оставалось активным и доступным, если я случайно закрыл эмулятор терминала. Эта функциональность обеспечивается screen и tmux, но у них есть проблемы с цветами, и они сбрасывают экран. Да, я могу запустить оболочку внутри экрана, но я не хочу, чтобы оболочка оставалась активной, если не запущена какая-либо другая программа.

\ Конец

Я вижу, что это должно быть что-то вроде экрана, но без эмуляции терминала VT100, что-то, что будет просто применяться независимо от того, что приложение делает с терминалом «Terminal Proxy» (например, вывод чего-либо в stdout / stderr или использование stty для установки параметров терминала) для терминала этот прокси работает.

// Я знаю о screenи altscreen on, но это делает либо это ( screenс TERM=screen):

экран с TERM = экран

или это ( screenс TERM=rxvt-unicode):

экран с TERM = rxvt-Unicode

пока хочу этого ( rxvt-unicodeбез screen)

rxvt-юникода

Я понял, что все выглядит хорошо, если я компилирую rxvt-unicodeс USE=-xterm-color(на самом деле ВИМ выглядит как на второй картинке, даже без экрана, если добавить этот флаг USE) и установить TERM=screen-256color, но мне не нравится этот обходной путь, потому что это на самом деле изменения цвета и я могу не будьте уверены, что это всегда изменит их только так:

экран с TERM = screen-256color

3
Непонятно, что ты пытаешься сделать. Что вы подразумеваете под "иммунитет к закрытию терминала эмулятора"? Вы просто хотите отключить определенные коды управления терминалом? Вы можете просто использовать `infocmp`, отредактировать возможность и затем использовать` tic`. Dennis Williamson 14 лет назад 0
Я хочу, чтобы мое терминальное приложение оставалось активным и доступным, если я случайно закрыл эмулятор терминала. Эта функциональность обеспечивается screen и tmux, но у них есть проблемы с цветами, и они сбрасывают экран. Да, я могу запустить оболочку внутри экрана, но я не хочу, чтобы оболочка оставалась активной, если не запущена какая-либо другая программа. ZyX 14 лет назад 0
Я прекратил использовать rxvt-unicode, потому что я никогда не мог заставить цвета работать правильно, и некоторые основные управляющие символы заставляли rxvtu отображать символы повсюду. Однако Apple Terminal.app и Gnome.terminal не доставили мне никаких проблем. Я использую набор символов en-US или UTF8. Stefan Lasiewski 14 лет назад 0
@ Стефан Ласевски прекрасно работает в rxvt-unicode; но они прекрасно работают только в этом терминале и только при определенных условиях. Если я переключусь на другой терминал, мне придется что-то с ними делать. Используя `LANG = ru_RU.UTF8`. Что вы подразумеваете под «показывать символы повсюду»? Если это портит строки, попробуйте выполнить `stty onlcr`. ZyX 14 лет назад 0
для меня все еще неясно, что означает «Да, я могу запустить оболочку внутри экрана, но я не хочу, чтобы оболочка оставалась в живых, если не запущена какая-то другая программа». Допустим, tmux: tmux запускает оболочку, а затем вы набираете там «yourprogramname» .. и вы хотите, чтобы процесс оболочки исчез, так что это больше не tmux-> shell-> yourprogram, а tmux-> yourprogram? если это так, запустите вашу программу с "exec yourprogramname". akira 14 лет назад 0
и tmux поддерживает 256 цветов, поэтому у вас не должно быть никаких визуальных проблем с вашими программами. то есть, если ваш эмулятор терминала поддерживает 256 цветов, как хорошо. akira 14 лет назад 0
@akira. Это означает, что если я закрою эмулятор терминала, который имеет дерево процессов 'emulator / screen / hilite / zsh', оболочка должна быть закрыта. И это не должно происходить, если дерево процессов выглядит так: «эмулятор / экран / hilite / zsh / some_other_program / ...». Это может быть сделано с помощью демона, который циклически проходит через сеансы отдельного экрана и проверяет их дерево процессов, что и предложил Дэн. ZyX 14 лет назад 0
используйте TERM = xterm-256color, который дает мне точные оттенки в tmux. akira 14 лет назад 0

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

3
tzervo

Есть также программа под названием «dtach», которая делает это, не накладывая свой собственный экранный буфер. (Я знаю, что ответ довольно поздно, но, тем не менее, я публикую его для тех, кто гуглит и наткнулся на страницу)

Нет. Спасибо, дтач работает так, как я хочу. ZyX 13 лет назад 0
0
Jarvin

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

Одним из решений было бы запустить оболочку с экрана (как вы сказали, что вы не хотели), но затем добавить задание Cron, которое будет запускаться каждые 10 минут, чтобы проверить, закрываются ли сеансы экрана.

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

Я не боюсь добавить другую работу cron, но это не имеет ничего общего с цветами. ZyX 14 лет назад 0
0
brice

Используйте сакуру . Он запрашивает, пытаетесь ли вы закрыть vterm с запущенной программой.

0
pjz

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

screen <yourprog> 

См. 5-й абзац экранной справочной страницы для более подробной информации.

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