Это старая версия документа.


Автор - Лукас Вестерман (Lucas Westermann)

После вводной статьи прошлого месяца мы готовы перейти к более сложным и вместе с тем более полезным аспектам конфигурации GNU Screen. Я расскажу о некоторых возможностях Screen, которые использую сам и нахожу весьма полезными. Они не так сложны, как может показаться на первый взгляд, и уж тем более не единственные достойные из всех возможностей Screen. Я буду рад, если вы пришлёте мне примеры ваших настроек этой утилиты. Я могу публиковать их каждый месяц в начале «Покоряй и Властвуй», чтобы мы все могли почерпнуть в них что-то новое. А в этой статье я расскажу о следующих вещах: автозапуск команд в новых окнах, использование Screen через SSH, разделение Screen-сессий между несколькими пользователями, разделение области окна и преимущества Screen в качестве локальной консоли. Ну что ж, давайте начнём и заставим работать наши Screen-сессии с файлами .screenrc на полную катушку!

Если вы просматривали мой конфигурационный файл из прошлого номера, вы наверняка обратили внимание на следую-щие две строки в конце файла:

# автозапуск сессий screen
screen -t Zsh 0 /bin/zsh
screen -t IRC 1 /usr/bin/irssi

Эти строки добавляют новое окно Screen с заголовком (значе-ние опции «-t»), указанным номером окна (следующий после заголовка параметр) и командой, которая в этом окне запускается. То есть, .screenrc запускает Screen с работающим Z-shell в окне 0, заголовок которого «Zsh», и окном 1 с заголовком «IRC», в котором запущен irssi. Screen делает активным самое новое окно, так что мои сессии всегда начина-ются с IRC, и это как раз то, что мне нужно. Не знаю, есть ли ограничения на количество окон в Screen, но я бы не советовал открывать их больше десяти (по количеству комбина-ций клавиш быстрого вызова). Эта возможность особенно полезна вам, если вы постоянно работаете с несколькими консольными программами (mutt, irssi, midnight commander и другие) и хотите, чтобы все программы были легко доступны без открытия множес-тва отдельных терминалов.

Возможно, при работе через SSH вы сталкивались с проблемой обрыва соединения посреди работы с программой, из-за чего вы были вынуждены пере-запустить её заново, чтобы досмотреть до конца её вывод. Именно поэтому я считаю, что для людей, подключающихся к удалённой машине более чем на минуту и выполняющих там более одной команды, жизненно необходимо использовать Screen или другой терминаль-ный мультиплексор. И даже если вы как раз их тех, кто подключается на минутку и запускает только одну команду, всё равно Screen будет полезен. Используя Screen через SSH, вы сможете запустить команду, отсоединить сессию и отклю-читься от удалённой машины.*Я рекомендую отсоединять сессию до разрыва SSH-соеди-нения, но Screen должен сделать это самостоятельно. Потом вы просто снова подклю-чаетесь к удалённой сессии и получаете все данные, что программа успела вывести за это время. Это очень полезно для системных администра-торов, которым приходится выполнять сценарии обновле-ния прав доступа или что-то подобное, так как им больше не нужно отсылать работающий процесс в фоновый режим или всё время держать SSH-соединение открытым. Если мне не изменяет память, вы можете настроить автомати-ческий запуск Screen при подключении по SSH, и, таким образом, всегда будете работать в Screen.

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

Ctrl+a
:multiuser on

Ctrl+a —это комбинация клавиш, после нажатия которой нужно написать «:multiuser on». Также вам понадобится разрешить удалённому пользователю присоединиться к Screen-сессии:

Ctrl+a
:acladd <ruser>

Замените <ruser> на имя удалённого пользователя, с которым он будет подключаться к Screen. После того, как вы всё сделаете, он сможет присоеди-ниться к сессии, выполнив следующую команду:

screen -x $USER/<screen ID/name>

Здесь $USER нужно заменить на имя пользователя хозяина сессии, а <Screen ID/name> — на идентификатор или имя нужной сессии. Именованными сессиями легче управлять, и я расскажу об этом подробней в конце статьи, сразу после той части, в которой обсуждается влияние Screen на надёжность работы в командной оболочке.

Последняя возможность программы, о которой я собирался рассказать, это способность разделять окно Screen надвое. Это значит, что вы можете запустить две командные оболочки парал-лельно, каждая на своей половине экрана, одна над другой. Без дополнительного вмешательства Screen может разделять окна только по горизонтали; есть патч, который позволяет включить вертикальное разделение, но в этом случае придётся самостоя-тельно собирать Screen из исходных кодов. Чтобы задей-ствовать горизонтальное разделение окна, нажмите следующую комбинацию клавиш:

C-a S

Для тех, кто не читал предыдущей статьи, поясню, что в данном случае сначала надо нажать Ctrl+a, а затем S (Shift+s). Это приведёт к разделению окна пополам, и активное окно займёт нижнюю половину. Между получив-шимися половинами можно переключаться с помощью следующей комбинации:

C-a <Tab>

Здесь <Tab> обозначает клавишу табуляции. Для тех, кто хочет задействовать верти-кальное разделение окна, я приведу ссылку на инструкцию в разделе «Читайте также».

Последнее, о чём я хотел поговорить в этой статье, это почему следует использовать Screen вместо TTY или обычного командного интерпретатора. Простой ответ на этот вопрос — личные предпочтения. Более развёрнутый ответ заключается в том, что Screen позволяет организовать многозадачность в рамках одного подключения через SSH, не допуская при этом потери данных из-за разрывов соединения, и, в добавок, она экономит вам оперативную память. Кроме того, вы сможете гораздо лучше ориентироваться в запущенных программах — если ваши окна запущены в рамках одной Screen-сессии, и вы присвоили их заголовки, то можно легко получить их список в строке состояния. Я ни в коем случае не говорю, что вы обязаны использовать Screen, но тем, кого привлекают возможности программы, я горя-чо рекомендую познакомиться с ней поближе и использовать постоянно (чего я, если честно, ещё не делаю). Как всегда, не стесняйтесь присылать свои вопросы мне на электронную почту lswest34@gmail.com. Туда же присылайте любые предло-жения по новым статьям.

Заключительная команда для Screen:

screen -S <name of screen session>

Эта команда создаёт новую сессию, используя заданное опцией -S имя для быстрого и лёгкого доступа (очень полезно, когда у вас запущено много Screen-сессий).


Читайте также:

Вертикальное разделение окон. http://scie.nti.st/2008/8/22/gnu-screen-with-vertical-split-support

Раздел справочного руководства с официальной страницы проекта, посвящён-ный используемым комбина-циям клавиш. http://www.gnu.org/software/screen/manual/html_node/Default-Key-Bindings.html#Default-Key-Bindings

Краткое и лаконичное описание настроек файла .screenrc и Screen в целом. http://www.math.utah.edu/docs/info/screen_9.html