OpenSSH, экран FreeBSD перезаписывается при закрытии приложения
Я установил свежий FreeBSD 10 на виртуальную машину и подключился через SSH, и я заметил, что всякий раз, когда я закрываю программу (например, htop, top, nano и т. Д.), Содержимое сеанса перезаписывается.
Этого не происходит, например, когда я подключаюсь к серверу Ubuntu, Debian.
- Как отправить одну команду на несколько ПК по локальной сети (linux)
- Войти через SSH без пароля
- Выполнять команды с использованием sudo на удаленном сервере после входа в PuTTY через командный файл
- Использование директивы IdentityFile в ssh_config при использовании AgentForwarding
- Как получить команды, выпущенные в сеансе ssh
Я не совсем уверен, что это называется, так что Google не помогает.
Кто-нибудь испытал это раньше? / Есть ли какие-то настройки в OpenSSH Server, которые мне нужно изменить?
- UDP-трафик через SSH-туннель
- Не удалось подключиться к SSH после сгенерированного открытого ключа и закрытого ключа
- Тайм-аут при запуске тестов xcodebuild под Xcode 6 через SSH
- Монтирование SSH / SFTP на Windows 7
- Как получить файлы на локальный компьютер при входе в SSH?
- SSH ProxyCommand на стороне сервера SSH
- Ошибка проверки валидности ssh
- Лучший способ использования нескольких частных ключей SSH на одном клиенте
Содержимое сеанса было уже перезаписано, когда вы впервые запустили программы 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
, вам придется просто добавить такую запись.