GNU screen - консольный мультиплексор терминала между несколькими процессами, эмулирующий терминал VT100/ANSI.
Screen это полноэкранный оконный менеджер, который мультиплексирует физический терминал между несколькими процессами (обычно, интерактивными оболочками). Каждый терминал обладает функциональностью терминала DEC VT100 и некоторыми управляющими функциями из стандартов ISO 6429 (ECMA 49, ANSI X3.64) и ISO 2022 (вставка/удаление строки и поддержка множеств символов). Для каждого виртуального терминала есть буфер истории и механизм обмена, позволяющий копировать текст между окнами.
При вызове screen создаёт отдельное окно, в котором запускает оболочку командного интерпретатора (или заданную программу), и вы можете работать с ней как и обычно. Потом, в любое время, можно создавать новые (полноэкранные) окна, в которых будут исполняться другие программы (в том числе различные оболочки), закрывать существующие окна, просматривать список окон, включать/выключать запись, просматривать буфер прокрутки, переключаться между окнами самыми разнообразными способами и выполнять множество других действий.
Все окна работают полностью независимо друг от друга. Программы продолжают работать, даже если они невидимы в настоящий момент, или вообще весь сеанс screen полностью отключён от терминала пользователя. Когда программа завершается, screen (по умолчанию) закрывает то окно, в котором она исполнялась. Если это окно было активным, screen активирует предыдущее; если окон не осталось, screen завершается.
Всё, что вы набираете внутри screen, отправляется программе, работающей в текущем окне. Единственное исключение — комбинация клавиш, которая показывает, что сейчас вы хотите работать с самим оконным менеджером. По умолчанию, команды работы с оконным менеджером начинаются нажатием Control-a (далее C-a), за которым следует нажатие одной клавиши. Эта и другие управляющие комбинации могут быть настроены иначе, но они обязательно должны состоять из двух символов.
Программа screen не понимает префикс «C-» как обозначение нажатия Ctrl. Вместо этого нужно использовать запись с символом ^ (например, ^A вместо C-a). Это может пригодиться, например, как аргумент опции -e. Кроме этого, управляющие символы screen выводит в этом же формате.
Стандартный способ создать новое окно — нажать «C-a c». Окно создаётся мгновенно, и screen сразу же делает его активным, независимо от того, в каком состоянии находится процесс, выполняющийся в текущем окне. Аналогично можно создавать новые окна, в которых будет выполняться какая-то своя команда. Для этого сначала нужно привязать команду к комбинации клавиш (это делается через конфигурационный файл .screenrc или через режим командной строки C-a :, а потом, когда будет нужно, просто использовать эту комбинацию клавиш. Кроме всего прочего, новые окна можно создавать при помощи команды:
screen emacs prog.c
которая вызывается в командном интерпретаторе, работающем внутри screen. Новая копия screen создаваться не будет, а вместо этого команда будет передана текущему менеджеру (информация о том кто именно является текущим менеджером находится в переменной окружения $STY), который и создаст новое окно. В приведённом выше примере запускается редактор emacs (в котором открывается prog.c) и окно с этим редактором становится активным.
Если файл /var/run/utmp доступен screen для изменения, он сделает соответствующие записи для каждого окна при их создании, и удалит при их закрытии. Это очень полезно при использовании таких программ как talk, script, shutdown, rsend, sccs и многими другими, которые используют файл utmp, для того чтобы определить кто вы (то есть, какой пользователь работает с каким терминалом). До тех пор пока screen активен на терминале, запись про собственно этот терминал удаляется. Также смотрите C-a L.
-a - включать все возможности (за некоторыми небольшими исключениями) в termcap каждого окна, даже если screen должен перерисовывать часть экрана для реализации функции.-A - адаптирует размеры всех окон под размер текущего терминала. По умолчанию screen пытается восстановить старый размер окна (при подключении к терминалам с изменяемыми размерами (те у кого есть «WS» в описании, например, suncmd или xterm).-c file - использовать file вместо стандартного «$HOME/.screenrc» в качестве конфигурационного-d|-D [pid.tty.host] - не запускает новый сеанс, а отключает вместо этого уже запущенный ранее. Достигается тот же эффект, что и в случае нажатия клавиш «C-a d» на управляющем терминале screen. Ключ -D эквивалентен ключу power detach. Если ни к одному сеансу нельзя обратиться, опция игнорируется. В связке с -r/-R могут быть достигнуты другие более интересные эффекты:-d -r - подключить к сеансу, и если необходимо, сначала отключить его.-d -R - переподключиться к сеансу. Если необходимо — сначала отключить или создать сеанс.-d -RR - переподключиться к сеансу. Если необходимо — сначала отключить или создать сеанс. Воспользоваться первой сессией, если больше одной сессии создать нельзя.-D -r - подключиться к сеансу. Если необходимо, сначала отключить его удалённо и разрегистрироваться.-D -R - подключиться здесь и сейчас. Это значит: если сессия работает, переподключиться. Если необходимо, сначала отключиться удалённо. Если не работала — создать и сообщить об этом пользователю. Любимый ключ авторов.-D -RR - подключиться прямо сейчас. Не важно, что будет, просто сделать это. Замечание: хорошая идея всегда проверять состояние сеансов screen с помощью «screen -list»-e xy - устанавливает управляющий символ равным x и символ, который генерирует сам этот символ в y (после ввода командного символа). По умолчанию это «C-a» и «a», что можно явным образом указать как «-e^Aa». При создании сеанса screen эта опция устанавливает управляющий символ. В многопользовательских сеансах все добавляемые пользователи будут использовать указанный символ. При подключении к существующей сессии, опция меняет управляющий символ только для пользователя, выполняющего подключение. Опция эквивалентна командам «defescape» и «escape» соответственно.-f, -fn и -fa - включить, выключить или перевести в автоматический режим flow-control. Аналогичный результат достигается с помощью команды «defflow» конфигурационного файла.-h num - установить размер истории буфера прокрутки равным num строк.-i - приводит к тому что клавиша прерывания (C-c) срабатывает мгновенно если включено аппаратное управление потоком. См. команду defflow. Использование этой опции не рекомендуется.-l и -ln - включает или выключает login-режим (для обновления /var/run/utmp). Это же можно задать с помощью команды deflogin в файле ~/.screenrc-ls и -list - не запускает screen, а показывает список идентифицирующих сеансы screen строк pid.tty.host. Сеансы, которые отмечены словом «detached» могут быть продолжены с помощью команды «screen -r». Сеансы, которые отмечены словом «attached», работают, и у них есть управляющий терминал. Если сеанс работает в многопользовательском режиме, он отмечен словом «multi». Сеансы, которые отмечены словом «unreachable» или работают на другом хосте, или умерли (dead). Недоступный (unreachable) сеанс считается мёртвым, если его имя соответствует или имени локального хоста, или указанному параметру (если такой есть). Как описывать строки для выбора рассказывается в описании ключа -r. Сеансы, отмеченные как «dead», нужно проверить и удалить. Если вы не уверены, нужно ли удалять какой-то сеанс, вы можете обратиться к системному администратору. Удалить сеансы можно с помощью опции -wipe.-L - включить автоматическую запись (logging) для окон.-m - заставляет screen игнорировать переменную окружения $TTY. При использовании «screen -m» создаётся новый сеанс, независимо от того вызывается ли screen изнутри другого сеанса screen или нет. Этот флаг имеет особое значение, если вызывается с опцией:-d -m - запустить сеанс в «отключенном» режиме. Сессия создаётся, но к ней не выполняется подключение. Это полезно для загрузочных системных скриптов.-D -m - тоже запускает screen в «отключенном» режиме, но не создаёт новый процесс. Команда завершается, если сессия прерывается.-O - использует более оптимальный режим вывода вашим терминалом, чем в случае с обычной эмуляцией VT100 (касается только auto-margin терминалов без поддержки LP). Такого же результата можно достичь, если установить OP в команде termcap.-p number_or_name - заранее выбирает окно. Полезно, когда вы хотите переподключиться к конкретному окну или если вы хотите с помощью опции -X отправить команду в конкретное окно. Как и в случае с командой select, знак «-» означает пустое окно. Если вместо номера указать символ =, то при подключении появится меню windowlist с списком окон.-q - подавляет вывод сообщений об ошибках. В сочетании с «-ls» возвращает код завершения: 9 - нет каталога с сеансами; 10 - каталог есть, но нет сеансов, к которым можно подключиться. 11 (или больше) говорит что есть 1 (или больше) рабочий сеанс. В сочетании с «-r» возвращает код завершения: 10 - нет сеансов, которые можно возобновить; 12 (или больше) что есть 2 (или больше) сеанса, работу которых можно возобновить, и нужно выбрать какой-то один. Во всех остальных случаях ключ «-q» эффекта не имеет.-r [pid.tty.host] / -r sessionowner/[pid.tty.host] - возобновляет работу отключённого сеанса. Никакие другие опции (за исключением комбинаций с -d/-D) не допускаются. Необязательный параметр [pid.]tty.host может указываться для того чтобы определить какой именно сеанс из множества отключённых имеется в виду. Вторая форма используется для подключения к работающему в многопользовательском режиме сеансу другого пользователя. Эта опция говорит о том, что файл нужно искать в каталоге другого пользователя. Требует наличия бита setuid-root у программы screen.-R - пытается возобновить работу первого попавшегося отключённого сеанса. Если попытка успешная, все остальные аргументы командной строки игнорируются. Если отключённых сеансов нет, запускает новый сеанс с учётом заданных опций, так как будто -R вообще и не указано. Эта опция подразумевается по умолчанию, когда screen вызывается как login-оболочка (в этом случае подразумеваются опции «-xRR»). О взаимодействии с -d/-D см. описание этих опций.-s - устанавливает оболочку по умолчанию равной заданной программе (без опции в качестве оболочки по умолчанию используется программа, что указана в $SHELL или «/bin/sh», если никакая не указана). Такой же эффект может быть получен с помощью команды shell в файле «.screenrc».-S sessionname - эта опция может использоваться для задания имени сеансу при его создании. Имя используется для идентификации при вызове «screen -list» и «screen -r». Оно заменяет постфикс «tty.host», использующийся по умолчанию.-t name - установить заголовок для командного интерпретатора или указанной программы. См. также команду shelltitle для .screenrc.-U - запустить screen в режиме UTF-8. Эта опция говорит screen, что терминал посылает и понимает символы в кодировке UTF-8. Этот ключ также устанавливает кодировку по умолчанию для окон utf8.-v - показать номер версии.-wipe [match] - работает также как «screen -ls», только удаляет файлы уничтоженных сеансов вместо того чтобы помечать их как «dead» (мёртвые). Сеанс, который не отвечает, считается мёртвым, или если его имя соответствует имени локального хоста, или указанному явно параметру match. См. описание ключа -r, где рассказаны правила составления match.-x - подключиться к активной (not detached) сессии screen. (Многодисплейный режим).-X - отправить указанную команду в работающий сеанс screen. Можно указать ключ «-d» или «-r», чтобы screen смотрел только на подключённые (attached) или отключённые (detached) сеансы. Обратите внимание на то, что команда не сработает, если сеанс защищён с помощью пароля.C-a ' (select) - Спросить название или имя окна, в которое нужно переключиться.C-a « (windowlist -b) - Представить список всех окон для выбора.C-a 0 (select 0) - …C-a 1 (select 1) - …C-a 2 (select 2) - …C-a 3 (select 3) - …C-a 4 (select 4) - …C-a 5 (select 5) - …C-a 6 (select 6) - …C-a 7 (select 7) - …C-a 8 (select 8) - …C-a 9 (select 9) - …C-a - (select -) - Переключиться в окно с номером 0 - 9 или в пустое окно.C-a tab (focus) - Переключить фокус ввода на следующий регион.C-a C-a (other) - Переключиться в ранее активное окно. (по умолчанию команда привязана к управляющему символу, нажатому дважды — например, если вы вызовите screen с опцией »-e]x«, команда будет вызываться символами »]]«).C-a a (meta) - Отправить C-a в окно. См. также команду escapeC-a A (title) - Ввести заголовок текущего окна.C-a b / C-a C-b (break) - Отправить break в окно.C-a B (pow_break) - Повторно открыть терминальную линию и отправить break.C-a c / C-a C-c (screen) - Создать новое окно с запущенным интерпретатором и переключиться в это окно.C-a C (clear) - Очистить экран.C-a d / C-a C-d (detach) - Отключить screen от этого терминала.C-a D D (pow_detach) - Отключиться и разрегистрироваться.C-a f / C-a C-f (flow) - Включить/выключить/перевести в автоматический режим управление потоком (flow control).C-a F (fit) - Изменить размер окна под размер текущего региона.C-a C-g (vbell) - Переключить режим visual-bell.C-a h (hardcopy) - Записать копию текущего окна в файл «hardcopy.n».C-a H (log) - Начать/закончить запись сессии работы в текущем окне в файл «screenlog.n».C-a i / C-a C-i (info) - Показать информацию о текущем окне.C-a k / C-a C-k (kill) - Уничтожить текущее окно.C-a l / C-a C-l (redisplay) - Полностью обновить текущее окно.C-a L (login) - Переключить login-запись этого окна. Доступно только если screen настроен на обновление базы utmp.C-a m / C-a C-m (lastmsg) - Повторить последнее сообщение, показанное в строке сообщений.C-a M (monitor) - Включить/выключить мониторинг в текущем окне.C-a space / C-a n / C-a C-n (next) - Переключиться на следующее окно.C-a N (number) - Показать номер (и заголовок) текущего окна.C-a backspace / C-a h / C-a p / C-a C-p (prev) - Переключиться на предыдущее окно (противоположно C-a n).C-a q / C-a C-q (xon) - Отправить CTRL-q в текущее окно.C-a Q (only) - Удалить все регионы за исключением текущего.C-a r / C-a C-r (wrap) - Включить/выключить настройку line-wrap текущего окна (включает и выключает автоматические отступы (automatic margins)).C-a s / C-a C-s (xoff) - Отправить control-s в текущее окно.C-a S (split) - Разделить текущий регион на два новых.C-a t / C-a C-t (time) - Показать информацию о системе.C-a v (version) - Показать версию и дату сборки.C-a C-v (digraph) - Ввести диграф.C-a w / C-a C-w (windows) - Показать список окон.C-a W (width) - Переключить количество колонок: 80/132C-a x / C-a C-x (lockscreen) - Заблокировать текущий терминал.C-a X (remove) - Закрыть текущий регион.C-a z / C-a C-z (suspend) - Приостановить (suspend) screen. Система должна поддерживать управление работами (job-control) в стиле BSD.C-a Z (reset) - Сбросить виртуальные терминалы в их исходные значения.C-a . (dumptermcap) - Записать файл ».termcap«C-a ? (help) - Показать привязки клавиш.C-a C-\ (quit) - Закрыть все окна и завершить screen.C-a : (colon) - Перейти в режим ввода командной строки screen.C-a [ / C-a C-[ / C-a esc (copy) - Перейти в режим копирования/прокрутки.C-a ] (paste .) - Записать содержимое буфера обмена в стандартный поток ввода текущего окна.C-a { / C-a } (history) - Скопировать и вставить предыдущую командную строку.C-a > (writebuf) - Записать буфер обмена в файл.C-a < (readbuf) - Прочитать файл обмена (screen-exchange) в буфер обмена.C-a = (removebuf) - Удалить файл, использующийся вместе с C-a < и C-a >.C-a , (license) - Показать информацию о программе GNU Screen.C-a _ (silence) - Включить/выключить режим слежения за неактивностью текущего окна.C-a * (displays) - Показать список всех подключенных сейчас дисплеев.