GNU Screen (Русский)

Состояние перевода:
На этой странице представлен перевод статьи
GNU Screen
. Дата последней синхронизации: 15 января 2022. Вы можете
помочь
синхронизировать перевод, если в английской версии произошли
изменения
.
Ссылки по теме
tmux
Ratpoison
Xpra
GNU Screen
— это полноэкранный оконный менеджер для терминала, который мультиплексирует его между несколькими процессами, обычно интерактивными оболочками. Программы, запущенные в Screen, продолжают работать, когда их окно в данный момент скрыто, и даже когда весь сеанс screen отсоединён от пользовательского терминала.
Обзор возможностей можно почитать в
документации GNU Screen
.
Установка
Установите
пакет
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 -list
Подключение к существующему сеансу по его имени:
$ 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:
~/.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
перед псевдонимами:
~/.bashrc or ~/.zshrc
if [[ -z "$STY" ]]; then
   screen -xRR название_сеанса
fi
Использование 256 цветов
По умолчанию Screen использует эмулятор 8-цветного терминала. Чтобы включить больше цветов, вам нужно использовать терминал, который их поддерживает, и установить правильное значение
term
. Будет использоваться
terminfo
для описания того, как будут интерпретироваться
управляющие коды ANSI
. Запись в структуре базы данных terminfo должна существовать,
ncurses
предоставляет много описаний в
/usr/share/terminfo/
.
Сначала попробуйте общее значение:
~/.screenrc
term screen-256color
Если это не работает, попробуйте установить значение, соответствующее вашему текущему терминалу. Например, при использовании терминала на основе
xterm
:
~/.screenrc
term xterm-256color
Для
rxvt-unicode
:
~/.screenrc
term rxvt-unicode-256color
Примечание
Файл
/usr/share/terminfo/r/rxvt-unicode-256color
предоставляется пакетом
rxvt-unicode-terminfo
, который устанавливается как зависимость пакета
rxvt-unicode
. Однако, если вы подключаетесь к серверу по
SSH
и на нём запускаете
screen
, нужный файл terminfo может не найтись на сервере. В таком случае можно скопировать
/usr/share/terminfo/r/rxvt-unicode-256color
на сервер в каталог
~/.terminfo/
.
В крайнем случае попробуйте использовать
termcapinfo
:
~/.screenrc
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
Информативный статус-бар
Стандартный статус бар немного пустоват. Вы можете посчитать это полезным:
~/.screenrc
hardstatus off
hardstatus alwayslastline
hardstatus string '%{= kG}[ %{G}%H %{g}][%= %{= kw}%?%-Lw%?%{r}(%{W}%n*%f%t%?(%u)%?%{r})%{w}%?%+Lw%?%?%= %{g}][%{B} %m-%d %{W} %c %{g}]'
Ещё вариант из
frodfrog's blog
[
устаревшая ссылка
2023-04-23 ⓘ]
:
~/.screenrc
hardstatus alwayslastline '%{= G}[ %{G}%H %{g}][%= %{= w}%?%-Lw%?%{= R}%n*%f %t%?%{= R}(%u)%?%{= w}%+Lw%?%= %{= g}][ %{y}Load: %l %{g}][%{B}%Y-%m-%d %{W}%c:%s %{g}]'
В Screen версии 5 (
master-ветка
) escape-коды изменились:
~/.screenrc
truecolors on
hardstatus off
backtick 0 5 5 "/bin/date" '+%Y-%m-%d'
backtick 1 5 5 "/bin/date" '+%H:%M'
hardstatus alwayslastline '%{#00ff00}[ %H ][%{#ffffff}%= %{7}%?%-Lw%?%{1;0}%{1}(%{15}%n%f%t%?(%u)%?%{1;0}%{1})%{7}%?%+Lw%?%? %=%{#00ff00}][ %{#00a5ff}%{6}%0` %{#ffffff}%{7}%1`%{#00ff00} ]'
Статус-бар наверху:
~/.screenrc
hardstatus firstline
Отключение приветственного сообщения
~/.screenrc
startup_message off
Использование hardstatus в качестве динамического заголовка окна терминала
Это довольно просто: переделайте текущий
hardstatus
на
caption
с уведомлением и отредактируйте соответствующим образом:
~/.screenrc
backtick 1 5 5 true
termcapinfo rxvt* 'hs:ts=\E]2;:fs=\007:ds=\E]2;\007'
hardstatus string "screen (%n: %t)"
caption string "%{= kw}%Y-%m-%d;%c %{= kw}%-Lw%{= kG}%{+b}[%n %t]%{-b}%{= kw}%+Lw%1`"
caption always
Это отобразит что-то вроде
screen (0 bash)
в заголовке окна вашего терминала. Caption содержит дату, текущее время и раскрашивает коллекцию экранных окон.
Использование механизма прокрутки X
Доступ к буферу прокрутки GNU Screen можно получить с помощью
Ctrl+a
[
. Однако это очень неудобно. Чтобы использовать полосу прокрутки эмулятора терминала (например, в xterm или Konsole), добавьте следующую строку
[1]
:
~/.screenrc
termcapinfo xterm*|rxvt*|kterm*|Eterm* ti@:te@
Перемещение работающий программы в Screen
Если вы запустили программу вне Screen, но теперь хотите поместить её внутрь Screen, вы можете использовать
reptyr
, чтобы переназначить процесс с его текущего TTY на Screen.
Установите
пакет
reptyr
.
Найдите PID нужного процесса (например с помощью
ps ax
) и используйте его как аргумент для команды reptyr внутри нужного окна screen:
$ reptyr
pid
Использование другой строки приглашения bash внутри screen
Добавьте в
.bashrc
[2]
:
if [ -z $STY ]
then
        PS1="ОБЫЧНЫЙ PROMPT"
else  
        PS1="PROMPT ДЛЯ SCREEN"
fi
Отключение визуального сигнала
По умолчанию при получении
ASCII-символа Bell
Screen некрасиво мерцает. Можно отключить это и вернуть звуковой сигнал с помощью этой опции:
~/.screenrc
vbell off
Избавление от вертикальных и горизонтальных полос
Чтобы скрыть вертикальные полосы:
$ ~/.screenrc
rendition so =00
Чтобы скрыть горизонтальные полосы,	установите в
caption
основной и фоновый цвета в default (d) и выведите пустоту (" "):
~/.screenrc
caption string "%{03} "
Если это не сработает, попробуйте
caption string "%{00} "
. Для стандартного чёрно-белого caption используйте
caption string "%{00}%3n %t"
.
Решение проблем
Исправление остатков текста после редактора
После открытия и последующего закрытия текстового редактора внутри screen (например
nano
) текст может оставаться видимым в терминале. Исправление:
~/.screenrc
altscreen on
Исправление столбца Name в windowlist, который отображает только "bash"
Добавьте в
~/.screenrc
:
~/.screenrc
windowlist string "%4n %h%=%f"
Смотрите также
Wikipedia:GNU Screen
GNU Screen User's Manual
Gentoo:Screen
Arch Forums - коллекция настроек .screenrc со скриншотами
Arch Forums - Про проблему с 256 цветами в urxvt
MacOSX Hints - Automatically using screen in your shell
[
устаревшая ссылка
2025-11-16 ⓘ]