Главная > Программы > Screen ScreenЕсть такая утилита - screen. Полноэкранный и достаточно мощный консольный оконный менеджер. Поддерживает прокрутку, поиск в окне, обладает функцией копирования и вставки между окнами, позволяет в одном терминале запускать несколько интерактивных shell-процессов и переключаться между ними. Запустив screen, можно покинуть активную ssh-сессию. Как для меня, так это очень удобно. На работе запустил, дома посмотрел (хотя дома отдыхать нужно) или наоборот. Кроме того, при разрыве связи рабочей станции с сервером screen-сессия не прерывается. Устанавливаем?# cd /usr/ports/sysutils/screen # less pkg-descr Screen is a full-screen window manager that multiplexes a physical terminal between several processes (typically interactive shells). Each virtual terminal provides the functions of a DEC VT100 terminal and, in addition, several control functions from the ANSI X3.64 (ISO 6429) and ISO 2022 standards (e.g. insert/delete line and support for multiple character sets). There is a scrollback history buffer for each virtual terminal and a copy-and-paste mechanism that allows moving text regions between windows. WWW: http://www.gnu.org/software/screen/ #make #make install #make clean #rehash Приведу комбинации клавиш, которые, на мой взгляд, могут понадобиться чаще всего. В отличие от мануала клавишу буду называть своим именем. Возможно где-нибудь далее и проскочит сочетание клавиши из мануала - не обессудьте. Код:Ctrl-a c
Ctrl-a Сtrl-c Создать новое окно screen'а.
Ctrl-a [0..9,-] Переключиться между окнами, или получить пустое окно.
Ctrl-a " Список окон.
Ctrl-a Ctrl-a Переключение между двумя окнами - между активным и предыдущим.
Ctrl-a n|p next|prev
Ctrl-a C Очистить экран.
Ctrl-a A Позволяет ввести заголовок окна.
Ctrl-a d Отключиться от сеанса screen. (Присоединиться можно командой screen -r)
Ctrl-a k Закрыть текущее окно с подтверждением.
Ctrl-a ? Задать вопрос (очень полезно), если не знал, а еще и забыл.
Очень интересны ключи запуска. Приведу список ключей, которые могут понадобиться, на мой взгляд, чаще всего. Код:-ls
-list Не запуская screen выдает список отсоединенных screen'ов.
-r [pid.tty.host] Подключиться к screen или же к определенной сессии.
-x Присоединиться к неотсоединенному screen - позволяет одновременно
работать с разных мест разным людям. Удобно для удаленного
обучения (хотя в FreeBSD есть watch).
-R Пытается присоединиться к первому найденному отсоединенному
screen. Если не находит - создает новый screen.
screenrcПри запуске screen выполняет команды из "/usr/local/etc/screenrc"
и "~/.screenrc". Все это можно переопределить системными переменными, но,
лично я, не вижу особого смысла. Тем более, что у меня только сервер и пользователей раз-два обчелся. При
запуске с ключом -с, можно указать другой файл screenrc.
Читайте мануал - команд много - все таки первоисточник. ###
# Screenrc configuration file
###
# Приветственное сообщение off|on
startup_message off
# визуальный биппер. off|onn
vbell on
# то, что он бипер пишет в строке статуса
vbell_msg " Uh! - Uh! - bzzz "
# "Красивые" подписи
nethack on
# Количество строк истории хранить в буфере
defscrollback 2000
#
# Строка состояния в screen (hardstatus)
hardstatus alwayslastline "%{=b}%{g}Window: %{b}%w %=%{kG}%с %D %Y-%m-%d"
# Расшифровка:
# здесь (я беру параметры в одинарные кавычки):
# '%{=b}' - черный цвет фона строки.
# '%{g} Window: ' - слово 'Window: ' зеленоe
# '%{b}%w' - список запущенных окон (звездочкой будет указан активное окно)
# '%=' - все, что идет после этого выравнивается по правому краю
# '%{kG}%с' - показывает время, я люблю формат 24-часа, без pm|am (%C%A - 12часовой с PM|AM)
# '%D, %Y-%m-%d' - показывает дату
# --- Привязки специальных клавиш ---
# отделить сессию от текущего терминала
bindkey -k k7 detach
# уничтожить текущую сессию F8
bindkey -k k8 kill
# создать новое окно F9
bindkey -k k9 screen
# вернуться к предыдущему окну F11
bindkey -k F1 prev
# перейти к следущему окну F12
bindkey -k F2 next
# Удаляем некоторые ненужные или небезопасные комбинации
bind .
bind ^\
bind \\
bind ^h
bind h
На этом - все. Что почитать?
Материал взят: http://club.shelek.ru/print.php?id=308 Многим часто приходится иметь дело с работой на удаленных серверах по
ssh. При этом, могут возникать самые разные проблемы с соединением, и
есть вероятность того что результат долгой и напряженной работы будет
потерян из-за банального дисконнекта. Хорошо иметь возможность
подключаться и отключаться от удаленных хостов, сохраняя терминальные
сессии. В этом, а так же во многом другом, может помочь почти
"классическая" утилита screen. Скорее всего, screen уже установлен на
вашей linux-машине (если нет - самое время установить) и на серверах, с
которыми вы собираетесь работать. # screen При этом, в зависимости от настроек screen в вашей системе, либо просто появится приглашение шелла, либо "экран приветствия", нажав SPACE или ENTER в котором, вы так же попадете в shell. Вроде бы ничего необычного, кроме того, что этот shell будет уже запущен "внутри" screen'а. Для того, чтобы выйти из screen'а (выйти, а не отсоединиться) достаточно выйти из всех открытых в нем оболочек, либо же, нажать комбинацию клавиш Ctl-a \, и ответить "y" на вопрос "действительно ли вы хотите выйти". Отсоединиться от текущего скрина, не закрывая и не завершая сессии, можно комбинацией Ctrl-a d. Если на машине уже есть запущенная screen-сессия, и вы хотите подсоединиться к ней, то
# screen -ls There are screens on: 2762.pts-0.debian (Detached) 2743.pts-0.debian (Detached) 2 Sockets in /var/run/screen/S-diesel. Выбираем нужный нам screen, и присоединяемся к нему: # screen -x 2762.pts-0.debian Названия сессий по-умолчанию малоинформативны - просто номера процессов, если есть желание запустить и использовать несколько screen-сессий для разных задач, можно придумать более вменяемые названия. Придумываем название, затем запускаем новый screen вот таким образом: # screen -S "job1" где job1 - это название нашей "именнованной" сессии. Теперь в -ls мы увидим гораздо более понятное: # screen -ls There are screens on: 2762.pts-0.debian (Detached) 2795.job1 (Detached) 2743.pts-0.debian (Detached) 3 Sockets in /var/run/screen/S-diesel.и сможем подсоединиться к сессии job1, просто указав ее имя: # screen -x job1 Как вы уже поняли, сессии сохраняются даже в то время, когда вы отключны от сервера, и все что в них запущено, продолжает выполняться. Впрочем, на этом возможности screen'а не исчерпываются. Иногда, при работе по ssh, очень хочется, чтобы было открыто сразу несколько терминалов, при этом коннектиться несколько раз облом - особенно если коннектиться нужно через несколько серверов. В этом тоже может помочь screen. Просто нажмите Ctrl - a c, и откроется еще один шелл. Перемещаться между открытыми шеллами можно либо через Ctrl - a <Цифра>, где <Цифра> - номер открытого шелла, начиная с нуля, либо Ctrl - a n/Ctrl - a p - вперед назад. Получить список открытых "окон" - консолей (и переключиться на нужную), можно комбинацией клавиш Ctrl - a "; чтобы задать нормальное имя (а не просто скучный "bash") для какого-нить окна, перейдите в него и нажмите Ctrl - a A (регистр имеет значение), затем в появившемся приглашении введите имя. Если открыто несколько окон, полезной может быть возможность следить за активностью в каком-то из них. Например, если вы запустили "долгоиграющую" команду и интересно узнать, когда она завершится. Переходим в окно с этой командой, жмем Ctrl - a m, видим надпись типа такой: "Window 0 (bash) is now being monitored for all activity". Когда что-то в окне изменится, screen подаст звуковой сигнал, а в списке окон после номера появится символ "@". Конфигурируется screen с помощью файла ~/.screenrc, в вашем домашнем каталоге. Например, можно написать туда вот такую абракадабру: caption always "%{= 45}%{+b w}Screen: %n | %h %=%t %c"
hardstatus alwayslastline "%-Lw%{= BW}%50>%n%f* %t%{-}%+Lw%<"
Для того, чтобы получить все время видимый список открытых окон, и другую полезную информацию внизу экрана. Вот примерно так маленький и незаметный screen может существенно облегчить жизнь. Материал взят: http://www.in4.org.ua/Автоматический запуск приложений при старте Screen# cat startup.scr screen -t rtorrent 0 rtorrent screen -t microdc 1 microdc screen -t mc 2 mc screen -t top 3 top -P # screen -d -m -S autostart -c startup.scr То есть создать конфиг, отличный от .screenrc, записав в него всё что хочеш, в том числе расставленный по "закладкам" программы, и запускать screen с указанием читать альтернативный этот конфиг. Screen - оставляем процессы в фоне и идем спать (пример файла .screenrc)Вспомнилась одна очень удобная и полезная программка для FreeBSD - screen называется. Screen - это полноценный консольный оконный менеджер, объединяющий физический терминал c (возможно) несколькими интерактивными, виртуальными шеллами, которые могут открепляться от физического терминала и продолжать "жить своей жизнью". Каждый виртуальный терминал предоставляет использование возможностей терминала DEC VT100 по стандартам ISO2022 (такие как вставка/удаление строки и поддержка различных кодировок). Также поддерживается сколлинг буфера для просмотра истории команд и механизм "копировать-вставить", что позволяет перемещать фрагменты текста между отдельными окнами. Screen'ы удобны тем, что в них можно оставить любые запущенные процессы и уйти, закрыв физический терминал (если Вы ходите на сервер с помощью putty, например), а позднее, войдя в систему вновь, можно подключиться к висящему в фоне скрину и продолжить в нем работу. Скрины не раз выручали меня когда приходилось запускать на сервере процессы компиляции чего-либо надолго. Компьютер (рабочая станция) не может работать круглые сутки. К тому же, запуская что-то из дому, требуется потом проверить с работы как обстоят дела. Последний раз я вспомнил о screen, когда после обновления FreeBSD до 7.0 запускал обновление пакетов (-all). Процесс длился почти пару десятков часов, а сидеть возле монитора постоянно я, понятное дело, не мог: Да что там говорить. Это просто надо попробовать. В screen'е даже ту же самую аську можно запустить в фоне и свалить с машины. Рекомендую: Screen == Must Have! Установить утилиту screen можно из портов FreeBSD. Компиляция + установка проста и занимает всего 30 секунд (сама программка довольно маленькая; пакет с исходниками весит всего 820 килобайт). # cd /usr/ports/ make search name="screen" ... Port: screen-4.0.3 Path: /usr/ports/sysutils/screen Info: A multi-screen window manager Maint: cy@FreeBSD.org B-deps: R-deps: WWW: http://www.gnu.org/software/screen/ ... # cd /usr/ports/sysutils/screen # make install clean Осталось теперь совсем немного. Подогнать под себя файл настроек и: привыкнуть к необычным "быстрым клавишам". Их много, но на практике я использую совсем чуть-чуть. Стандартный файл с настройками появится после установки в каталоге /usr/local/etc/. Называется он screenrc и его, для внесения изменений, лучше скопировать в домашний каталог пользователя. # cp /usr/local/etc/screenrc ~/.screenrc<br>Теперь отредактируем его. Вот мой вариант этого файла. #################################################################
# Screen[rc] configuration file by Daemony
###
# --- Основное ---
# Отключаем приветственное сообщение
startup_message off
# Можно включить (или выключить - off)
# визуальный биппер.
vbell on
# И то, что он будет писать в строке статуса
vbell_msg " Din! - Don! "
# "Красивые" подписи
nethack on
# Сколько строчек истории хранить в буфере
defscrollback 2000
#
# Таймаут сообщений в секундах
msgwait 1
# --- Настройки строки состояния ---
#
# Строка состояния в screen или же по другому hardstatus
# определяется несколькими параметрами, идущими в <u><strong>одну</strong></u> строку.
#
hardstatus alwayslastline "%{=b}%{g} Term: %{b}%w %=%{kG}%C%A %D %Y-%m-%d"
# здесь (я беру параметры в одинарные кавычки):
# '%{=b}' - путем эксперимента удалось выяснить, что оно делает
# черным цвет фона строки. %)
# '%{g} Term: ' - задает вывести слово ' Term: ' зелеными
# буквами (пробелы тоже считаются - ими можно делать отступы)
# '%{b}%w' - выводит список запущенных оболочек голубым цветом
# '%=' - все, что идет после этого выравнивается по правому краю
# '%{kG}%C%A' - показывает время в двенадцатичасовом формате.
# '%D, %Y-%m-%d' - показывает дату: 'чт 2008-03-06?
# - Привязки специальных клавиш -
# - отделить сессию от текущего терминала
bindkey -k k7 detach
# - уничтожить текущую сессию
bindkey -k k8 kill
# - создать новое окно
bindkey -k k9 screen
# - переименовать текущее окно
bindkey -k k; title
# bind F11 вернуться к предыдущему окну
bindkey -k F1 prev
# bind F12 перейти к следущему окну.
bindkey -k F2 next
# - Настройки для различных терминалов -
# Взяты из дефолтового конфига /usr/local/etc/screenrc За пояснениями - в ман.
termcap facit|vt100|xterm LP:G0
terminfo facit|vt100|xterm LP:G0
termcap facit al=\E[L\E[K:AL@:dl@:DL@:cs=\E[%i%d;%dr:ic@
terminfo facit al=\E[L\E[K:AL@:dl@:DL@:cs=\E[%i%p1%d;%p2%dr:ic@
termcap sun 'up=^K:AL=\E[%dL:DL=\E[%dM:UP=\E[%dA:DO=\E[%dB:LE=\E[%dD:RI=
разрыв строки
\E[%dC:IC=\E[%d@:WS=1000\E[8;%d;%dt'
terminfo sun 'up=^K:AL=\E[%p1%dL:DL=\E[%p1%dM:UP=\E[%p1%dA:DO=\E[%p1%dB:LE
разрыв строки
=\E[%p1%dD:RI=\E[%p1%dC:IC=\E[%p1%d@:WS=\E[8;%p1%d;%p2%dt$<1000>'
termcap xterm|fptwist hs@:cs=\E[%i%d;%dr:im=\E[4h:ei=\E[4l
terminfo xterm|fptwist hs@:cs=\E[%i%p1%d;%p2%dr:im=\E[4h:ei=\E[4l
termcap vt100 dl=5\E[M
terminfo vt100 dl=5\E[M
termcap xterm 'is=\E[r\E[m\E[2J\E[H\E[?7h\E[?1;4;6l'
terminfo xterm 'is=\E[r\E[m\E[2J\E[H\E[?7h\E[?1;4;6l'
termcap hp700 'Z0=\E[?3h:Z1=\E[?3l:hs:ts=\E[62"p\E[0$~\E[2$~\E[1$}:fs=\E[0}\E[61"p
разрыв строки
:ds=\E[62"p\E[1$~\E[61"p:ic@'
terminfo hp700 'Z0=\E[?3h:Z1=\E[?3l:hs:ts=\E[62"p\E[0$~\E[2$~\E[1$}:fs=\E[0}\E[61"p:
разрыв строки
ds=\E[62"p\E[1$~\E[61"p:ic@'
termcap wy75-42 nx:xo:Z0=\E[?3h\E[31h:Z1=\E[?3l\E[31h
terminfo wy75-42 nx:xo:Z0=\E[?3h\E[31h:Z1=\E[?3l\E[31h
# Удаляем некоторые ненужные или небезопасные комбинации
bind k
bind ^k
bind .
bind ^\
bind \\
bind ^h
bind h
# И еще пару строк, взятых с какого-то буржуйского сайта:
# - следущий показывает текущую активность
activity 'Activity on screen %n ^G'
# - а этим можно заменить строку hardstatus
caption always "%{+b bk}%H%{gk} | %c %{ck}%d.%m.%Y | %{gk} %?%-Lw%?%{gw}%n*%f %t%?(%u)
разрыв строки
%?%{gk}%?%+Lw%? | %{ck} Load: %l %{wk}"
#################################################################
Сохраняем этот файл и запускаем screen. # screen Запустится терминал номер ноль. Теперь в Вашем распоряжении два режима. Сразу после входа в скрины будет доступен режим оболочки, в котором можно работать с консолью как и обычно. Для того, чтобы послать программе screen какую-либо команду следует нажать Crtl-A и сказать, например: Crtl-C - для создания новой оболочки; Ctrl и цифру с номером консоли (если запущено несколько виртуальных консолей) для перехода на эту консоль; Crtl-D - для того, чтобы открепиться от скрина и вернуться в физический терминал и так далее. Назначив в конфиге "быстрые клавиши", можно использовать и их. Это наиболее распространенные комбинации (что пришли в голову), а вот еще (те что в мане накопал):
Запускать можно сколько угодно скринов. Для того, чтобы вступить во взаимодействие со screen, висящему в фоне, следует набрать # screen -rd Если запущено несколько скринов, то Вы увидите предупреждение: # screen -rd There are several suitable screens on: 43929.ttyp6.hostname (Detached) 47381.ttyp5.hostname (Detached) 48024.ttyp5.hostname (Detached) Type "screen [-d] -r [pid.]tty.host" to resume one of them. В этом случае следует указать идентификатор скрина - он кстати совпадает с id запущенного процесса screen в системе. # screen -rd 43929<br> Естественно, обычные пользователи, не могут войти в чужой скрин. Ну, а root может все. Screen'ы могут висеть в системе годами. До первой перезагрузки сервера. Если произошла перезагрузка и в этот момент висели активные скрины, то после ребута их, само собой, не останется. Но останутся их "трупы", о чем Вам сообщит программа: # screen -rd There are screens on: 48273.ttyp5.hostname (Dead ???) 47381.ttyp5.hostname (Dead ???) 48024.ttyp5.hostname (Dead ???) Remove dead screens with 'screen -wipe'. There is no screen to be detached. Мол, простите, но нет открепленных скринов. Хотя есть убиенные с такими-то идентификаторами. Лежат они себе на "кладбище" в /tmp/screens/S-USERNAME и почистить их можно так: # screen -wipe 48273 47381 48024 There is a screen on: 48273.ttyp5.hostname (Removed) 47381.ttyp5.hostname (Removed) 48024.ttyp5.hostname (Removed) 3 socket wiped out. No Sockets found in /tmp/screens/S-daemony. Главная > Программы > Screen |