Код отслеживания Google Analytics.

May 29, 2008

Screen

Если вам приходилось открывать более одного терминального окна под Сygwin, то вас возможно посещала мысль о возможности организации табов с терминалами в одном физическом окне. Данная статья рассказывает об инструменте, который позволит вам это сделать.


Screen - одна из программ стандартного *nix набора, которую наконец-то портировали под Сygwin. Это полноэкранный оконный менеджер, который сильно облегчает жизнь, когда необходимо работать с консолью. Хотя он и обладает многими возможностями я рассмотрю здесь лишь две.
Первая - это организация сразу нескольких сеансов работы в одном окне большинства из рассмотренных нами терминалов. Сеансы можно переключать между собой и настроить screen так, что бы он имитировал мультитабовый терминал. Например можно представить себе такой сценарий (под cygwin)
  1. загрузить screen.exe в терминале
  2. организовать несколько ssh сессий к удалённым серверам
  3. ещё в одном окне запустить cmd и в нем доступ к базе данных, а в пятом оставить локальный shell
  4. и работать со всем этим добром в одном физическом окне переключаясь между 5-ю виртуальными
Вторая возможность - это запустить screen уже на удалённом компьютере (если он там есть конечно же). screen не просто открывает новые терминалы, но и поддерживает сессию, которую он будет сохранять даже если соединение прервётся. Но не обязательно дожидаться этого момента - существует возможность просто отключить screen от вашего териминала, а когда нужно снова возобновить эту сессию (подключиться к ней). Разумеется все запущенные под ней программы будут продолжать работать. К сожалению этот режим под windows (в cygwin) у меня работал не слишком стабильно.
Screen настраивается с помощью редактирования файла .screenrc в вашей home-директории. Например я использую такую конфигурацию:
##    Look and Feel           ##
hardstatus alwayslastline "%{.Wc}%-w%{+u}%n %t%{-}%+w %=%{..b} %c %d/%M/%Y, %D"
##    Some general options    ##
#
# Turn off start message:
startup_message off
#
# Set messages timeout to one second:
msgwait 1
#
# Bell options
vbell off
#
#shell - we need it for properly starting bash under cygwin
shell -bash
shelltitle bash
##    Keybindings    ##
#under rxvt Shift+->, Shift+<- bindkey "^[[c" next bindkey "^[[d" prev   ##under xfce terminal  Shift+->, Shift+<- bindkey "^[O2C" next bindkey "^[O2D" prev ##new tab with shell - Alt+n  bindkey "^[n" screen 
Комментарии:
  • Знак "#" как обычно служит для комментариев.
  • hardstatus
    - это срока оформления в которой в данном случае показывает список уже созданных терминалов (текущий выделяется подчёркиванием), а с правой стороны выводится текущая дата и время.
  • две строки начинающиеся со слова "shell" позволяют мне принудительно запускать bash в режиме логина, что заставляет ее (оболочку) перечитать мои инициализационные файлы (~/.bashrc для примера)
  • конструкции bindkey определяют более привычный мне способ переключения между терминалами Shift+<стрелки вправо/влево>. Поскольку я использую два разных терминала, то и в конфиге пришлось определить две пары для каждой из команд. В обычной ситуации этого бы делать не пришлось и хватило бы лишь одной из них. Для организации нового таба я использую Alt+n. В качестве небольшого трюка - для того чтобы вставить нужную Esc-последовательность для желаемой комбинации клавиш нажмите сначала Ctrl+V, а потом саму комбинацию. Если все это проделать в нужном вам терминале, то введётся требуемая строка.
Некоторые клавиатурные команды для screen:







КомбинацияОписание
Ctrl+a cСоздать новый терминал (в моей конфигурации это ещё и Alt+n)
Ctrl+a "Представить список всех окон для выбора. (в моем случае он и так виден внизу терминала)
Ctrl+a pВернуться в предыдущее окно(в моей конфигурации эта и следующая команда могут быть вызваны с помощью ещё и Shift со стрелками)
Ctrl+a nПерейти в следующее окно
Ctrl+a dотключиться от сеанса (сеанс останется в памяти и к нему можно будет потом опять подключится например с помощью команды screen -DR)
Ctrl+dпрервать текущий сеанс shell. Это не screen команда, но тоже бывает полезна. закрытие последнего терминала закрывает и сам screen
Документацию, которая позволит более полно использовать возможности screen и в том числе описывает его настройки можно найти здесь:
Статьи об использовании screen:
Примеры .screenrc:

No comments: