Skip to content

09.03.2009 22:39

9

HOWTO screen

screen

/usr/bin/screen to stosunkowo niewielki programik, który tworzy wirtualne terminale. Program ten w założeniu ma ułatwiać pracę z systemami uniksowymi, gdzie administrator spędza większość czasu klepiąc magiczne polecenia w konsoli. Dzięki screenowi zamiast jednego czarnego okna może on ich mieć dowolną ilość.

W dzisiejszych czasach screen jest rzadko używany. W dobie rozbudowanych środowisk graficznych oraz zakładek w takich programach jak konsole (KDE) czy terminal (GNOME) wydaje się on narzędziem przestarzałym i na wymarciu. W niniejszym wpisie mam zamiar jednak pokazać potęgę tego programu i mnogość jego zastosowań, które na pewno niejednemu adminowi ułatwią znacznie pracę.

.screenrc

.screenrc to plik konfiguracyjny screena. Tutaj opisujemy różne zaawansowane funkcje w jakie chcemy wyposażyć program. Aby jakieś nowe funkcje dodane do pliku zaczęły działać, screen musi zostać uruchomiony ponownie. Nie znam możliwości na wczytanie nowych opcji do działającego już screena. Program, uruchamiając się, wczytuje sobie do pamięci pliczek ~/.screenrc [1. Domyślna lokalizacja pliku. Jednak nic nie stoi na przeszkodzie aby z opcją -c podać inną lokalizację.] i konfiguruje środowisko pracy zgodnie z tym, co ma w tym pliku podane.
Poniżej zamieszczam to, co znajduje się w moim pliczku .screenrc:

[sourcecode language='bash']
#
#
# .screenrc – plik konfiguracyjny programu screen.
# Zawiera dodatkowe opcje konfiguracji, ktore czesto
# znaczaco poszerzaja podstawowe mozliswoci
# programu i ulatwiaja prace z nim.
hardstatus alwayslastline
hardstatus string „[%{wk}%?%-Lw%?%{=b kR} (%{W}%n*%f %t%?(%u)%?%{=b kR})%{= kw}%?%+Lw%?%?%= %{g}][%{Y}%l%{g}] %{=b C}[ %m/%d %c ]%{W}”

# Zmienia sposob podswietlania tekstu (man screen)
sorendition 04 33

# przerzuca screena w tlo w razie niespodziewanego
# rozlaczenia
autodetach on

# przywroc zawartosc ekranu po wyjsciu z
# programu (np mana)
altscreen on

# przewijanie
compacthist on

# bell wyl/wl
vbell off

# wielkosc buforu gdzie przechowywane
# sa zapamietane linie
defscrollback 300000

# Przelacza sie na okno z idem 0,
#czyli pierwsze okno.
select 0
[/sourcecode]

Nie ma tego wiele, ale najważniejsze w sumie są dwie linijki:
hardstatus string
oraz
defscrollback.

Pierwsza sprawia, że na dole ekranu będziemy mieli manu z „oknami” screena, aktywne okno będzie znajdowało się miedzy dwoma czerwonymi nawiasami () a nazwa takiego okna będzie pogrubiona, a także zobaczymy aktualne obciążenie maszyny, na której uruchomiony został screen oraz datę wraz z godziną [patrz screen screena poniżej ;-)].

Domyślnie każde z okien screena nazywane jest bash. Można to jednak w prosty sposób zmienić i dowolnie nazywać okna. Zmianę nazwy dokonujemy za pomocą skrótu klawiszowego. Skróty screena opiszę w dalszej części wpisu.

Druga opcja powoduje, że screen zapamięta 300 000 linii historii tego, co było wyświetlone w oknie. Jest to szczególnie przydatne wtedy, kiedy rozłączymy się ze screenem i po ponownym podłączeniu chcielibyśmy przejrzeć co się działo na ekranie. Przydaje się także, kiedy zrobimy listing jakiegoś katalogu zawierającego setki plików, lub w całym mnóstwie innych przypadków. Oczywiście te osoby, który spróbują użyć kółka myszki lub kombinacji klawiszy shift+page up/down będą zawiedzione, bo to nie zadziała. W screenie do większości, jeśli nie do wszystkich opcji dostajemy się poprzez

Skróty klawiszowe

Skoro już sobie upiększyliśmy surowe okno programu screen, możemy przejść do najciekawszych możliwości korzystania z tego programu – do używania skrótów klawiszowych. screen wyposażony jest w całe mrowie takich skrótów (polecam man screen), jednak ja tutaj zaprezentuję Wam kilka, według mnie, najważniejszych i najbardziej przydatnych.

