Консольный оконный менеджер - SCREEN

Материал из megapuper
Перейти к: навигация, поиск

SCREEN - полноэкранный и достаточно мощный консольный оконный менеджер с поддержкой скроллинга и поиска в окне и функцией копирования-вставки между ними. Наиболее интересная функция данного менеджера заключается в том что Вы можете в любой момент отсоединиться от своего screen`a и закрыть сеанс работы в шеле. После этого Вы можете присоединившись к screen`у вновь продолжить свою работу с того места где Вы остановились.

В чем собственно говоря удобство, небольшой пример из личного опыта. Интернет подключение по ADSL технологии, что подразумевает обрыв связи и переподключение, хоть и автоматически, но раз в сутки стабильно и без согласия кого-либо (особенности ADSL). Занимаясь удаленным администрированием серверов, для собственного удобства, как правило открываю несколько SSH сессий с разными серверами, и может случится неприятная ситуация, когда на одном из серверов компилируется какое-то тяжелое приложение, ядро или мир системы, а на другом например запущен какой-то скрипт выводящий данные в окно терминала, и которые я отслеживаю в реалтайме, ну или производятся какие-то другие работы, не суть важно, вдруг обрывается связь. Конечно можно перенаправлять вывод в файл, но у меня это в привычку не вошло, мне интересней быть в курсе происходящего в системе в данный момент, насколько это возможно конечно в данный момент. В общем по сути, это означает, что никто на 100% не скажет, насколько успешно завершилась операция, запущенная до обрыва связи, а это означает, что нужно переделать/запустить заново, в общем потеря времени и расход нервных клеток.

Теперь ближе к сути. По-умолчанию screen в системе не установлен, напомню, речь идет в контексте операционной системы Freebsd 8-й ветки.

# cd /usr/ports/sysutils/screen
# make install


В самом screen, почти все сочетания клавиш работают через комбинацию [ Ctrl+a ], то есть сначала нажимаем ее, а уже затем управляющую комбинацию.

Для запуска просто набираем в консоли screen.

Опции командной строки:
-rd - подключиться к screen. Будет произведён detach для остальных сессий.
-r <номер_сессии> - подключение к определённой сессии.
-ls - список запущенных менеджеров.
-x - подключение к неотсоединённому screen. Для одновременной работы с одним screen.


Наиболее часто используемые мной сочетания клавиш:

Ctrl+a, c создать новое окно терминала
Ctrl+a, [0..9] переключение между окнами
Ctrl+a, " список окон
Ctrl+a, d отсоединить screen от экрана. Сам screen при этом никуда не девается и висит в фоне, продолжая выполнять задачи
Ctrl+a, S текущее окно разделяется на две части и в обоих можно открыть по новому окну(режим сплита)
Ctrl+a, Tab переход между окнами, созданными предыдущей командой
Ctrl+a, Q выход из режима сплита
Ctrl+a, k убить текущее окно терминала (попросит подтверждения)
Ctrl+a, \ закрыть screen, все виртуальные терминалы будут при это убиты (попросит подтверждения).
Ctrl+a, ? справка по доступным командам
Ctrl+a, C очистить окно
Ctrl+a, F подогнать размер окна
Ctrl+a, H протоколирование в файл screenlog.<номер_окна>
Ctrl+a, ? помощь


Программа screen может работать сколь угодно долго, пока не будет перезагружен сервер. Если такое случится, в системе останутся мертвые тушки, ранее работавших экземпляров screen, о чем вы будете проинформированы следующим образом:

# screen -rd
There are screens on:
       48273.ttyp5.hostname     (Dead ???)
Remove dead screens with 'screen -wipe'.
There is no screen to be detached.


тут-же предложен вариант избавления от трупиков:

screen -wipe


Ну и ещё можно поиграться с настройками внешнего вида, подрихтовав конфиг /usr/local/etc/screenrc:

#Отключаем приветствие
startup_message off
#Настройка строки состояния
caption always "%{gk}%H%{gk} | %c %{gk}%d.%m.%Y | %{gk} %?%-Lw%?%{gk}%n*%f %t%?(%u)%?%{gk}%?%+Lw%? | %{gk} Load: %l %{gk}"