Как использовать GNU Screen на Linux VPS
Полное руководство по 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 0—Ctrl-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
Внутри сессии:
Ctrl-a Sдля горизонтального разделения- В верхней области:
tail -f /var/log/nginx/access.log Ctrl-a Tabдля перехода внизCtrl-a cдля нового окна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