ctrl + a + c – tworzy nową zakładkę/region w screenie
ctrl + a + ctrl + a – przełącza na ostanio wyświetlaną zakładkę/region
ctrl + a + " – umożliwia wpisanie numeru zakładki/regionu do którego chcemy się przełączyć
ctrl + a + A – zmienia tytuł zakładki/regionu
ctrl + a + C – „czyści” zakładkę/region
ctrl + a + ctrl + d – odłącza screena od terminala, nie wyłączając działających w nim programów
ctrl + a ctrl + g – włącza tryb wizualnego dzwonka
ctrl + a spacja – przełącza się do następnej zakładki/regionu
ctrl + a back space – działa jak ze spacją, tylko w drugą stronę
ctrl + a, a , ctrl +a + d – rozłączenie screena w screenie
ctrl + a, x – blokuje sesję screena nie odłączając go. Aby wznowić sesję należy podać hasło usera.
ctrl + a [ - przewijanie linii

Praca z przewijaniem linii w screen:

Aby poruszać się po zapamiętanych liniach w górę i w dół należy skorzystać z wyżej wymienionego skrótu klawiszowego (spróbujcie sobie przypomnieć, który to) i dalej już możemy użyć tych klawiszy i lub kolejnych skrótów:

h - Przesuń kursor w lewo i jeden znak
j - Przesuń kursor w dół o jedną linię
k - Przesuń kursor w górę o jedną linię
l - Przesuń kursor w prawo o jeden znak
0 - Przejdź na początek bieżącej linii
$ - Przejdź na koniec bieżącej linii
ctrl + u - Przewiń pół strony w górę
ctrl + b - Przewiń całą stronę w górę
ctrl + d - Przewiń pół strony w dół
ctrl + f - Przewiń całą stronę w dół

Działają też wtedy strzałki na klawiaturze, kółko w myszce, klawisze page up i down, end i home.

Podział okna na wiele aktywnych regionów

Domyślnie screen stworzy nam jeden "region", czyli jedną powłokę. Możemy jednak za pomocą skrótu ctrl + a + c otworzyć sobie dowolną ilość takich zakładek/regionów. Czasami zachodzi potrzeba podglądania dwóch, lub więcej zakładek na raz. screen daje taką możliwość. Możemy okno screena podzielić na dowolną ilość równych części za pomocą jednego skrótu:

ctrl + a + S

Spowoduje to podzielenie ekranu na dwie poziome części. Aby przełączyć się na drugi region należy nacisnąć:

ctrl + a + tab

i otworzyć sobie nową powłokę, lub przejść do jednej z już otwartych.
Przy dużych monitorach podział na 3 części umożliwia naprawdę wygodną pracę. Ja na 17' monitorze zazwyczaj dzielę sobie okno na dwie części:

Aby zmniejszyć ilość aktywnych regionów o jeden należy nacisnąć:

ctrl + a + X

Proste, prawda?
A jak ułatwia pracę.
Nie da się zrobić pionowego podziału okna, a szkoda. Aczkolwiek jak się ktoś bardzo uprze, to znajdzie całkiem sporo programów umożliwiających taki bajer.

Dodatkowe polecenia, opcje i zastosowania dla screena

W moim pliczku znajdziecie tylko te opcje, których sam używam. Nie wyczerpują one jednak pełnych możliwości jakie daje screen. Jedną z ciekawszych jest możliwość tworzenia własnych skrótów klawiszowych umożliwiających uruchamianie całkiem rozbudowanych poleceń za pomocą trzech ruchów palców na klawiaturze.

Przykładowo załóżmy, że chcemy szybko móc podejrzeć logi z /var/log/syslog za pomocą programu tail. W tym celu do .screenrc dodajemy następującą linijkę:

[sourcecode language='bash']
# tworzenie skrotu klawiszowego
#
bind ^ screen -t sudo tail -f /var/log/syslog
[/sourcecode]

Teraz, wciskając ctrl+A+^ otworzymy nowe okno screena w którym od razu dostaniemy wynik polecenia tail. Oczywiście musimy najpierw podać hasło roota ;-)

Kolejną ciekawą możliwością jest automatyczne otwarcie kilku okien z różnymi poleceniami podczas startu screena. W tym celu do pliku .screenrc należy dodać:

[sourcecode language='bash']
# automatyczny start komendy
#
screen sudo tail -f /var/log/syslog
[/sourcecode]

Wynik będzie taki sam jak poprzednio, ale teraz nie będziemy musieli naciskać żadnego kombosa na klawiaturze. Podgląd logów otrzymamy już na starcie. Oczywiście jeśli naciśniemy ctrl+c to zamkniemy sobie screena [2. Jeśli to okno było jedynym otwartym oknem screena.].

screen ma jeszcze kilka ciekawych właściwości. Jak już się pewnie zorientowaliście, można w screenie uruchomić jakieś polecenie i odłączyć się od niego a polecenie nadal będzie się wykonywało, tak jakbyśmy cały czas byli podłączeni do powłoki. To bardzo ważna właściwość tego programu. Ja już w zasadzie nie pracuję inaczej jak przez screena właśnie. Jednak to nie wszystko. Przypuśćmy, że chcecie komuś pokazać jak poradzić sobie ze specyficznym problemem na jednym z firmowych serwerów. Kolega nie pracuje z Wami w jednym biurze, ale jest gdzieś zupełnie indziej. Logujecie się na serwer, uruchamiacie screena nadając tej sesji nazwę jakąś nazwę, na przykład problem:

# screen -S problem

# screen -ls

There is a screen on:

