Screen — текстовый оконный менеджер

    Людям, которые в Линуксе часто работают с консолью приходилось сталкиваться с проблемой необходимости нескольких терминалов, например в одном из них пользователь правит текстовый файл, а в другом идет компиляция программы. Существует много способов решения данной проблемы, например открыть несколько псевдо-терминалов или открыть несколько вкладок. В данной статье я хотел бы рассмотреть способ, не связанный с каким-то конкретным терминалом: использовать консольный оконный менеджер Screen.

    Итак, что же представляет из себя Screen?


    Screen

    Screen — это оконный менеджер с эмуляцией терминала VT100/ANSI. Другими словами, это консоль в консоли, т.е. запуская одну терминальную сессию мы можем запустить параллельно несколько команд и наблюдать за их работой. Конечно многие могут сказать, мол зачем нужен какой-то там консольный оконный менеджер, когда уже есть gnome-terminal, konsole и прочие графические эмуляторы терминала, поддерживающие вкладки?

    Рассмотрим ситуацию, когда Screen реально необходим. Предположим, что на Вас возложена обязанность удаленно управлять Linux сервером. Тогда, как и всякий другой админ, вы подключаетесь к серверу через SSH и выполняете различные команды. Если вам нужно еще одно окно, то вы создаете еще одно SSH подключение. И все идет хорошо до тех пор, пока сеть нормально функционирует, но однажды может случиться что-то непредвиденное и сеть упадет, причем и ваш локальный компьютер и удаленный сервер будут нормально функционировать, но все удаленные сессию будут потеряны, запущенный программы — убиты, несохраненные скрипты придется писать заново (особенно непрятно когда идет достаточно долгий процесс, который обваливается на самом последнем этапе и все приходится начинать сначала).

    При использовании Screen-а мы не только избавляемся от проблемы создания нескольких SSH соединений с сервером, но и в случае сбоя в сети мы можем легко переподключиться и все запущенные программы продолжат свое функционирование. Для решения проблемы достаточно заново создать SSH-соединение и набрать в консоли команду screen -dr

    Еще одной интересной особенностью Screen-а о которой я недавно узнал, является запись всего вывода консоли в текстовый файл, обычно bash ведет запись списка команд (history), а screen может записывать и вывод который был получен в результате выполнения этих команд. Для того чтобы включить запись нужно нажать в запущенном screen-е Ctrl-a H, а для завершения записи достаточно повторно нажать данное сочетание клавиш. Screen запишет все в файл screenlog.n, где n — целое число соответствующее номеру окна Screen. Обычно я проигрываю полученную «демку» таким набором команд (предположим, что запись происходила с окна под номером 1):

    time=0.1
    rows=`wc -l screenlog.1 | awk '{print $1}'`
    for i in `seq 1 $rows`; do head -$i screenlog.1 | tail -1; sleep $time; done;
    reset


    Здесь time — время задержки (чем больше это время, тем медленнее будет происходить вывод «демки»)

    Рассмотрим основные (повседневные) команды Screen. Для того, чтобы запустить Screen необходимо в терминале набрать команду screen. После чего терминал внешне не изменится (только может быть появится текст с лицензией Screen-а. Для того, чтобы исполнять специальные команды screen-а нужно сначала нажать клавижи Ctrl-a (это некоторый префикс перед всеми командами, его можно изменить с помощью файла конфигурации, но в статье я буду придерживаться идеи то, что именно сочетание клавиш Ctrl-a это префикс для команд Screen-а). Приведем некоторый список часто используемых команд:

    Ctrl-a c — создать новое окно Screen
    Ctrl-a n — переместиться в следующее окно
    Ctrl-a p — переместиться в предыдущее окно
    Ctrl-a d — отключиться от текущей сессии screen, при этом все команды продолжат свое выполнение
    Ctrl-a K — «убить» выбранное окно (нужно если программа в окне зависла и не хочет умирать самостоятельно)
    Ctrl-a " — вывести список всех окон
    Ctrl-a A — изменить название текущего окна (удобно, чтобы различать окна между собой, например поставить названия «localhost», «ssh 1.2.3.4» и т.п.

    Для того чтобы получить полный список команд можно воспользоваться этим руководством.

    Рассмотрим еще одну интересную особенность Screen, а именно назначением «биндингов» на различные сочетания клавиш. Для начала, скажу, что мне казалась нудобной привязка клавиш Ctrl-a как некого префикса, намного лучше будет сделать этим префиксом сочетание клавиш Ctrl-\. Для этого в конфигурационном файле .screenrc необходимо добавить следующую строку:

    escape \034\034

    Еще мне казалось неудобным каждый раз набирать Ctrl-a n и Ctrl-a p для перемещения по окнам, лучше если это действие будет назначено на функциональные клавиши F1 и F2 соответственно. Для этого в конфиг файл добавляем:

    bindkey -k k1 prev
    bindkey -k k2 next


    Еще было бы интересно назначить на определенные клавиши запуск определенной программы в новом окне. Рассмотрим, как пример запуск Vim-а в окне №5 по комбинации клавиш Ctrl-a e. Для этого нужно добавить в конфиг следующее:

    bind e screen -t 'Vim' 5 vim

    Еще одной особенностью Screen-а является возможность мониторинга отдельных окон на активность или неактивность. Такая функциональность удобна когда идет длительный процесс компиляции в одном окне а пользователь занимается чем-то в другом и хочет узнать когда компиляция закончится (мониторинг на неактивность) или же когда в одном окне идет наблюдение за выполнением программы (например find) и пользователь хочет узнать когда программа выдаст какие-нибудь строки на терминал (наблюдение за активностью). Для включения этого функционала необходимо нажать следующую комбинацию клавиш:

    Ctrl-a M (для слежения за активность)
    Ctrl-a _ (для сдежения за неактивность)

    На этом я хочу закончить свою статью. Я описал далеко не все возможности программы Screen, но и описанный функционал достаточен для полноценной работы. И в заключении хочу сказать, что Screen — это очень функциональная находка для всех пользователей Linux, работающих с консолью.

    P.s. Это моя первая статья на Хабре, так что прошу сильно не пинать ее в коментах, но здоровая критика всегда приветствуется. Спасибо за внимание.
    Ads
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More

    Comments 38

      +2
      спасибо конечно за просветительскую деятельность,только вто недавно ман к screen как раз перевели,лучще освещать ,то к чему тяжело найти русский манн
        +1
        учту :)
          +1
          Так то недавно, я не читал, например :)
          +1
          Статья интересная и полезная, спасибо
          Но писать:
          Это моя первая статья на Хабре, так что прошу сильно не пинать ее в коментах, но здоровая критика всегда приветствуется. Спасибо за внимание.
          — моветон, это не автору, он свою первую статью написал, это другим, которые только собираются.
            0
            Что мне всегда в скрине не нравилось, так это совершенно не тривиальная настройка сочетаний клавиш.
              –4
              а я ваще не знаю шо это такое
                0
                «...когда уже есть gnome-terminal, konsole и прочие графические эмуляторы терминала, поддерживающие вкладки?»
                прости за не просвященность, но не подскажите эмулятор терминала поддерживающий вкладки, работающий под вендой, а то десяток открытых Putty уже начинает надоедать.
                  0
                  Например, http://sourceforge.net/projects/console. Когда-то пробовал — вроде удобная и, главное, работоспособная штука.
                    +2
                    спс, нашел - http://puttycm.free.fr/ ,надстройка над Putty
                      0
                      OMG! спасибо тебе!
                        0
                        ух ты какая штука!
                          +1
                          Спасибо Вам!
                        0
                        Telneat (в окоммерческом варианте - Shellguard) - прикольная штучка...
                          0
                          putty лучше
                        +1
                        спс автору =) недавно начал изучать linux- благодаря автору узнал о screen =) Респект
                          +1
                          Вот если бы автор еще и про &, nohup и виртуальные консоли написал... а то сейчас появится новое поколение линуксоидов, ищущих оконный менеджер в консоли.
                            +1
                            Ну и слава магистрам. Я вот знаю линуксоидов, которые практически ничего не знают про консоль. Скорее это даже не линуксоиды, а что-то вроде linux-users. Они решают свои задачи. И это прекрасно, т.к. пингвин умудряется удовлетворять их потребности и без этих знаний. Как только таких юзеров появится "поколение", Тукс усядется толстой попой на массовый десктоп.
                            Ну а те, кому консоль нужна/интересна, найдут в сети чудовищное количество информации за секунды/минуты.
                            0
                            Это довольно специфическое приложение - не каждому может понадобиться, но иметь в виду, определённо, стоит.
                              0
                              например для serial консоли
                                0
                                Я запускал irssi (да-да, я считаю это лучшим IRC-клиентом) на машине в скрине и мог из любого места посмотреть что же мне написали и что вообще написали :)
                                0
                                спасибо, именно это мне и надо было.
                                Как всегда все очень просто. (=
                                  0
                                  Вопрос про привязки: а откуда автор узнавал escape-последовательности, соответствующие разным комбинациям?
                                    +1
                                    прочитал документацию
                                      0
                                      Вот чёрт, не первый раз так попадаюсь... И правда в man screen это есть.
                                    0
                                    Спасибо за статью!
                                      +1
                                      Вовремя, я только пару дней назад написал как я настроил фреймбуфер в консоли. Screen пригодится. Спасибо! Плюсы в разные места :)
                                        +2
                                        Полезная программа, особенно для демонизации приложений, для которых это не предусмотрено, например тотже rtorrent, да и не мало других приложений можно так убрать в фон.
                                          +1
                                          програма удобна очень особено отключением включением окна (сонтрол а - д)
                                          • UFO just landed and posted this here
                                            0
                                            а вы не подскажете, как можно запустить какую-нибудь программу из ГУИ в фоновом режиме, чтобы в любой момент можно было посмотреть ее вывод?

                                            пробовал создать ярлык с "screen mc" - но процесс моментально завершается
                                              0
                                              попробуйте xterm -e screen mc
                                              подробности (шрифт терминала, цвета и т. д.) - man xterm

                                              Если kde - вместо xterm - konsole, + читаем man konsole

                                              Если gnome - man gnome-terminal, соответственно
                                                0
                                                Кстати, а какая графическая система? Может, в ярлычке просто включить галочку "запускать в терминале"? :)
                                                  0
                                                  это понятно
                                                  хотелось, чтобы не было видно консоли при старте, но к ней можно было бы подсоединиться при надобности - например, посмотреть в случае проблемы что там пишется
                                                    0
                                                    Ну так запускай сразу screen -d -S mc mc
                                                    (d значит detach, S - имя экрана mc, второе mc - это команда, которая запускается в скрине). Открыть потом - screen -r mc (здесь пишем имя).
                                                    man screen поможет, кроме того, как-то пробегала новость, что его (man screen) даже перевели на русский язык...

                                                    Добавлю, что mc в screenе глючит (у меня, по крайней мере, функциональные клавиши не работали и т. д.), и его так запускать неудобно. Это удобно для того, чтобы, скажем, влез на сервер через ssh, запустил там в скрине что-то долгосрочное - компиляцию чего-нить - отключился, а оно проложлает выполняться...
                                                      0
                                                      да, спасибо!
                                                      только пришлось для запуска сделать
                                                      screen -d -m -S mc mc
                                                0
                                                screen - наше всё!
                                                  0
                                                  Соглашусь, хотя у меня в нем некоторые проблемы с zsh
                                                  0
                                                  > мне казалась нудобной привязка клавиш Ctrl-a как некого префикса

                                                  Советую поменять caps lock и ctrl в раскладке - работу с клавиатурой намного упрощает.

                                                  Only users with full accounts can post comments. Log in, please.