Как использовать GNU Screen на Linux VPS

12 мин чтения·Matthieu|

Полное руководство по GNU Screen: установка, управление сессиями, разделение экрана, настройка .screenrc и работа с процессами после отключения SSH на Debian 12 и Ubuntu 24.04.

Как использовать GNU Screen на Linux VPS

Ты подключаешься к серверу по SSH, запускаешь долгий процесс, и соединение рвется. Процесс умирает. GNU Screen решает эту проблему. Он запускает терминальные сессии, которые живут независимо от SSH-соединения. Можно отключиться от сессии, закрыть SSH, вернуться через несколько часов и продолжить с того места, где остановился.

Это руководство покрывает GNU Screen от установки до повседневных рабочих процессов на Debian 12 и Ubuntu 24.04. Ты научишься управлять сессиями, окнами, разделенными областями, режимом копирования и настройкой .screenrc.

Что такое GNU Screen?

GNU Screen — это терминальный мультиплексор (terminal multiplexer). Он создает виртуальные терминальные сессии, которые работают на сервере независимо от SSH-соединения. Внутри одной сессии Screen можно открывать несколько окон, разделять терминал на области и прокручивать историю вывода.

Screen стоит между SSH-клиентом и оболочкой. Когда ты отключаешься от сессии Screen, все программы внутри нее продолжают работать. При повторном подключении ты видишь тот же вывод, те же запущенные процессы, то же состояние. Это делает его незаменимым для работы на удаленном VPS, где SSH-соединение может оборваться в любой момент.

Screen существует с 1987 года. Он доступен в стандартных репозиториях каждого крупного дистрибутива Linux. Актуальные версии: 4.9.0 на Debian 12 и 4.9.1 на Ubuntu 24.04.

Как установить GNU Screen на Debian и Ubuntu?

Screen доступен в стандартных репозиториях Debian 12 и Ubuntu 24.04. Устанавливается одной командой apt. На большинстве минимальных образов VPS он не предустановлен.

Обнови индекс пакетов и установи Screen:

sudo apt update && sudo apt install -y screen

Проверь установку:

screen --version

На Debian 12 ты увидишь:

Screen version 4.09.00 (GNU) 30-Jan-21

На Ubuntu 24.04:

Screen version 4.09.01 (GNU) 20-Aug-23

Если видишь номер версии, Screen готов к работе.

Как запустить и назвать сессию Screen?

Чтобы начать новую сессию, достаточно выполнить screen. Но запуск без имени затруднит идентификацию сессии позже. Всегда указывай имя через флаг -S.

Запусти именованную сессию:

screen -S myproject

Терминал очистится, и ты окажешься внутри сессии Screen. Все, что ты запустишь здесь, продолжит работать даже при обрыве SSH.

Проверь, что ты внутри сессии Screen:

echo $STY

Эта команда выведет имя сессии. Если видишь что-то вроде 12345.myproject, ты внутри Screen. Если ничего не выводится, ты не в сессии.

Справочник команд Screen

Все команды Screen начинаются с префикса Ctrl-a, за которым следует другая клавиша. Этот префикс называется escape-символом.

Комбинация Действие Примечание
Ctrl-a d Отключиться от сессии Сессия продолжает работать
Ctrl-a c Создать новое окно Открывает новую оболочку
Ctrl-a n Следующее окно Переключение вперед
Ctrl-a p Предыдущее окно Переключение назад
Ctrl-a " Список окон Выбор стрелками
Ctrl-a A Переименовать текущее окно Ввести имя, нажать Enter
Ctrl-a k Закрыть текущее окно Запросит подтверждение
Ctrl-a S Горизонтальное разделение Заглавная S
Ctrl-a | Вертикальное разделение Символ pipe
Ctrl-a Tab Переключение между областями Циклический обход
Ctrl-a X Закрыть текущую область Заглавная X
Ctrl-a [ Войти в режим копирования Также Ctrl-a Esc
Ctrl-a ] Вставить скопированный текст Вставка из буфера
Ctrl-a ? Показать привязки клавиш Встроенная справка

Как отключиться от сессии и подключиться обратно?

Это основной рабочий процесс. Ты запускаешь процесс в Screen, отключаешься, и процесс продолжает работать. Позже ты подключаешься обратно, чтобы проверить его.

Отключение от текущей сессии:

Нажми Ctrl-a, затем d.

Ты увидишь:

[detached from 12345.myproject]

Сессия теперь работает в фоне. Можно безопасно закрыть SSH.

Список всех сессий:

screen -ls

Вывод:

There are screens on:
	12345.myproject	(03/19/2026 02:15:30 PM)	(Detached)
1 Sockets in /run/screen/S-your_user.

Повторное подключение к сессии:

screen -r myproject

Ты снова в сессии со всем выводом и процессами на месте.

