|
|
Bog BOS: Менеджер виртуальных терминалов screen
|
Скопировано с bog.pp.ru: 2026.05.14
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 (last и т.п.).
Регион - часть виртуального окна в формате прямоугольника.
Можно копировать его содержимое, очищать, перемещать и т.д.
Не описываю.
Исторический буфер (scrollback buffer) хранится сервером и обеспечивает возможность
посмотреть историю сеанса, поиск, копирование.
Буфер редактирования (paste buffer) позволяет копировать содержимое региона,
перемещать, редактировать, выводить в файл, вводить из файла.
Обработка команд screen внутри сессии (обычно начинаются с ^A, за которым идёт 1 символ).
Ключи запуска:
- -A # адаптировать размер всех окон под размер текущего терминала;
по умолчанию screen пытается адаптировать размер терминала под размер окна
- -c имя-конфигурационного-файла # $HOME/.screenrc
- -d [НомерПроцесса.pts-Номер.ИмяХоста] # отсоединить сессию screen, подключённую где-то
- -dr [НомерПроцесса.pts-Номер.ИмяХоста] # отсоединить сессию screen, подключённую где-то; подсоединить здесь
- -dR # отсоединить сессию screen, подключённую где-то, или создать; подсоединить здесь
- -dRR # отсоединить первую сессию screen, подключённую где-то, или создать; подсоединить здесь
- -dm # создать сессию, но не подключаться к ней
- -Dr # отсоединить сессию screen, подключённую где-то, завершить её; подсоединить здесь
- -DR # отсоединить сессию screen, подключённую где-то, завершить её; создать; подсоединить здесь
- -Dm # создать сессию, но не подключаться к ней; не запускается параллельный процесс, команда завершается, когда завершается сессия
- -e ^Aa # задаёт командный символ (^A) и символ, передающий литерал (a); см. defescape и escape
- -f | -fn | -fa # включить контроль потока, выключить, переключить на автомат; см. defflow
- -h число # задать размер буфера; см. defscrollback
- -i # символ прерывания прервёт вывод, если включён контроль потока; авторы не советуют; см. defflow
- -l | -ln # включить или выключить запись в /var/log/wtmp (last и т.п.); см. deflogin
- -ls | -list [шаблон] # выводит список сеансов screen; attached - подключённые, detached - можно подключить,
multi - в многопользовательском режиме, unreachable - недоступные
- -L -Logfile имя-файла # автоматический вывод журнала; по умолчанию screenlog.0; добавлена в 4.5.0 (нет в RHEL 7)
- -m # запускать новую копию screen в окне screen (STY);
при запуске в окне screen без ключа "-m" (определяется по переменной окружения STY - НомерПроцесса.pts-Номер.ИмяХоста)
не запускается новая копия screen, а создаётся новое окно родительского процесса screen
и запускается указанная программа (значения переменых окружения берутся от родительского screen, а не от текущей оболочки);
Хотите вложенный screen? обнулите переменную STY
- -p номер | - | = | + # выбор окна сессии при подключении или посылке команды (ключ -X);
"-" - пустое окно; "=" - вывести список окон; "+" - создать новое окно
- -r [НомерПроцесса.pts-Номер.ИмяХоста] # подключиться к сессии
- -s программа # использовать указанную программу в качестве оболочки (/bin/sh, SHELL); см. shell
- -S имя-сессии # задаёт имя сессии при создании
- -t заголовок-оболочки # см. shelltitle
- -T значение-TERM
- -U # UTF-8
- -x # подключиться к неотключённой сессии
- -X # послать команду в работающую сессию
Установлен setgid (root:screen).
Некоторые привязки команд screen к символу после ^A (^A и a можно поменять на другой ключом "-e", например, "-e ^Bb"):
- ? # вывести список команд и их привязок к символу
- a # передать метасимвол (^A) программе в окне
- " # вывести список окон
- ' # запросить номер или имя окна для переключения
- c # создать новое окно, запустить в нём оболочку и сделать его активным
- d # отсоединить экран от терминала
- f # переключить режим обработки потока (on, off и auto)
- h # записать копию окна в hardcopy.НомерОкна
- 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 ^A # в левую позицию
- + # строка вверх
- - # строка вниз
- | # будет запрошен номер колонки
- g или Home # в начало буфера
- G или End # в конец буфера
- ^ # на первый непробельный символ строки
- $ # на последний непробельный символ строки
- fСТРОКА # вперёд до строки
- tСТРОКА # назад до строки
- ; # повторить движение
- ^B или PageUp
- ^F или PageDown
- / # поиск
- ? # поиск назад
- n # повторить поиск вперёд
- N # повторить поиск назад
- ^G # информация о текущей позиции в буфере
- ^L # перерисовать экран
- пробел # поставить первую отметку
- Enter # поставить вторую отметку
- > # поставить вторую отметку и записать буфер редактирования в /tmp/screen-exchange;
например, вывести весь исторический буфер в файл
C-A [ g SPACE G $ >
Настройки хранятся в файлах /etc/screenrc и ~/.screerc, по команде в строке,
пустые строки игнорируются, комментарии начинаются с '#', аргументы разделяются пробелами и табуляциями,
аргументы могут обрамляться кавычками, символ '\' экранирует следующий символ,
можно использовать переменные окружения ($имя или ${имя}), простые команды:
- 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 - умолчание, . - не менять);
"%{-}" - вернуть предыдущие настройки
- bind клавиша команда аргумент ... # привязка команд screen к клавише (символ или ^символ), при нажатии "^A клавиша" будет выполнена команда
- bindkey {-d | -m |} [-a] строка команда ... # привязка команды непосредственно к строке (манипуляция таблицей преобразования ввода);
какую таблицу модифицировать: -d - таблица эмулятора терминала, -m - таблица режима copy mode, ничего - таблица пользователя;
можно также привязывать имена клавиш (-k) и управлять интералом между клавишами (-t)
- bufferfile имя-файла # изменить имя файла для работы с буфером редактирования; по умолчанию - /tmp/screen-exchange
- chdir имя-каталога # сюда будут писаться журналы и твёрдые копии
- clear # очистить окно
- colon
- command
- copy # в режим полноэкранного редактирования, похожий на vi
- defflow {on|off|auto} [interrupt] # контроль потока по умолчанию - реакция screen на нажатие ^S/^Q; interrupt ускоряет реакцию на ^C
- deflog {on|off}
- defnonblock {on|off|секунд}
- defscrollback количество # 100 (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, и к приложению, '|' - ?
- flow [on|off|auto]
- hardcopy [-h] [имя-файла] # hardcopy.НомерОкна; копию экрана в файл; -h - копию исторического буфера в файл
- hardcopy_append {off|on} # добавлять к существующему файлу или заменять (по умолчанию)
- hardcopydir каталог # по умолчанию в рабочий каталог
- hardstatus string "[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
- meta # вставить ^A во входной поток текущего окна
- next # переключиться на следующее окно
- password пароль # пароль для доступа в старом формате crypt(3); удалена в 5.0.0
- prev # переключиться на предыдущее окно
- readbuf [кодировка] [имя-файла] # прочитать файл (/tmp/screen-exchange) в буфер редактирования
- removebuf # удалить файл, использовавшийся для чтения в буфер редактирования
- quit
- redisplay
- reset
- screen [опции] [номер-окна] [команда ...] # создать окно
- scrollback количество # 100 (1000 в в /etc/screenrc), размер буфера
- sessionname имя-сессии # изменить имя сессии
- setenv имя значение
- source имя-файла # выполнить команды из файла; до 10 уровней
- title имя-окна
- unbindall # отменить все привязки команд
- unsetenv имя-переменной-окружения # удалить
- utf8 {on|off} {on|off} # UTF-8 для ввода и вывода
- vbell [off|on] # визуальный звонок
- writebuf [-e кодировка] [имя-файла] # записать буфер редактирования в файл (/tmp/screen-exchange)
- xoff # вставить ^S
- xon # вставть ^Q
Макросы для строк (начинаются с символа '%'):
- %% - символ '%'
- %f - флаги окна
- %h - статус окна
- %H - имя хоста
- %n - номер окна
- %S - имя сессии
- %s - размер окна
- %t - заголовок окна
- %u - список пользователей окна
- %w - список номеров и имён окон
- %W - список номеров и имён окон, кроме текущего
- %x - выполняемая в окне команда с аргуменами
- %X - выполняемая в окне команда без аргументов
- %{ - установка цвета и атрибута до следующего '}'
- %? - if - условное выполнение до следующего %?
- %: - else-часть
- %E - установить условие, если нажата клавиша Esc
- %F - установить условие, если окно в фокусе
- %P - установить условие, если регион в режиме copy/paste
Переменные окружения:
- COLUMNS
- HOME # здесь лежит .screenrc
- LINES
- PATH
- SCREENDIR # каталог для сокетов (/var/run/screen) связи между клиентом screen и сервером SCREEN
- SCREENRC # $HOME/.screenrc, имя файла конфигурации
- SHELL
- STY # имя сокета связи между клиентом screen и сервером SCREEN
- SYSSCREENRC # /etc/screenrc, имя системного файла конфигурации
- TERM
- TERMCAP
- WINDOW # номер окна
Отличия версий
- отличия 5.0.1 (последнее на 20260427) от 4.6.2 (RHEL8)
- настройка битов чётности и стоп-битов последовательного порта
- переписана аутентификация (auth on|off; удалена password)
- %T - имя TTY
- %O - количество окон
- truecolor [on|off]
- multiinput - ввод в несколько окон одновремнно
- исправление ошибок и проблем с безопасностью (UTF-8)
- отличия 4.6.2 (RHEL8) от 4.1 (RHEL7)
- исправление ошибок и проблем с безопасностью
- unbindall - сбросить все привязки команд
- layout - расположение окон
- group - группировка окон
- defmousetrack и mousetrack
- префикс '@' для команд - без вывода сообщений
- переменные в .screenrc - $PID, $PWD, $STY
- обработка '~' в путях к файлам
- %p - номер процесса сервера
- %+p - номер процесса клиента
- %S - имя сессии
- %P и %E
- поиск в режиме копирования
- лучшая имитация readline: Tab, ^W, ^D, ^P, ^N и т.д.
- количество цветов увеличено с 16 до 256
- ключ запуска -Q
- %x и %X - запущенная команда
- sort - сортировка окон
- bumpleft и bumpright - сдвиг окон в списке окон
- collapse - перенумеровать окна
- logfile и -LogFile - задать имя журнала
|
|
Bog BOS: Менеджер виртуальных терминалов screen
|
Скопировано с bog.pp.ru: 2026.05.14
Bog BOS: Менеджер виртуальных терминалов screen
Copyright © 1996-2026 Sergey E. Bogomolov; bog.pp.ru