- Linux `screen` Command – Run in Background
- Linux `screen` Command
- GNU Screen (Русский)
- Установка
- Использование
- Стандартные команды
- Вводимые команды
- Именованные сеансы
- Настройка Screen
- Советы и рекомендации
- Автозапуск с помощью systemd
- Изменение escape-комбинации
- Запуск в окне 1
- Вложенные сеансы Screen
- Запуск Screen во всех командных оболочках
- Использование 256 цветов
- Информативный статус-бар
- Отключение приветственного сообщения
- Использование hardstatus в качестве динамического заголовка окна терминала
- Использование механизма прокрутки X
- Перемещение работающий программы в Screen
- Использование другой строки приглашения bash внутри screen
- Отключение визуального сигнала
- Избавление от вертикальных и горизонтальных полос
- Решение проблем
- Исправление остатков текста после редактора
- Исправление столбца Name в windowlist, который отображает только «bash»
- Смотрите также
Linux `screen` Command – Run in Background
The Linux screen command is extremely useful for the cases when you need to start a long-running process on a remote machine.
Even if your connection drops and the SSH session is terminated, with the screen command you can be sure that the process will keep running in the background and the “lost” terminal session can be resumed.
This note shows how install and how to use the Linux screen command to run a process in the background.
Cool Tip: How to Scroll Up while running the screen command! Read more →
Linux `screen` Command
Install the screen using one of the following commands, depending on your Linux distribution:
$ sudo apt-get install screen - or - $ sudo yum install screen
Start a screen session:
Press the space or return button to close the license agreement and continue to the screen shell, that looks just like a regular terminal window.
Am I Inside a “Screen”? An interface inside a screen session is exactly as the command prompt. To determine whether you are inside the screen or not, execute the echo $STY command. It returns the name of the screen you’re in. If it is null – you are inside the “real” terminal.
To start a named screen session, run:
To execute a command in the background but don’t attach to the screen session (useful for system startup scripts), run:
$ screen -dm — or — $ screen -S -dm
Detach from the screen (disconnect the screen from the terminal and put it into the background): Ctrl + A then D .
To terminate the current screen session (not put it into the background but close), press Ctrl + D or type:
List the currently running screen sessions:
Reattach to the screen (resume the detached screen session):
To reattached to the the specific screen session, run:
Kill the specific screen session:
To kill all the screen sessions, run:
Cool Tip: How to rename a screen session! Read more →
GNU Screen (Русский)
Состояние перевода: На этой странице представлен перевод статьи GNU Screen. Дата последней синхронизации: 15 января 2022. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.
GNU Screen — это полноэкранный оконный менеджер для терминала, который мультиплексирует его между несколькими процессами, обычно интерактивными оболочками. Программы, запущенные в Screen, продолжают работать, когда их окно в данный момент скрыто, и даже когда весь сеанс screen отсоединён от пользовательского терминала.
Обзор возможностей можно почитать в документации GNU Screen.
Установка
Использование
Для ввода команд нужно нажать escape-комбинацию (по умолчанию Ctrl+a ) и затем нужное сочетание клавиш.
Некоторым пользователям Ctrl+a кажется неудобным. Можно назначить другое сочетание клавиш, как описано в разделе #Изменение escape-комбинации.
Стандартные команды
- ctrl+a ? Отображает список команд и их параметры по умолчанию
- ctrl+a : Ввод команды для screen
- ctrl+a » Список окон
- ctrl+a 0 Открыть окно 0
- ctrl+a A Переименовать текущее окно
- ctrl+a a Отправить ctrl+a в текущее окно
- ctrl+a c Создать новое окно
- ctrl+a S Разделить текущий регион на два по горизонтали
- Ctrl+a | Разделить текущий регион на два по вертикали
- ctrl+a tab Переключить фокус ввода на следующий регион
- ctrl+a ctrl+a Переключение между текущим и предыдущим регионами
- ctrl+a Esc Перейти в режим копирования (используйте enter для выделения текста)
- ctrl+a ] Вставка текста
- ctrl+a Q Закрыть все регионы кроме текущего
- ctrl+a X Закрыть текущий регион
- ctrl+a d Отключиться от текущего сеанса screen, оставив его работающим в фоне. Для переподключения используйте screen -r
Вводимые команды
- Ctrl+a :quit Закрывает все окна и завершает сеанс screen
- Ctrl+a :source ~/.screenrc Перезагружает файл настроек screenrc (также можно использовать /etc/screenrc )
Именованные сеансы
Создание сеанса с определённым названием:
$ screen -S название_сеанса
Переименование текущего сеанса:
Ctrl+a :sessionname название_сеанса
Список всех существующих сеансов текущего пользователя:
Подключение к существующему сеансу по его имени:
$ screen -x название_сеанса
$ screen -r название_сеанса
Настройка Screen
Вы можете изменить настройки Screen по умолчанию в соответствии с вашими предпочтениями в файле .screenrc , который содержит команды, которые выполнятся при запуске (например, ~/.screenrc или на лету с помощью ввода команд (например, Ctrl+a :vbell off ).
Советы и рекомендации
Автозапуск с помощью systemd
Эта служба автоматически запускает screen для указанного пользователя (например, systemctl enable screen@florian ). Важно запускать эту службу как системную, так как systemd —user может не запуститься, а также будет завершён после закрытия последнего сеанса пользователя.
/etc/systemd/system/screen@.service
[Unit] Description=screen After=network.target [Service] Type=simple User=%i ExecStart=/usr/bin/screen -DmS autoscreen ExecStop=/usr/bin/screen -S autoscreen -X quit [Install] WantedBy=multi-user.target
Изменение escape-комбинации
Изменение стандартной escape-комбинации может быть хорошей идеей не только потому, что «a» обычно набирается левым мизинцем, но также и потому, что Ctrl+a часто используется как команда beginning-of-line в GNU Readline и bash-совместимых командных оболочках.
Её можно изменить с помощью опции escape в ~/.screenrc или параметра -e для команды screen .
Например, если вы заметите, что редко используете Ctrl+j в своей оболочке или редакторе, вы можете использовать escape ^Jj для изменения escape-последовательности на Ctrl+j . Второй «j» означает, что литерал Ctrl+j может быть отправлен на терминал путём нажатия Ctrl+j j . Для пользователей Dvorak более удобным может быть сочетание клавиш Ctrl+t ( escape ^Tt ).
Более экзотические варианты: escape « , который задаёт клавишу ` , или escape ^^^ , который задаёт Ctrl+^ .
Escape-комбинация также называется «командным символом» («command character») в документации Screen.
Запуск в окне 1
По умолчанию, первое окно screen имеет номер 0. Возможно, вы предпочтете начать с нумерацию с единицы, добавьте это в ~/.screenrc:
bind c screen 1 bind ^c screen 1 bind 0 select 10 screen 1
Вложенные сеансы Screen
Можно случайно застрять во вложенном сеансе screen. Частый сценарий: вы запускаете сеанс SSH внутри сеанса screen. В сеансе SSH вы запускаете screen. По умолчанию первый сеанс screen будет перехватывать команды Ctrl+a . Чтобы отправить команду второму сеансу screen, используйте Ctrl+a a и затем свою команду. Например:
- Ctrl+a a d Отсоединяется от внутреннего сеанса screen.
- Ctrl+a a K Завершает (kill) внутренний сеанс screen.
Запуск Screen во всех командных оболочках
Для Bash и Zsh добавьте следующий фрагмент в ваш .bashrc or .zshrc перед псевдонимами:
if [[ -z "$STY" ]]; then screen -xRR название_сеанса fi
Использование 256 цветов
По умолчанию Screen использует эмулятор 8-цветного терминала. Чтобы включить больше цветов, вам нужно использовать терминал, который их поддерживает, и установить правильное значение term. Будет использоваться terminfo для описания того, как будут интерпретироваться управляющие коды ANSI. Запись в структуре базы данных terminfo должна существовать, ncurses предоставляет много описаний в /usr/share/terminfo/ .
Сначала попробуйте общее значение:
Если это не работает, попробуйте установить значение, соответствующее вашему текущему терминалу. Например, при использовании терминала на основе xterm:
Примечание: Файл /usr/share/terminfo/r/rxvt-unicode-256color предоставляется пакетом rxvt-unicode-terminfo , который устанавливается как зависимость пакета rxvt-unicode . Однако, если вы подключаетесь к серверу по SSH и на нём запускаете screen, нужный файл terminfo может не найтись на сервере. В таком случае можно скопировать /usr/share/terminfo/r/rxvt-unicode-256color на сервер в каталог ~/.terminfo/ .
В крайнем случае попробуйте использовать termcapinfo:
attrcolor b ".I" # allow bold colors - necessary for some reason termcapinfo xterm 'Co#256:AB=\E[48;5;%dm:AF=\E[38;5;%dm' # tell screen how to set colors. AB = background, AF=foreground defbce on # use current bg color for erased chars
Информативный статус-бар
Стандартный статус бар немного пустоват. Вы можете посчитать это полезным:
hardstatus off hardstatus alwayslastline hardstatus string '%[ %%H %][%= %%?%-Lw%?%(%%n*%f%t%?(%u)%?%)%%?%+Lw%?%?%= %][% %m-%d % %c %]'
hardstatus alwayslastline '%[ %%H %][%= %%?%-Lw%?%%n*%f %t%?%(%u)%?%%+Lw%?%= %][ %Load: %l %][%%Y-%m-%d %%c:%s %]'
В Screen версии 5 (master-ветка) escape-коды изменились:
truecolors on hardstatus off backtick 0 5 5 "/bin/date" '+%Y-%m-%d' backtick 1 5 5 "/bin/date" '+%H:%M' hardstatus alwayslastline '%[ %H ][%%= %%?%-Lw%?%%(%%n%f%t%?(%u)%?%%)%%?%+Lw%?%? %=%][ %%%0` %%%1`% ]'
Отключение приветственного сообщения
Использование hardstatus в качестве динамического заголовка окна терминала
Это довольно просто: переделайте текущий hardstatus на caption с уведомлением и отредактируйте соответствующим образом:
backtick 1 5 5 true termcapinfo rxvt* 'hs:ts=\E]2;:fs=\007:ds=\E]2;\007' hardstatus string "screen (%n: %t)" caption string "%%Y-%m-%d;%c %%-Lw%%[%n %t]%%%+Lw%1`" caption always
Это отобразит что-то вроде screen (0 bash) в заголовке окна вашего терминала. Caption содержит дату, текущее время и раскрашивает коллекцию экранных окон.
Использование механизма прокрутки X
Доступ к буферу прокрутки GNU Screen можно получить с помощью Ctrl+a [ . Однако это очень неудобно. Чтобы использовать полосу прокрутки эмулятора терминала (например, в xterm или Konsole), добавьте следующую строку [1]:
termcapinfo xterm*|rxvt*|kterm*|Eterm* ti@:te@
Перемещение работающий программы в Screen
Если вы запустили программу вне Screen, но теперь хотите поместить её внутрь Screen, вы можете использовать reptyr, чтобы переназначить процесс с его текущего TTY на Screen.
Найдите PID нужного процесса (например с помощью ps ax ) и используйте его как аргумент для команды reptyr внутри нужного окна screen:
Использование другой строки приглашения bash внутри screen
if [ -z $STY ] then PS1="ОБЫЧНЫЙ PROMPT" else PS1="PROMPT ДЛЯ SCREEN" fi
Отключение визуального сигнала
По умолчанию при получении ASCII-символа Bell Screen некрасиво мерцает. Можно отключить это и вернуть звуковой сигнал с помощью этой опции:
Избавление от вертикальных и горизонтальных полос
Чтобы скрыть вертикальные полосы:
Чтобы скрыть горизонтальные полосы, установите в caption основной и фоновый цвета в default (d) и выведите пустоту (» «):
Если это не сработает, попробуйте caption string «% » . Для стандартного чёрно-белого caption используйте caption string «%%3n %t» .
Решение проблем
Исправление остатков текста после редактора
После открытия и последующего закрытия текстового редактора внутри screen (например nano) текст может оставаться видимым в терминале. Исправление: