Каковы настройки терминала, если я часто переключаю mosh между передним планом и фоном

Я использую mosh для доступа к моей удаленной машине с Ubuntu. Клиент, который я использую в Windows - это MobaXterm, в котором есть плагин для mosh. Тот, который я использую в Ubuntu, это просто mosh-клиент, который я получаю от apt-get. Проблема в том, что я обычно открываю vim в bash для редактирования своего кода и возвращаюсь в bash с помощью Ctrl + Z. И я возвращаю VIM с помощью FG. НО, когда я нажимаю Ctrl+Z, содержимое моего кода все еще находится в моем окне терминала, а под ним находится bash. SSH работает отлично. Код исчезает, и появляется только что-то подобное.

[1]+  Stopped                 vim .bashrc

Я думаю, это связано с настройкой моего терминала. Я использую настройки по умолчанию Ubuntu. $ TERM возвращает xterm. Терминал, который я использую в MobaXterm, также является xterm. Может кто-нибудь сказать мне, как я могу получить тот же результат, что и соединение SSH?

1 ответ

Решение

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

Настройка для TERM сообщает библиотеке termcap/terminfo/curses, какое описание терминала использовать. Вот в чем разница:

  • В случае программы mosh эта библиотека находится на вашем локальном компьютере.
  • При использовании ssh эта библиотека находится на удаленной машине.

Это сложнее: vim на самом деле использует базу данных терминала на машине, на которой вы ее запускаете, но у mosh есть последнее слово над тем, какие escape-последовательности отправляются терминалу. Похоже, что mosh видит описание локального терминала, где smcup а также rmcup Возможности terminfo не позволяют "xterm" переключаться на альтернативный экран.

У меня нет MobaXterm под рукой, чтобы проверить, но вы можете проверить это. mosh это программа curses / ncurses. Поэтому разумно предположить, что MobaXterm также имеет infocmp программа. С использованием infocmp Программа, вы можете увидеть, что его база данных терминала для этих значений, например,

smcup=\E[?1049h,
rmcup=\E[?1049l,

или же

smcup=\E[?47h,
rmcup=\E[2J\E[?47l,

Последние представляют собой оригинальные последовательности xterm (начало 1990-х годов), первые - современные xterm (конец 1990-х годов). Интересно, что некоторые эмуляторы "xterm" не реализуют более новые. Некоторые подробности содержатся в FAQ по xterm. Почему экран не очищается при запуске vi?

Если у вас есть infocmp тогда вы, скорее всего, tic, Вы можете изменить свою локальную базу данных терминала

  • использование infocmp создать файл, содержащий описание терминала
  • отредактируйте файл (добавьте строки для этих двух или используйте старые значения, если новые не работают)
  • использование tic перекомпилировать описание терминала

(Если MobaXterm предоставляет mosh без утилит curses, мало что можно сделать, кроме как отправить отчет об ошибке в MobaXterm).

Выше написано 8 июня. Я посмотрел на MobaXterm вчера вечером и получил несколько комментариев:

  • MobaXterm является автономным (приложение, использующее busybox), поэтому я обычно не обращал бы на него особого внимания.
  • У него умеренно старое описание терминала для xterm (я мог бы точно определить его, но не случайно, вероятно, 5-8 лет).
  • Альтернативное переключение экрана намного старше, и, как вы указали, ничего особенного не поделаешь, я не стал больше заниматься расследованием.
  • Если бы это было необходимо, вполне вероятно, что вы могли бы скопировать скомпилированную запись terminfo из Linux (но это было бы неприятно).

Для Ubuntu я быстро взглянул на мою машину 14.04 с vim, работающим в gnome-терминал и xterm. В качестве совпадения я недавно просматривал описание терминала первого и заметил, что запись, для которой я написал gnome (устарело) или vte (предпочтительно) использовал старый xterm smcup / rmcup, Ubuntu 14.04 достаточно старая, чтобы gnome-Terminal не распознавал более новый xterm smcup и не переключался на альтернативный экран с помощью TERM=xterm, Но это сработало с TERM=vte (или же TERM=gnome). Вы бы имели эти описания, если ncurses-term пакет установлен.

Другие вопросы по тегам