Почему я не могу прокручивать страницу или использовать сочетание клавиш ctrl-a/ctrl-e при использовании экрана?

Почему я не могу прокручивать страницу или использовать сочетание клавиш ctrl-a/ctrl-e при использовании экрана?

Я использую iTerm2 и понял, что когда я использую screen: ssh -t [имя пользователя]@[домен].edu 'screen -DR'

Я заметил следующие странности:

  • Я не могу использовать мышь для прокрутки вверх и вниз в окне iTerm2

  • Я не могу использовать ctrl-a для перехода в начало строки

  • Я не могу использовать ctrl-e для перехода в конец строки

  • Мой ~/.bash_profile не является исходным файлом

Я уверен, что есть и другие, но как мне сделать так, чтобы поведение было таким, как будто я просто подключился по SSH без сеанса Screen?

решение1

Упомянутые вами сочетания клавиш реализованы в оболочке Bash. Если они не работают, это, скорее всего, означает, что вы по какой-то причине не используете Bash в качестве оболочки – хотя немного странно, что Screen запускает другую оболочку, нежели SSH:

  • Проверьте, ~/.screenrcесть ли в вашем файле команды «shell» или «defshell».
  • Проверьте, является ли оболочка, указанная getent passwd $USERв последнем поле, /bin/bash.
  • Проверьте, printenv SHELLсоответствует ли (внешний экран) тому, что getentсообщается.

В некоторых системах, если ваша фактическая оболочка входа настроена на что-то странное, вам может потребоваться вручную указать Screen использовать bash с помощью shell bashнастройки screenrc. (Например, возможно, что на вашем сервере на самом деле /bin/sh является оболочкой учетной записи пользователя, но sh ~/.profile затем настроен на запуск /bin/bash поверх. В этом случае оболочка 'sh', запущенная Screen, не будет читать ~/.profile и не перейдет к bash.)


Ваш ~/.bash_profile не будет использоваться для оболочек, не являющихся "login". Внешняя оболочка, которую вы запустили Screenотбыла оболочкой «входа»; те, что находятся внутри Screen, обычно не предназначены для входа, и ожидается, что они будут загружать только ~/.bashrc, но не какие-либо скрипты «профиля» — это сделано для того, чтобы каждое новое окно Screen не запускало без необходимости то, что уже было запущено исходной оболочкой.

Вместо этого следует указывать такие вещи, как псевдонимы и функции ~/.bashrc, но можно использовать настройку «shell» в screenrc, чтобы принудительно запустить оболочку в режиме «login», добавив к ее команде префикс -, например -bash.


Стандартная прокрутка на основе терминала не будет работать с мультиплексорами, такими как Screen или tmux, и это отчасти задумано: мультиплексор является собственным эмулятором терминала и управляет внешним терминалом более напрямую, где текст не так важен.прокрутитькак естьстерто и перезаписано.

Например, если сеанс Screen имеет две панели, разделенные по горизонтали, текст из нижней панели должен быть явно стерт, когда он собирается прокрутиться за пределы видимости, в противном случае на верхней панели останется мусор. (Как будет работать обратная прокрутка, если сеанс Screen имеет две панели, разделенные по вертикали?)

Из-за этого Screen обычно настроен на преднамеренное переключение внешнего терминала в режим «альтернативный экран», отключая прокрутку iTerm2 на время. Вы можете попробовать использовать настройку altscreen offв screenrc, чтобы предотвратить это, но не ждите, что прокрутка iTerm будет иметь смысл.

Вместо этого вы можете войти в «режим копирования» Screen, используя кнопку , Ctrl-a[чтобы иметь возможность прокручивать определенную панель.

Связанный контент