Учимся пользоваться GNU Screen

При работе по SSH у вас в очередной раз теряется соединение и с ним вся рабочая среда? Эту проблему поможет решить программа GNU Screen.

Введение

Когда я работаю через SSH, иногда возникают задачи:

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

В этом мне помогает программа GNU Screen. Изначально, это так называемый мультиплексер терминала, предназначенный для совместной работы нескольких человек. Но я использую его для поддержания сессии на удаленных машинах.

Интересные факты

Еще существует более известный мультиплексер терминала Tmux, но я не увидел у него каких-то преимуществ перед Screen. А Screen установлен на всех машинах у меня на работе.

GNU Screen довольно тяжело гуглить, потому что поисковые запросы по слову “screen” выдают все что угодно, кроме него. Поэтому нужно использовать именно термин “gnu screen”.

Типичное использование

Захожу на сервер, проверяю наличие уже запущенных сессий.

screen -list, screen -ls - перечислить запущенные сессии

Если сессий нет, начинаю новую.

screen, screen -S [name] - начать новую сессию. Лучше создать именованную сессию, чтобы потом легче переподключаться или напомнить себе, зачем ее вообще запускал.

Если сессия есть, можно к ней подключиться.

screen -r - если ранее вышел из сессии и теперь нужно продолжить. screen -dr - если сессия прервалась аварийно и зависла в состоянии attached. То есть, screen думает, что там еще кто-то работает и не пускает просто так. -d означает detach, то есть отобрать сессию у пользователя.

Можно использовать с именованными сессиями: screen -r [name], screen -dr [name].

Далее, обычные действия внутри сессии.

  • Создать окно - Ctrl + a, c.
  • Выбрать окно из списка - Ctrl + a, ".
  • Переименовать окно - Ctrl + a, A.
  • Переключиться на следующее окно - Ctrl + a, Ctrl + a или Ctrl (зажать) + a, a.
  • Закрыть сессию Ctrl + d.
  • Отключиться от сессии, не закрывая ее - Ctrl + a, d.

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

Если в bash вы привыкли переходить на начало строки комбинацией Ctrl + a, то в screen нужно использовать Ctrl + a, a.

Перелистывание

Самым большим неудобством при работе со Screen у меня вызывало перелистывание содержимого экрана. Для этого по умолчанию нужно произносить такое заклинание: Ctrl + a, [ - включить copy mode, затем листать стрелками или hjkl. Поддерживает Vim-like перемещения. Чтобы исправить этот недостаток, нужно создать файл ~/.screenrc со следующим заклинанием:

# Влючить скролл колесиком мыши
termcapinfo xterm*|xterm-color|screen* ti@:te@

Остальной функционал

Чтобы вызвать страницу помощи, можно нажать Ctrl + a, ?. Там перечислены остальные команды. Но зачастую непонятно, что они делают, поэтому я определил для себя рабочий набор (перечислен в этой статье) и пользуюсь в основном им.

Еще есть командный режим Ctrl + a, :. В нем можно использовать текстовые команды вместо горячих клавиш. Сами команды перечислены на странице помощи.

Заключение

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

Сайт не хранит данные пользователей
Malchikovma.ru на GitHub
Создано при помощи Hugo
Тема Stack, дизайн Jimmy