OpenSSH, экран FreeBSD перезаписывается при закрытии приложения

Я установил свежий FreeBSD 10 на виртуальную машину и подключился через SSH, и я заметил, что всякий раз, когда я закрываю программу (например, htop, top, nano и т. Д.), Содержимое сеанса перезаписывается.

Скриншот терминала

Этого не происходит, например, когда я подключаюсь к серверу Ubuntu, Debian.

Я не совсем уверен, что это называется, так что Google не помогает.

Кто-нибудь испытал это раньше? / Есть ли какие-то настройки в OpenSSH Server, которые мне нужно изменить?

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

Когда запускается программа TUI, которая использует ncurses и т. П., Чтобы представить свой текстовый пользовательский интерфейс, он очищает экран. В этот момент все, что находится на экране, было перезаписано.

То, что вам не хватает, и то, что вы не знаете названия, – это идея терминалов, которые имеют альтернативный экранный буфер . Когда такая программа TUI при запуске запускается, она выдает escape-последовательность для переключения на альтернативный буфер экрана терминала, если она есть. Затем весь его вывод переходит в этот буфер. Когда программа выходит или приостанавливается, она выдает escape-последовательность для восстановления основного экранного буфера, который остается нетронутым, в то время как программа TUI отображает свой пользовательский интерфейс в альтернативном буфере.

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

Программы смотрят эти escape-последовательности в базы данных terminfo или termcap . В мире terminfo возможности терминала называются smcup и rmcup . В мире termcap они называются ti и te . Как указано, они не упоминают экранные буферы.

Вместо этого они говорят о вводе и выходе из режима адресации курсора. Понятие состоит в том, что программа TUI, которая представляет полноэкранный интерфейс, подобный этому, работает в режиме адресации курсора, где программе действительно не нужен прокрутка терминала; Тогда как программа TUI, которая просто выводит строки прокрутки текста, отсутствует. Таким образом, один переключается в этот режим и выходит из него. (В реальном мире все не так ясно разрешено. Например: Современные оболочки, такие как Z Shell, перемещают курсор для редактирования строки, завершения меню и $RPROMPT , но не переключаются на альтернативный буфер экрана, не У вас есть полноценный полноэкранный пользовательский интерфейс и работает с точки зрения прокрутки.)

Таким образом, возможности обычно делают больше, чем просто переключающие буферы. smcup также содержит escape-последовательность для сохранения текущей позиции курсора и rmcup escape-последовательность для ее восстановления, а также, если терминал имеет такие escape-последовательности.

Ваша проблема – одна из двух вещей:

  • База данных termcap в вашей системе FreeBSD не имеет записей te и ti для вашего конкретного типа терминала, потому что запись неполна.
  • В первую очередь вы не используете правильный тип терминала для своего эмулятора терминала.

Тип терминала берется из переменной окружения TERM на сервере . Его значение обозначает запись в базе данных termcap . Поэтому убедитесь, что переменная среды TERM называет запись в /etc/termcap с возможностями, которые соответствуют возможностям вашего (локального) эмулятора терминала. Если нет записи, соответствующей вашему эмулятору терминала, который содержит ti и te , вам придется просто добавить такую ​​запись.

  • Как копировать выходные данные из удаленной команды в локальный буфер обмена?
  • Можете ли вы указать git-shell в .ssh / authorized_keys для ограничения доступа только к git-командам через ssh?
  • Как выполнять команды на сервере SSH в C #?
  • Автоматическая передача файлов с использованием метода проверки ответа на запрос
  • Как выполнить команду MySQL из сценария оболочки?
  • Ленивое приглашение для кодовой фразы ssh с открытым ключом
  • SSH от Windows до Linux без ввода пароля
  • Соединение закрыто удаленным хостом
  • Получение ssh для выполнения команды в фоновом режиме на целевой машине
  • Подключение к SSH из-за прокси-сервера HTTP
  • SSH как прокси-сервер socks через несколько хостов
  • Давайте будем гением компьютера.