Главная | Контакты



Главная > Программы > 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.

Команды указываются по одной в строке, пустые строки игнорируются.  Разделители между аргументами и ключами -  символы табуляции или пробелы. Символ '#' и следующий за ним текст - комментарии (исключение - помещение его в кавычки).

Команды могут содержать ссылки на переменные окружения. Синтаксис подобен shell - "$VAR " или "${VAR}".

Пример файла конфигурации находится в /usr/local/share/examples/screen/screenrc. (вот тут какая-то ошибка в мануале, насчет файлов примеров - такую мелочь можно простить).

Команды можно ввести в процессе работы программы, путем нажатия 'Ctrl-a :'.

В файле screenrc и в "командном" режиме доступны следующие команды:

  • acl-команды, определяющие доступ к сессии, привилегии - как для пользователей, так и для групп;
  • bind-команды - привязка  клавиш;
  • команды оформления;
  • другие команды.

Читайте мануал - команд много - все таки первоисточник.

Приведу мой конфиг:

###
# 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 без параметров:

diesel@debian:~$  screen 

При этом, в зависимости от настроек screen в вашей системе, либо просто появится приглашение шелла, либо "экран приветствия", нажав SPACE или ENTER в котором, вы так же попадете в shell. Вроде бы ничего необычного, кроме того, что этот shell будет уже запущен "внутри" screen'а.

Для того, чтобы выйти из screen'а (выйти, а не отсоединиться) достаточно выйти из всех открытых в нем оболочек, либо же, нажать комбинацию клавиш Ctl-a \, и ответить "y" на вопрос "действительно ли вы хотите выйти".

Отсоединиться от текущего скрина, не закрывая и не завершая сессии, можно комбинацией Ctrl-a d.

Если на машине уже есть запущенная screen-сессия, и вы хотите подсоединиться к ней, то

  1. если сессия одна, достаточно просто команды:
    diesel@debian:~$  screen -x 
  2. если сессий несколько, то: посмотреть список запущенных screen'ов можно командой screen -ls:
     
    diesel@debian:~$  screen -ls
    There are screens on:
            2762.pts-0.debian       (Detached)
            2743.pts-0.debian       (Detached)
    2 Sockets in /var/run/screen/S-diesel.
    
    

    diesel@debian:~$

    Выбираем нужный нам screen, и присоединяемся к нему:

     screen -x 2762.pts-0.debian 

    Названия сессий по-умолчанию малоинформативны - просто номера процессов, если есть желание запустить и использовать несколько screen-сессий для разных задач, можно придумать более вменяемые названия. Придумываем название, затем запускаем новый screen вот таким образом:

      diesel@debian:~$  screen -S "job1" 

    где job1 - это название нашей "именнованной" сессии. Теперь в -ls мы увидим гораздо более понятное:

     
    diesel@debian:~$  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, просто указав ее имя:

    diesel@debian:~$  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