Создатели Screen называют утилиту менеджером (псевдо)терминалов. Идея в том, чтобы вместо нескольких терминалов, открытых для одновременной работы с разными пользовательскими программами например по ssh, обеспечить доступ к этим терминалам из одного единственного терминала, как если бы мы работали в «настоящем» TTY и переключались из одного в другой клавишами Alt-Fn.
На самом деле, Screen умеет гораздо больше. Перечислю два её основных достоинства.
- Сессия Screen запускается независимо от login shell (Рис.1), благодаря чему после выхода и повторного входа в командный интерпретатор, например, по ssh мы можем снова «подключиться» к этой сессии со всеми запущенными в ней ранее программами и возможностью вмешаться в ход их выполнения (в отличие от запуска программ в фоновом режиме, когда на их работу обычно уже невозможно влиять). Это очень выручает при нестабильном удалённом подключении по ssh, так как сбой в соединении может привести к аварийному прекращению выполняющейся программы, являющейся дочерним процессом login shell и возникновению системного сбоя. При запуске же внутри Screen программа просто «не заметит» разрыва ssh-сессии и закрытия терминала.
- В одной сессии Screen на экране можно расположить несколько терминалов одновременно и легко переключаться между ними, чего не позволяет обычный TTY (Рис.2).
Прежде чем переходить к описанию утилиты будет полезно договориться о терминологии, следование которой упрощает понимание принципа работы Screen.
1. Термины и определения
Окно (window) — псевдотерминал со своим bash (nonlogin). Окна нумеруются от 0 до 9 (номера окон можно переопределить). Им можно (и желательно) присваивать имена.
Область (region) — прямоугольная область экрана, в которой отображается одно из окон. Экран можно разбить на области как вертикально, так и горизонтально.
Разметка экрана (layout). Это набор областей, на которые разбит экран терминала. Каждой разметке можно присвоить имя и внести в конфигурационный файл, чтобы иметь возможность быстро выбирать их внутри сессии Screen с помощью группы команд layout (см. ниже).
2. Описание команд
Управляющие сочетания клавиш. Для перехода в режим ввода управляющих команд в screen по умолчанию используется Ctrl-a. После нажатия этой комбинации вводится собственно управляющий символ или сочетание, например ? (справка по командам) или Ctrl-I (переход в следующую область). Для упрощения изложения в дальнейшем будут упоминаться только сами управляющие сочетания без переключателя Ctrl-a.
Работа с окнами (псевдотерминалами, PTS) | |
с | Создать окно с запущенным в нём bash. |
K | Закрыть окно |
А | Переименовать окно |
r | Включение / Выключение переноса строк в терминале |
" | Вывести список окон |
Работа с областями экрана (regions) | |
s | Разбить область на две по горизонтали |
I (pipe) | Разбить область на две по вертикали |
Tab | Переключиться в следующую область экрана |
Q | Закрыть все остальные области и оставить текущую (в которой находится фокус) |
Работа с сессиями Screen | |
d | Перевести сессию в фоновый режим и вернуться в системную консоль |
Внутренние команды Screen. Доступны после ввода управляющего символа : (двоеточие).
mousetrack on | Включить поддержку мыши для переключения между областями. При этом блокируется возможность копирования / вставки по правому щелчку мыши в окне ssh-клиента Putty. Эта функция почему-то пропадает после "открепления" сессии Screen и возвращения в неё. |
layout show | Просмотреть список разметок экрана, заданных в конфигурационном файле |
layout select [n|title] | Выбрать заданную в конфигурационном файле именованную разметку экрана либо по номеру (n) либо по названию (title). |
layout save XXX | Эту команду нужно выполнить для сохранения текущего layout-а с именем XXX перед откреплением сессии Screen, если в конфигурационном файле не прописано ни одной именованной разметки (например, вы только установили screen). Только в этом случае последняя разметка восстанавливается при повторном входе в сессию Screen из системной консоли. |
layout autosave on | Команда автосохранения разметки обычно записывается в конфигурационном файле. Она запоминает тот именованный layout, который был на экране на момент "открепления" сессии Screen. Команда действует только на разметки, явно указанные в конфигурационном файле. В противном случае текущий layout нужно сохранить командой layout save XXX (см. выше). |
quit | Закрыть все окна и завершить сессию |
3. Пример файла конфигурации .screenrc
Глобальный файл конфигурации screen находится по адресу /etc/screenrc, но для удобства работы лучше написать пользовательский файл, который должен располагаться в домашнем каталоге пользователя ~/.screenrc. Обратите внимание, что в начале имени локального файла присутствует точка.
За основу я взял файл с Github (.screenrc by joaopizani) и подправил под свои нужды:
- Оставлена нижняя статусная строка, в которой отображаются все рабочие окна под своими номерами и именами. Нумерация окон для удобства сделана с 1 по 10-е.
- Предопределено несколько самых распространённых разметок экрана, которые интуитивно легко выбрать по порядковому номеру:
0 — one (одна область)
1 — two-v (две вертикальные области)
2 — two-h (две горизонтальные области)
3 — three (три области — две вверху, одна внизу)
4 — four (четыре области)
- По умолчанию открывается разметка с двумя вертикальными областями (two-v)
- Оставлено одно активное окно и убран нерабочий код функциональных клавиш
Таким образом, при запуске Screen мы получим экран в стиле Total Commander, который в любое время можно изменить, выбрав другую разметку. После возврата в сессию Screen из системной консоли разметка будет такой же, как на момент «открепления» благодаря функции автосохранения.