Если у тебя только одна отключенная сессия, screen -r без имени тоже сработает.

Как принудительно подключиться к уже подключенной сессии?

Иногда сессия отображается как (Attached), хотя ты к ней не подключен. Это происходит, когда SSH обрывается без корректного отключения. Screen считает, что старое соединение все еще активно.

Используй эту таблицу для выбора нужных флагов:

Сценарий Команда Что делает
Сессия показывает "Attached", но ты не подключен screen -D -r myproject Принудительно отключает старое соединение, затем подключает здесь
Сессия показывает "Attached", и ты хочешь разделить ее screen -x myproject Подключается без отключения другого соединения (multi-display)
Сессия показывает "Attached", ты хочешь перехватить ее screen -d -r myproject Отключает удаленную сторону, подключает локально

Самый частый случай — screen -D -r. Он справляется с зависшими соединениями от упавших SSH-сессий.

Проверь состояние сессии после повторного подключения:

screen -ls

Сессия должна теперь показывать (Attached).

Как сохранить процесс работающим после отключения SSH?

Запусти сессию Screen, запусти процесс внутри нее и отключись. Процесс переживет обрыв SSH, потерю сети и даже закрытие ноутбука.

Полный рабочий процесс:

screen -S training

Внутри сессии запусти долгий процесс:

python3 train_model.py --epochs 100

Отключись комбинацией Ctrl-a d. Ты увидишь:

[detached from 12345.training]

Закрой SSH. Иди пить кофе. Вернись позже:

ssh user@your-server
screen -r training

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

Как управлять несколькими окнами в Screen?

Одна сессия Screen может содержать несколько окон. Каждое окно — независимая оболочка. Думай об окнах как о вкладках в браузере.

Создай новое окно внутри сессии:

Нажми Ctrl-a c.

Откроется новая оболочка. Предыдущее окно никуда не делось. Переключайся между окнами:

  • Ctrl-a n переход к следующему окну
  • Ctrl-a p переход к предыдущему окну
  • Ctrl-a 0Ctrl-a 9 переход к окну по номеру
  • Ctrl-a " показывает список всех окон. Используй стрелки для выбора и нажми Enter.

Переименуй текущее окно для удобства:

Нажми Ctrl-a A, введи имя и нажми Enter.

Проверь, в каком окне ты находишься:

Нажми Ctrl-a ", чтобы увидеть список окон. Текущее окно отмечено звездочкой.

Закрой окно командой exit в его оболочке или нажми Ctrl-a k и подтверди клавишей y.

Как разделить терминал на области?

Screen может разделить терминал на несколько областей, каждая из которых отображает свое окно. Это полезно для наблюдения за логами в одной панели во время работы в другой.

Пошаговое создание мониторинговой раскладки

Построим раскладку из 3 панелей: основная оболочка сверху, логи внизу слева, системный мониторинг внизу справа.

Шаг 1: Запусти именованную сессию:

screen -S monitor

Шаг 2: Раздели по горизонтали. Нажми Ctrl-a S (заглавная S).

Терминал разделится на верхнюю и нижнюю области. Курсор остается в верхней.

Шаг 3: Перейди в нижнюю область. Нажми Ctrl-a Tab.

Нижняя область пуста. Нужно привязать к ней окно.

Шаг 4: Создай новое окно в нижней области. Нажми Ctrl-a c.

Теперь в нижней области есть оболочка.

Шаг 5: Раздели нижнюю область по вертикали. Нажми Ctrl-a | (символ pipe).

Нижняя половина теперь имеет левую и правую секции. Перейди в правую секцию с помощью Ctrl-a Tab.

Шаг 6: Создай еще одно окно. Нажми Ctrl-a c.

Шаг 7: Запусти инструменты мониторинга. Переключайся между областями с помощью Ctrl-a Tab:

  • Верхняя область: основная рабочая оболочка
  • Нижняя левая: запусти tail -f /var/log/syslog
  • Нижняя правая: запусти htop

Команды управления областями

Комбинация Действие
Ctrl-a S Горизонтальное разделение
Ctrl-a | Вертикальное разделение
Ctrl-a Tab Перейти к следующей области
Ctrl-a X Закрыть текущую область (окно остается открытым)
Ctrl-a Q Закрыть все области кроме текущей
Ctrl-a :resize +5 Увеличить текущую область на 5 строк
Ctrl-a :resize -5 Уменьшить текущую область на 5 строк

Важный момент: Screen не сохраняет раскладку областей при отключении. При повторном подключении все разделения исчезают, и ты видишь одно окно. Сами окна (и их процессы) сохраняются. Разделение нужно восстанавливать вручную. Если нужны постоянные раскладки, добавь команды layout в .screenrc или рассмотри tmux, который сохраняет раскладку панелей при отключении.

Как использовать режим копирования и прокрутку?