11641.problem (09.03.2009 21:20:59) (Attached)

1 Socket in /var/run/screen/S-waltharius.

Jak widać ta sesja screena dostała nazwę składającą się z $PID.[nasza_nazwa]. Mamy też informację, że ta sesja jest podłączona (Attached), czyli ktoś na niej działa. W tym wypadku jesteśmy to my właśnie. Teraz, informujemy naszego kolegę, żeby zalogował się na serwer, na tego użytkownika, jakiego sami użyliśmy do stworzenia sesji screena i wpisał u siebie w konsoli:

# screen -x problem

Powinien on teraz znaleźć się w naszej sesji nie rozłączając nas przy tym. Cokolwiek, którykolwiek z nas wpisze, będzie od razu widoczne na obu sesjach. Dzięki temu możemy w łatwy sposób pokazać coś skomplikowanego koledze, który nie może podejść do naszego terminala.

Aby podłączyć się do wcześniej rozłączonej sesji screena wystarczy wpisać:

# screen -r [nazwa_sesji]

lub

# screen -r $PID_sesji

Ile screena w screenie

Kiedyś przez przypadek uruchomiłem screena w screenie. Ciekawe doświadczenie :) Spróbujcie jak już opanujecie podstawowe skróty. Tutaj znajdziecie jeden, który Wam pomoże rozłączyć sesję screena w screenie nie rozłączając "głównego" screena. Ciekawa konstrukcja zdaniowa :)

Podsumowanie

Oczywiście screen ma o wiele więcej zastosowań i możliwości, jednak ten artykuł miał tylko rozbudzić Wasze apetyty. Więcej znajdziecie w naprawdę obszernym i dobrze napisanym manualu. Gorąco zachęcam do lektury. Ten program potrafi zaoszczędzić mnóstwo czasu i pomóc w wykonywaniu codziennej pracy każdemu administratorowi systemów uniksowych oraz każdej osobie często pracującej w powłokach uniksowych. Jest niezależny od shella, więc będzie równie dobrze działał w bashu, ksh, zsh i innych wynalazkach, co tylko świadczy o jego uniwersalności i sile.

Read more from Linux
  • http://karwasz.pl karwasz

    „W dzisiejszych czasach screen jest rzadko używany”. Kto rzadko ten rzadko. Jak dla mnie najważniejszą zaletą screen jest możliwość pozostawienia sesji w tle pomiędzy wylogowaniami.

  • http://lunco.wordpress.com Lunar

    No Walth przydatny wpis Ci powiem ;P Nareszcie będę mógł zarówno pisać jak i testować skrypty :D

    ehh szkoda, że o takich progsach wspomina się tak rzadko -.-

    Lunar’s last blog post..Metamorfoza bloga

  • http://waltharius.pl Marcin Radczuk

    Sławek cóż, ja nie twierdzę, że nikt tego nie używa. Jest całkiem sporo osób doceniających potęgę tego programu. Ba! powstał nawet cały menadżer okien oparty o screena. Nazywa się Ratpoison i umożliwia pracę bez użycia myszki. Po prostu screena rzadko się używa wykorzystując ułamek jego możliwości.

    Lunar – cieszę się, że wpis okazał się dla Ciebie przydatny :)

  • http://blog.ikari.pl/ ikari

    Dzięki!
    Wstawiłem sobie statusbar do screena, od razu czuję się lepiej ;-) Faktycznie, nigdy nie pokusiłem się o czytanie manuala poza skrótami klawiaturowymi (najpotrzebniejszymi), nie miałem nawet pojęcia, że tak można. Barrrrdzo przydatny wpis :>
    A screena używam na co dzień – odpalam w nim ekg2 ;-) (że wisi to jedno, ale mogę także podpiąć się do niego bezboleśnie np. przez putty z uczelni – i to już jest genialne)

    ikari’s last blog post..Happy End

  • http://waltharius.pl Marcin Radczuk

    ikari – fakt, statusbar jest świetny. Znacznie ułatwia poruszanie się po otwartych konsolach. Cieszę się, że wpis się przydał :) Sam kiedyś b. długo szukałem w sieci jakiś informacji o screenie i w końcu zacząłem samodzielnie eksperymentować i postanowiłem podzielić się tym co znalazłem w sieci oraz co sam zdołałem wyszarpać z mana.

  • http://surion.wordpress.com/ Surion E.

    Mega! :D Dzięki za uświadomienie co do ratpoison. Nie zaglądałem nigdy do mana screena, ale teraz chyba mnie do tego skłoniłeś. :D

    Surion E.’s last blog post..(K)ubuntu 9.04

  • http://waltharius.pl Marcin Radczuk

    Dzięki :) RTFM ;-) Zawsze!

  • kar

    Fajny art, napisz proszę jak dodać ścieżkę przeszukiwania do screena.

  • http://waltharius.pl Marcin Radczuk

    Dzięki. Co rozumiesz, przez „ścieżkę przeszukiwania”? U mnie na każdym serwerze działa dopełnianie tabem i w ogóle bash completion. Sprecyzuj proszę pytanie.

stat4u