Screen

Материал из SysWiki

screen — терминальный мультиплексор, то есть, приложение, позволяющее сохранять состояние сессии работы пользователя в консоли между подключениями, а также переключаться между несколькими сессиями в одном окне.

При разрыве соединения по SSH или при завершении работы эмулятора терминала, запущенные там приложения будут закрыты. Во избежание этого, используются терминальные мультиплексоры, в частности — screen: такое приложение запускается после подключения к системе (пользователем вручную или автоматически), в нём пользователь запускает приложения, а при разрыве соединения терминальный мультиплексор продолжит работу, вместе с запущенными в нём приложениями, и к нему можно будет в дальнейшем подключиться, продолжив работу с прерванной сессией. Кроме того, терминальный мультиплексор позволяет работать с несколькими терминальными сессиями в рамках одного подключения, переключаясь между ними.

Возможности программы

Управление сессиями

Подключение к сессии

После открытия терминала или после подключения к удалённой машине по SSH, пользователь выполняет там команду вида:

screen -DR user

Здесь «user» — произвольное имя сессии (можно открыть несколько сессий с разными, и потом подключаться к выбранной, указав в команде её имя), а комбинация ключей -D -R (которую кратко можно записать как -DR) означает, что если сессия с заданным именем ещё не существует, она будет создана, а если она уже была запущена этим пользователем ранее, то будет открыта, причём, если она работала не в фоне, а оставалась открытой на другом терминале, то там произойдёт отключение (в зависимости от варианта подключения это означает, что будет закрыто окно эмулятора терминала, будет осуществлён выход из сеанса работы пользователя в консоли или будет разорвано соединение по SSH).

После выполнения команды пользователь снова увидит приглашение командной строки, но работа уже будет осуществляться внутри сессии, организованной программой screen.

Команду screen -DR user стоит запомнить в первую очередь, поскольку она решает важную задачу, она позволяет избежать ситуаций, когда из-за случайного разрыва связи на удалённом компьютере аварийно завершается команда, прерывать которую было нежелательно. Данную команду стоит запускать сразу после подключения к удалённому компьютеру (это можно автоматизировать). Все остальные функции данной программы возможно не так важны, как эта.

Отключение от сессии

Чтобы отключиться от сессии (оставив её работать), можно ввести следующую клавиатурную последовательность: Ctrl-a d (сначала нажимается и отпускается комбинация клавиш Ctrl-a, далее нажимается клавиша d; вообще говоря, Ctrl-a — это комбинация клавиш для перехода к управлению screen, к примеру, клавиатурная последовательность Ctrl-a ? покажет справку по клавиатурным последовательностям для управления screen, также нужно помнить, что буквы в верхнем и нижнем регистре в клавиатурных последовательностях могут иметь разное назначение).

Кроме того, если вы работаете в эмуляторе терминала, то, для отключения от сессии, можно просто закрыть соответствующее окно.

Просмотр списка сессий

Для того, чтобы увидеть список сессий, принадлежащих пользователю, можно использовать команду вида:

screen -ls

Результат будет примерно такого вида:

 There are screens on:
 
        67218.backup    (27.01.2024 23:25:10)   (Attached)
 
        65969.admin     (27.01.2024 23:03:36)   (Detached)
 
 2 Sockets in /run/screen/S-root.

В данном примере было запущено две сессии: командой screen -DR admin была создана первая, далее был осуществлено отключение от сессии и была создана вторая сессия командой screen -DR backup. Команда screen -ls вывела информацию об этих двух сессиях, числа — это идентификаторы процессов screen, за ними через точку следуют имена сессий, далее в скобках — дата и время создания сессий и далее, в других скобках — состояние (Detached означает, что сессия работает в фоне, Attached — что к ней осуществлено подключение).

Блокирование терминала

Клавиатурная последовательность Ctrl-a x блокирует терминал. Для разблокировки потребуется ввод пароля. Эта комбинация не то, чтобы сильно нужна (часто проще закрыть окно эмулятора терминала и потом заново подключиться, чем вводить пароль), но эту комбинацию иногда можно случайно нажать, поэтому о ней нужно знать.

Управление окнами

Программа screen позволяет, в рамках одной сессии, открывать несколько окон (здесь под окнами подразумеваются не окна графического интерфейса, а несколько текстовых терминалов, доступных пользователю в рамках одного подключения). По умолчанию создаётся одно окно, но, при необходимости, количество окон можно увеличить.

Просмотр списка окон и переключение между ними

Для просмотра списка окон служит клавиатурная последовательность Ctrl-a ". При её наборе будет показан список окон, каждая строка в котором начинается с номера окна и, далее, идёт его название. В Linux обычно по умолчанию все окна имеют одинаковое называние «bash», по имени запущенной в них программы, но их можно поменять для каждого из окон. Вернуться из списка окон обратно можно нажав клавишу Esc, или можно выбрать нужное окно клавишами «вверх» и «вниз», и переключиться в выбранное окно нажав Enter.

Создание нового окна

Для создания нового окна служит клавиатурная последовательность Ctrl-a c. После создания нового окна автоматически происходит переключение на него.

Переименование окна

Для переименования окна предназначена клавиатурная последовательность Ctrl-a A (обратите внимание, что вторая буква A должна быть в верхнем регистре). После набора последовательности слева внизу будет показан текст вида «Set window's title to: » и, далее, текущее название окна, которое можно стереть и ввести вместо него другое.

Если к некоторым окнам нужно периодически обращаться, то лучше их переименовать для того, чтобы не тратить время на поиск нужного окна.

Закрытие окна

Окно можно закрыть просто введя команду exit в нём, но иногда возникают ситуации, когда приложение, запущенное в окне, работает некорректно, не даёт вернуться в командную оболочку, тогда можно закрыть текущее окно клавиатурной последовательностью Ctrl-a k, при этом будет задан запрос на подтверждение с текстом вида «Really kill this window [y/n]», и нужно нажать y для подтверждения.

Ссылки