По умолчанию в сессии Screen нельзя прокрутить вверх колесиком мыши или Shift-PgUp. Screen перехватывает весь ввод. Чтобы посмотреть предыдущий вывод, нужно войти в режим копирования (copy mode).

Войди в режим копирования, нажав Ctrl-a [ или Ctrl-a Esc.

Ты в режиме навигации, похожем на vi:

Клавиша Действие
Стрелки Перемещение курсора
h/j/k/l Перемещение курсора (стиль vi)
Ctrl-u Прокрутка вверх на полстраницы
Ctrl-d Прокрутка вниз на полстраницы
0 Начало строки
$ Конец строки
g Перейти к началу буфера
G Перейти к концу буфера
/ Поиск вперед
? Поиск назад
Space Установить метку (начало/конец выделения)
Enter Скопировать выделенный текст и выйти из режима копирования
Esc Выйти из режима копирования без копирования

Чтобы скопировать текст: войди в режим копирования, переместись к началу нужного текста, нажми Space для установки первой метки, переместись к концу, нажми Space снова. Текст скопирован в буфер обмена Screen.

Чтобы вставить: нажми Ctrl-a ].

По умолчанию буфер прокрутки хранит 100 строк. Для реальной работы этого мало. Увеличь его в .screenrc:

defscrollback 10000

Это даст 10 000 строк прокрутки на каждое окно.

Как настроить Screen через .screenrc?

Screen читает файл ~/.screenrc при запуске. Этот файл управляет поведением по умолчанию, привязками клавиш, строкой состояния и стартовыми окнами.

Как выглядит хороший .screenrc?

Вот полный .screenrc с пояснением каждой директивы:

# Disable the startup splash message
startup_message off

# Use bash as the default shell
shell /bin/bash

# Set scrollback buffer to 10,000 lines
defscrollback 10000

# Use 256-color terminal
term screen-256color

# Disable visual bell (use audible bell instead)
vbell off

# Enable alternate screen support (clears screen after less/vim exit)
altscreen on

# Status bar at the bottom of the screen
hardstatus alwayslastline
hardstatus string '%{= kG}[ %{G}%H %{g}][ %=%{= kw}%?%-Lw%?%{r}(%{W}%n*%f%t%?(%u)%?%{r})%{w}%?%+Lw%?%?%= %{g}][ %{B}%Y-%m-%d %{W}%c %{g}]'

# Detach on hangup (SSH disconnect)
autodetach on

# Don't block the whole session if a window goes unresponsive
nonblock on

# Log new screen windows in utmp
deflogin on

# Start window numbering at 1 instead of 0
bind c screen 1
bind ^c screen 1
bind 0 select 10

# Named windows at startup
screen -t shell 1
screen -t logs 2
screen -t work 3

Создай этот файл:

nano ~/.screenrc

Вставь конфигурацию и сохрани.

Разбор строки формата hardstatus

Строка hardstatus — самая мощная (и запутанная) часть .screenrc. Вот что означает каждый токен в примере:

Токен Значение
%{= kG} Установить цвет: черный фон, ярко-зеленый текст
%H Имя хоста
%-Lw Все окна перед текущим
%{r}(%{W}%n*%f%t%{r}) Текущее окно: красные скобки, белый номер + флаги + название
%+Lw Все окна после текущего
%Y-%m-%d Дата в формате ГГГГ-ММ-ДД
%c Текущее время в формате ЧЧ:ММ

Коды цветов: k черный, r красный, g зеленый, y желтый, b синий, m пурпурный, c голубой, w белый. Заглавные буквы для ярких/жирных вариантов.

Запусти новую сессию, чтобы увидеть строку состояния:

screen -S test

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

Изменение escape-клавиши

Если Ctrl-a конфликтует с твоим рабочим процессом (это также «перейти к началу строки» в bash), можно перепривязать его:

# Use Ctrl-j as the escape key instead of Ctrl-a
escape ^Jj

После этого изменения все команды Screen используют Ctrl-j вместо Ctrl-a. Выбирай клавишу, которую редко используешь.

Типичные сценарии работы с GNU Screen на VPS

Поддержание работы деплоя

screen -S deploy
./deploy.sh --production
# Ctrl-a d to detach

Проверь позже:

screen -r deploy

Мониторинг нескольких лог-файлов

screen -S logs

Внутри сессии:

  1. Ctrl-a S для горизонтального разделения
  2. В верхней области: tail -f /var/log/nginx/access.log
  3. Ctrl-a Tab для перехода вниз
  4. Ctrl-a c для нового окна
  5. tail -f /var/log/nginx/error.log

Запуск длительной задачи обучения (AI-разработчики)

screen -S training
python3 -u train.py --model llama --epochs 50 2>&1 | tee training.log
# Ctrl-a d to detach

