|
|
Bog BOS: Менеджер виртуальных терминалов screen
|
Скопировано с bog.pp.ru: 2026.07.10
Bog BOS: Менеджер виртуальных терминалов screen
screen - мультиплексирует несколько виртуальных терминалов на одном физическом (или не очень) терминале.
В качестве физического терминала может использоваться как реальный терминал (в наше время практически никогда),
так и виртуальные терминалы (ssh, xterm, gnome-terminal и т.п.) с использованием termcap (устарело) и terminfo.
Виртуальный терминал имитирует DEC VT100, ISO 6429 (ECMA 48, ANSI X3.64), ISO 2022,
в котором запускается оболочка или указанная программа,
которая продолжает работать при переключении на другой виртуальный терминал или отсоединении пользователя.
Обеспечивает менеджер виртуальных терминалов (окон), исторический буфер (scrollback),
журналирование, отключение от сессии с продолжением работы запущенной программы
и подключение к сессии снова, многопользовательский режим (не описано), буфер редактирования (не описано),
преобразование строки ввода, отображение символов в другую кодировку (рекомендую пользоваться UTF-8).
Сессия. При создании сессии запускается мультиплексор виртуальных терминалов SCREEN,
это сервер, поддерживающий работу запущенных в рамках сессии программ (оболочек).
screen является клиентом, который позволяет подключиться к серверу.
Завершение работы клиента не затрагивает работу сервера и запущенных в нём программ.
Сессия завершается при завершении программы в последнем активном окне.
Окно - в рамках сессии screen можно создавать произвольное количество окон,
в каждом из которых запускать свою программу (оболочку).
При создании и удалении каждого окна обычно пишется учётная информация в /var/log/wtmp, /var/log/lastlog и т.п. (используется командами who, last и т.п.).
Регион - часть виртуального окна в формате прямоугольника.
Можно копировать его содержимое, очищать, перемещать и т.д. В статье не описаны ибо не использую.
Исторический буфер (scrollback buffer) хранится сервером и обеспечивает возможность
посмотреть историю сессии, поиск, копирование.
Буфер редактирования (paste buffer) позволяет копировать содержимое региона,
перемещать, редактировать, выводить в файл, вводить из файла.
Обработка команд screen внутри сессии (обычно начинаются с ^A, за которым идёт 1 символ).
Ключи запуска:
В дистрибутивах серии Red Hat установлен setgid (root:screen). Но может быть использоваться setuid root.
Некоторые привязки команд screen к символу после ^A (^A и a можно поменять на другой ключом "-e", например, "-e ^Bb"):
- ? # вывести список команд и их привязок к символу
- a # передать метасимвол (^A) программе в окне
- A # установить имя окна (см. )
- " # вывести список окон
- ' # запросить номер или имя окна для переключения
- c # создать новое окно, запустить в нём оболочку и сделать его активным
- d # отсоединить экран от терминала
- f # переключить режим обработки потока (on, off и auto)
- h # записать копию окна в hardcopy.НомерОкна; каталог задаётся командой hardcopydir
- H # включить или выключить журнализацию в screenlog.НомерОкна
- i # вывести информацию об окне в строку сообщений (строку состояния (заголовок окна терминала) или в нижнюю строку)
- k # убить окно
- l # перерисовать окно
- n # переключиться на следующее окно
- p # переключиться на предыдущее окно
- q # послать ^Q
- s # послать ^S
- t # вывести информацию о системе
- x # заблокировать терминал
- Z # сбросить состояние виртуального терминала
- \ # завершить сессию
- : # войти в командный режим; будет запрошена команда и параметры
- [ или Esc # войти в режим прокрутки и копирования; выход по Esc
- > # записать буфер редактирования в /tmp/screen-exchange
- < # прочитать /tmp/screen-exchange в буфер редактирования
Работа в режиме прокрутки и копирования:
- Esc - выход
- h или ^h или стрелка влево
- l или стрелка вправо
- j или стрелка вниз
- k или стрелка вверх
- 0 # в левую позицию
- + # строка вверх
- - # строка вниз
- | # будет запрошен номер колонки
- g или Home # в начало буфера
- G или End # в конец буфера
- ^ # на первый непробельный символ строки
- $ # на последний непробельный символ строки
- fСИМВОЛ # вперёд до символа в строке
- tСИМВОЛ # назад до символа в строке
- ; # повторить движение
- ^B или PageUp
- ^F или PageDown
- / # поиск
- ? # поиск назад
- n # повторить поиск вперёд
- N # повторить поиск назад
- ^G # информация о текущей позиции в буфере
- ^L # перерисовать экран
- Space # поставить первую отметку
- Enter # поставить вторую отметку
- > # поставить вторую отметку и записать буфер редактирования в /tmp/screen-exchange;
например, вывести весь исторический буфер в файл
gSPACEG$>
- ] # вставить из буфера в окно
Настройки хранятся в файлах /etc/screenrc и ~/.screenrc, по команде в строке,
пустые строки игнорируются, комментарии начинаются с '#', аргументы разделяются пробелами и табуляциями,
аргументы могут обрамляться кавычками, символ '\' экранирует следующий символ,
можно использовать переменные окружения ($имя или ${имя}), простые команды:
- attrcolor аттрибут "модификатор-аттрибута" # как интерпретировать аттрибут текста (аттрибуты: b - жирный, d - тусклый, u - подчёркивание,
r - ревертированный, s - standout?, B - мигание, i - яркий передний план, I - яркий фон);
модификатор аттрибута - это строка, в которой опционально задаётся добавление аттрибута (+b) или его удаление (-b) или инвертирование (!b) или присвоение (=b),
затем пробел, затем собственно цвета фона и переднего плана (r - красный (R - ярко красный),
k - чёрный, g - зелёный, y - жёлтый, m - фуксия (magenta), c - синий (cyan), w - белый, d - умолчание, . - не менять);
"%{-}" - вернуть предыдущие настройки; например: attrcolor b "R" (выделенный текст выводить ярко-красным)
- bind клавиша команда аргумент ... # привязка команд screen к клавише (символ или ^символ), при нажатии "^A клавиша" будет выполнена команда
- bindkey {-d | -m |} [-a] строка команда ... # привязка команды непосредственно к строке (манипуляция таблицей преобразования ввода);
какую таблицу модифицировать: -d - таблица эмулятора терминала, -m - таблица режима copy mode, ничего - таблица пользователя;
можно также привязывать имена клавиш (-k) и управлять интервалом между клавишами (-t)
- bufferfile имя-файла # изменить имя файла для работы с буфером редактирования; по умолчанию - /tmp/screen-exchange
- chdir имя-каталога # меняет текущий каталог для вновь создаваемых окон; первоначально используется каталог запуска команды screen
- clear # очистить окно
- colon # только в диалоговом режиме ("^A:")! позволяет ввести команду .screenrc
- command # ввод ^A или её замены; необходимо при использовании bind и bindkey
- copy # в режим прокрутки и копирования
- defflow {on|off|auto} [interrupt] # контроль потока по умолчанию - реакция screen на нажатие ^S/^Q; interrupt ускоряет реакцию на ^C
- deflog {on|off} # значение по умолчанию для ведения журнала
- deflogin {on|off} # значение по умолчанию для учёта utmp (/var/log/wtmp)
- defnonblock {on|off|секунд}
- defscrollback количество # 100 или 1000 с версии 4.6 (1000 в /etc/screenrc), размер исторического буфера по умолчанию
- defutf8 {on|off} # по умолчанию устанавливается ключом -U
- defwrap {on|off} # on
- detach # отсоединиться от терминала
- dinfo # что screen думает о терминале
- displays # вывести список всех терминалов, выход - Esc
- digraph значение-Unicode # сборка символа Unicode, восьмеричные числа начинаются с 0; например, 'a"' - a-умляут
- dynamictitle {on|off} # разрешить менять заголовок терминала escape-последовательностями
- echo [-n] строка
- escape "^Aa" # командный символ и литерал, используемый для передачи командного символа программе в активном окне
- exec [шаблон]команда-unix аргумент ... # шаблон управляет подключением stdin, stdout и stderr:
'.' - к screen, '!' - к приложению в окне, ':' - и к screen, и к приложению, '|' (4м символом) - конвейер (как в sh)
- flow [on|off|auto]
- hardcopy [-h] [имя-файла] # hardcopy.НомерОкна; копию экрана в файл; -h - копию исторического буфера в файл; каталог задаётся командой hardcopydir
- hardcopy_append {off|on} # добавлять к существующему файлу или заменять (по умолчанию)
- hardcopydir каталог # каталог для команды hardcopy; по умолчанию в рабочий каталог
- hardstatus [on|off] # использовать аппаратную возможность строки статуса терминала (в современных условиях - заголовок окна виртуального терминала)
- hardstatus [always]{firstline|lastline|message|ignore} # куда выводить статус при отсутствии у терминала строки статуса
- hardstatus string строка # что выводить в строку статуса терминала, в Red Hat по умолчанию - "[screen %n%?: %t%?] %h"
- help # команды и привязки к клавишам
- ignorecase [off|on] # игнорировать регистр при поиске
- info # позиция курсора, ширина и высота экрана, размер буфера, контроль потока, журналирование, UTF-8
- kill # убить окно (HANGUP) или запущенную по exec команду unix
- log [on|off] # писать в журнал
- logfile имя-файла # журнал, по умолчанию - screenlog.НомерОкна; добавлена в версии 4.4.0 (нет в RHEL 7)
- logfile flush секунд # 10; интервал синхронизации журнала; добавлена в версии 4.4.0 (отсутствует в RHEL 7)
- login [on|off] # вести учёт utmp (/var/log/wtmp) для окна
- meta # вставить ^A во входной поток текущего окна
- next # переключиться на следующее окно
- password пароль # пароль для доступа в старом формате crypt(3); удалена в 5.0.0
- prev # переключиться на предыдущее окно
- readbuf [-e кодировка] [имя-файла] # прочитать файл (по умолчанию /tmp/screen-exchange) в буфер редактирования
- removebuf # удалить файл, использовавшийся для чтения в буфер редактирования
- quit
- redisplay
- reset
- screen [опции] [номер-окна] [команда ...] # создать окно
- scrollback количество # 100 (1000 в /etc/screenrc), размер буфера
- sessionname имя-сессии # изменить имя сессии
- setenv имя значение
- shelltitle заголовок # устанавливает заголовок для всех оболочек; индивидуальный заголовок можно установить ключом запуска "-t",
escape-последовательностью или командой "^AA" или командой title; а ещё screen автоматически назначает заголовок, используя мутные эвристики
- source имя-файла # выполнить команды из файла; до 10 уровней
- title имя-окна (см. )
- unbindall # отменить все привязки команд
- unsetenv имя-переменной-окружения # удалить
- utf8 {on|off} {on|off} # UTF-8 для окна и терминала (с версии 5.0)
- vbell [off|on] # визуальный звонок
- writebuf [-e кодировка] [имя-файла] # записать буфер редактирования в файл (/tmp/screen-exchange)
- xoff # послать ^S
- xon # послать ^Q
Макросы для строк (начинаются с символа '%'):
- %% - символ '%'
- %f - флаги окна
- %h - статус окна
- %H - имя хоста
- %n - номер окна
- %S - имя сессии
- %s - размер окна
- %t - заголовок окна
- %u - список пользователей окна
- %w - список номеров и имён окон
- %W - список номеров и имён окон, кроме текущего
- %x - выполняемая в окне команда с аргументами
- %X - выполняемая в окне команда без аргументов
- %{ - установка цвета и атрибута до следующего '}'
- %? - условное выполнение: %?условие%:действие-если-истина[%:действие-если-ложь]%?
- %E - установить условие, если нажата клавиша Esc
- %F - установить условие, если окно в фокусе
- %P - установить условие, если регион в режиме copy/paste
Переменные окружения:
- COLUMNS
- HOME # здесь лежит .screenrc
- LINES
- PATH
- SCREENDIR # каталог для сокетов связи между клиентом screen и сервером SCREEN (по умолчанию /var/run/screen/ или /run/screen/S-ИмяПользователя/)
- SCREENRC # $HOME/.screenrc, имя файла конфигурации
- SHELL
- STY # имя сокета связи между клиентом screen и сервером SCREEN: НомерПроцесса.ИмяСеанса (по умолчанию ИмяСеанса - pts-Номер.ИмяХоста
- SYSSCREENRC # /etc/screenrc, имя системного файла конфигурации
- TERM
- TERMCAP
- WINDOW # сюда screen записывает номер окна при запуске процессов
Отличия версий
- отличия 5.0.1 (последнее на 2026-04-27) от 4.6.2 (RHEL8)
- настройка битов чётности и стоп-битов последовательного порта
- переписана аутентификация (auth on|off; password помечена как устаревшая)
- %T - имя TTY
- %O - количество окон
- добавлена команда truecolor
- multiinput - ввод в несколько окон одновременно
- исправление ошибок и проблем с безопасностью (UTF-8)
- отличия 4.6.2 (RHEL8) от 4.1 (RHEL7)
- исправление ошибок и проблем с безопасностью
- unbindall - сбросить все привязки команд
- layout - расположение окон
- group - группировка окон
- defmousetrack и mousetrack
- префикс '@' для команд - без вывода сообщений
- переменные в .screenrc - $PID, $PWD, $STY
- обработка '~' в путях к файлам
- %p - номер процесса сервера
- %+p - номер процесса клиента
- %S - имя сессии
- %P и %E
- поиск в режиме копирования в обратную сторону по нажатию N
- лучшая имитация readline: Tab, ^W, ^D, ^P, ^N и т.д.
- доделаны работы по увеличению количества цветов с 16 до 256 (Terminfo, hardstatus)
- ключ запуска -Q
- %x и %X - запущенная команда
- sort - сортировка окон
- bumpleft и bumpright - сдвиг окон в списке окон
- collapse - перенумеровать окна
- logfile и -LogFile - задать имя журнала
|
|
Bog BOS: Менеджер виртуальных терминалов screen
|
Скопировано с bog.pp.ru: 2026.07.10
Bog BOS: Менеджер виртуальных терминалов screen
Copyright © 1996-2026 Sergey E. Bogomolov; bog.pp.ru