Терминальный прокси или экран без эмуляции терминала
Как сделать терминальные приложения невосприимчивыми к закрытию эмулятора терминала, но при этом использовать все функции виртуального терминала?
\ начать {UPDATE}
Я хочу, чтобы мое терминальное приложение оставалось активным и доступным, если я случайно закрыл эмулятор терминала. Эта функциональность обеспечивается screen и tmux, но у них есть проблемы с цветами, и они сбрасывают экран. Да, я могу запустить оболочку внутри экрана, но я не хочу, чтобы оболочка оставалась активной, если не запущена какая-либо другая программа.
\ конец {UPDATE}
Я вижу, что это должно быть что-то вроде экрана, но без эмуляции терминала VT100, что-то, что будет просто применяться независимо от того, что приложение делает с терминалом "Terminal Proxy" (например, вывод чего-либо в stdout/stderr или использование stty для установки параметров терминала) в терминал этот прокси работает.
// Я знаю о screen
а также altscreen on
, но это делает либо это (screen
с TERM=screen
):
или это (screen
с TERM=rxvt-unicode
):
пока хочу этого (rxvt-unicode
без screen
):
Я понял, что все выглядит хорошо, если я собираю rxvt-unicode
с USE=-xterm-color
(на самом деле vim выглядит как на втором изображении даже без экрана, если я добавлю этот флаг USE) и установите TERM=screen-256color
, но мне не нравится этот обходной путь, потому что он фактически меняет цвета, и я не могу быть уверен, что он всегда изменит их только так:
4 ответа
Есть также программа под названием "dtach", которая делает это, не накладывая свой собственный экранный буфер. (Я знаю, что ответ довольно поздно, но, тем не менее, я публикую его для тех, кто гуглит и наткнулся на страницу)
Экран можно использовать для непосредственного запуска приложения, поэтому при выходе из экрана приложение будет закрыто:
screen <yourprog>
См. 5-й абзац экранной справочной страницы для более подробной информации.
Используйте сакуру. Он запрашивает, пытаетесь ли вы закрыть vterm с запущенной программой.
Да, я могу запустить оболочку внутри экрана, но я не хочу, чтобы оболочка оставалась активной, если не запущена какая-либо другая программа.
Одним из решений было бы запустить оболочку с экрана (как вы сказали, что вы не хотели), но затем добавить задание Cron, которое будет запускаться каждые 10 минут, чтобы проверить, закрываются ли сеансы экрана.
Если все сеансы экрана отключены, и никакие программы, кроме оболочек, не запускаются из них, вы можете закрыть их.