Флаг -u отключает буферизацию вывода Python, чтобы ты видел вывод в реальном времени при повторном подключении. Пайп через tee сохраняет вывод в файл как резервную копию.

Быстрое переподключение после обрыва SSH

Если SSH оборвался, пока ты был внутри Screen, просто переподключись:

ssh user@your-server
screen -D -r

screen -D -r находит твою сессию, принудительно отключает зависшее соединение и подключает заново.

GNU Screen vs tmux: что выбрать?

Screen и tmux — оба терминальные мультиплексоры. Они решают одну и ту же задачу. Вот честное сравнение:

Характеристика GNU Screen tmux
Первый релиз 1987 2007
Лицензия GPL-3.0 ISC (BSD-подобная)
Активная разработка Медленная (5.0 вышла в августе 2024 после долгого затишья) Активная (регулярные релизы)
Сохранение раскладки панелей Теряется при отключении Сохраняется при отключении
Префикс по умолчанию Ctrl-a Ctrl-b
Конфигурация .screenrc (собственный синтаксис) .tmux.conf (собственный синтаксис)
Экосистема плагинов Отсутствует Большая (tpm, tmux-resurrect и др.)
Статус в RHEL/Fedora Удален начиная с RHEL 8 Включен по умолчанию
Поддержка последовательных портов Да (screen /dev/ttyUSB0) Нет
Учебные материалы Много, но устаревшие Много и актуальные

Когда использовать Screen:

  • Нужен доступ к последовательному порту (screen /dev/ttyUSB0 115200)
  • Ты на старой системе, где Screen предустановлен, а tmux нет
  • Нужен простой рабочий процесс отключения/подключения и ничего больше

Когда использовать tmux:

  • Нужны постоянные раскладки панелей, которые переживают отключение
  • Нужна активная экосистема плагинов
  • Ты на RHEL 8+ или Fedora (Screen отсутствует в репозиториях)
  • Нужно скриптовое создание окон/панелей

Оба инструмента одинаково хорошо справляются с основной задачей (сохранение процессов после обрыва SSH). Если начинаешь с нуля, у tmux больше динамики и лучшие настройки по умолчанию. Если Screen уже часть твоего рабочего процесса, нет веских причин переходить. Смотри наше руководство по tmux для полного разбора.

Устранение типичных проблем Screen

«There is a screen on ... (Attached)», но ты не подключен

Это происходит после падения SSH. Старое соединение не отключилось корректно.

screen -D -r session_name

Эта команда принудительно отключает призрачное соединение и подключает твой терминал.

Мертвые сессии в списке

Иногда сессии отображаются как (Dead) после перезагрузки сервера или краша.

screen -wipe

Вывод:

There are screens on:
	12345.old_session	(Dead ???)
Removed dead screens.
1 socket wiped out.

Эта команда удаляет устаревшие файлы сокетов. Выполни screen -ls, чтобы убедиться, что они исчезли.

Терминал завис / не принимает ввод

Скорее всего, ты случайно нажал Ctrl-a s. Это сигнал XOFF, который приостанавливает вывод терминала.

Исправление:

Ctrl-a q

Это отправляет XON для возобновления вывода. Если ты никогда не используешь flow control, отключи его в .screenrc:

defflow off

Screen показывает искаженные символы

Терминал и Screen не согласны по кодировке или поддержке цветов. Добавь в .screenrc:

defutf8 on
term screen-256color

Затем запусти новую сессию. Существующие сессии не подхватят изменения .screenrc.

Где логи Screen?

Screen не пишет в системный лог. Чтобы включить логирование для отдельного окна:

Ctrl-a H

Это переключает логирование для текущего окна. Логи сохраняются в screenlog.N в директории, где ты запустил сессию. N соответствует номеру окна.

Чтобы проверить, работает ли Screen на уровне системы:

ps aux | grep screen

Справочник флагов CLI

Флаг Описание Пример
-S name Запустить именованную сессию screen -S myapp
-r [name] Подключиться к отключенной сессии screen -r myapp
-d -r name Отключить удаленную сторону, подключить здесь screen -d -r myapp
-D -r name Принудительно отключить и подключить screen -D -r myapp
-x name Подключиться к уже подключенной сессии (multi-display) screen -x myapp
-ls Список всех сессий screen -ls
-wipe Удалить мертвые сессии screen -wipe
-X command Отправить команду запущенной сессии screen -S myapp -X quit
-dmS name Запустить отключенную именованную сессию screen -dmS daemon
-L Включить логирование с самого начала screen -L -S myapp

Запуск сессии в отключенном режиме (-dmS) полезен для скриптов и systemd-юнитов, которым нужно запускать сессии Screen без интерактивного терминала.

Copyright 2026 Virtua.Cloud. Vse prava zashchishcheny.

Готовы попробовать?

Разверните свой сервер за секунды. Linux, Windows или FreeBSD.

Смотреть тарифы VPS