Screen — sztuczki

23 kwietnia 2007, Treadstone

W tym artykule opiszę bardzo przydatny program, jakim jest screen. Zwykle jest on używany przez osoby mające konto shellowe na serwerze uniksowym. Jednak, wbrew pozorom, przydatny będzie również tym, którzy dopiero co zaczynają przygodę z konsolą i Linuksem/Uniksem w ogólności.

Screen - mówiąc w uproszczeniu - jest programem, który umożliwia nam tworzenie większej liczby powłok systemowych jednocześnie bez potrzeby logowania się ponownie. Ponadto umożliwia nam pozostawienie uruchomionych programów i wylogowanie się z komputera. Do czego to może być przydatne? Na przykład do zostawienia włączonej kompilacji, bądź ściągania plików podczas, gdy inna osoba chce skorzystać z komputera, a także do używania kilku uruchomionych terminali w ramach jednego połączenia przez SSH. Zastosowań jest oczywiście o wiele więcej…

W dalszej części tekstu klawisze Ctrl i a będę zastępował skrótem C-a, Ctrl i d analogicznie C-d. Chcę jeszcze zwrócić uwagę, że C-a A (Naciśnięcie jednocześnie klawiszy Ctrl+a a zaraz po nich duże A) i C-a a (Ctrl+a i małe a) to dwa różne skróty klawiaturowe!.

1. Szybki start

Aby utworzyć nową sesję, wystarczy wpisać w terminalu polecenie screen. Da nam to dostęp do powłoki, która na pierwszy rzut oka wydaje się niezmieniona. Jednak po takiej komendzie działa na niej wiele dodatkowych, przydatnych funkcji. Zacznijmy jednak od początku.

W nowo utworzonej powłoce możemy wykonywać wszystkie czynności, do których mamy dostęp w normalnej. Gdy chcemy wyłączyć program screen, należy wcisnąć jednocześnie klawisze Ctrl i d. Jeśli chcemy by screen nie zamykał załączonych w nim aplikacji, naciskamy Ctrl i a, a zaraz po tym przycisk d. Pojawi się napis [detached], co oznacza, że screen działa w tle, a my możemy spokojnie wylogować się z komputera, pewni, że nasze programy cały czas działają. Gdy chcemy zalogować się ponownie na odłączoną sesję, wpisujemy screen -r. Możemy uruchamiać większą liczbę sesji, odłączając się od aktualnych i tworząc nowe. Jednak, gdy będziemy chcieli się połączyć z którąkolwiek, musimy znać jej PID bądź nazwę. W tym celu wpisujemy screen -list. Na wyświetlonej liście pierwsze cyfry, to właśnie numer PID. Aby przywrócić konkretną sesję, piszemy screen -r . Zapamiętywanie za każdym razem tych liczb, z pewnością nie należy do najwygodniejszych rzeczy. Tu z pomocą przychodzi nam przełącznik -S dodawany po poleceniu. Za jego pomocą możemy nadawać nazwy poszczególnym sesjom. Czyli na przykład jeśli chcemy utworzyć sesję o nazwie wget, piszemy screen -S wget. Potem możemy łatwo się do niej ponownie podłączyć wpisując po prostu screen -r wget.

2. Uruchamianie programów w tle

Czasami przydane może okazać się, aby screen za jednym poleceniem otwierał dany program w swoim oknie, a następnie sam się odłączał, dając nam dostęp do prawdziwego terminala. Służą do tego opcje -md. W połączeniu z -S możemy uzyskać ciekawe efekty:

screen -S ekg_sesja -md /usr/local/bin/ekg &

Screen utworzy jedną sesję, nazwie ją ekg_sesja, a następnie odłączy się od niej. Tym sposobem ekg będzie pracował w tle. Korzystając z tej metody, mając konto uniksowe na jakimś serwerze, możemy za jednym poleceniem mieć non stop status dostępny albo zaraz wracam, jednocześnie pracując na serwerze. Oczywiście można łączyć komendy, dzięki czemu łatwo odtworzymy swoje środowisko pracy:

screen -S ekg -md /usr/local/bin/ekg & screen -S mc -md /usr/bin/mc & //
screen -S rtorrent -md /usr/bin/rtorrent &

Spowoduje to uruchomienie w tle moich ulubionych konsolowych programów: ekg, mc i rtorrent.

3. Regiony i zakładki

Jednak, mimo że uruchamianie kilku sesji screen jest wygodne, to twórcy dali nam jeszcze możliwość uruchamiania kilku powłok w ramach jednej sesji, a nawet wyświetlania ich jednocześnie w jednym oknie terminala.

Żeby nie pogubić się w oknach, polecam stworzenie zakładek, podobnych do tych z przeglądarek www bądź z terminala Konsole czy Yakuake. Robimy to wpisując do naszego pliku konfiguracyjnego ~/.screenrc jeden z następujących ciągów:

hardstatus alwayslastline
hardstatus string '%{= mK}%-Lw%{= KW}%50>%n%f* %t%{= mK}
%+Lw%< %{= kG}%-=%D %d %M %Y %c:%s%{-}'

lub

hardstatus alwayslastline
hardstatus string '%{= kG}[ %{G}%H %{g}][%= %{= kw}%?%-Lw%?%{r}
(%{W}%n*%f%t%?(%u)%?%{r})%{w}%?%+Lw%?%?%= %{g}][%{B} %d/%m
%{W}%c %{g}]'

bądź

hardstatus alwayslastline
hardstatus string '%{gk}[ %{G}%H %{g}][%= %{wk}%?%-Lw%?%{=b kR}
(%{W}%n*%f %t%?(%u)%?%{=b kR})%{= kw}%?%+Lw%?%?%= %{g}][%{Y}%l%{g}]
%{=b C}[ %m/%d %c ]%{W}'

Uwaga: w pierwszej linijce powinien być wpis hardstatus alwayslastline, natomiast w drugiej reszta kodu.

W pierwszym będziemy widzieć numery i nazwy poszczególnych zakładek oraz aktualną datę i czas, drugi posiada zakładki tworzone na środku z zaznaczeniem na czerwono aktywnej oraz nazwę systemu, a trzeci dodatkowo pokazuje użycie procesora. Możemy oczywiście tworzyć swoje wariacje, jednak jest to dość skomplikowane – zainteresowanych odsyłam do systemowych manuali.

Mamy już zakładki, czas przystąpić do tworzenia nowych terminali.

Mając otwartą sesję screena, klikamy C-a c. Tworzą się kolejne zakładki, jednak każda z nich ma ten sam tytuł. Aby to zmienić, mając aktywną daną zakładkę, naciskamy C-a A i wpisujemy nową nazwę. Przydatną możliwością jest też tworzenie zakładek nie z powłoką, ale z samym programem uruchamianym automatycznie. Funkcja ta oprócz tego, że uruchamia od razu program, powoduje, że zakładka ma tytuł programu. Służy do tego polecenie screen wpisane po naciśnięciu C-a : (tak samo wpisujemy wszystkie inne polecenia wpisywane podczas pracy screena). Aby przełączać się pomiędzy zakładkami, klikamy C-a n, dla następnej i C-a p, jeśli chcemy przejść na poprzednią. Do przełączania służy nam też skrót C-a ”, który pokazuje listę zakładek.

Regiony

Bardzo przydatną funkcją screena są regiony. Umożliwiają one w ramach jednego okna posiadanie otwartych kilku programów bądź powłok. Aby to zrobić, należy nacisnąć C-a S. Okno zostanie podzielone horyzontalnie na dwie części. Na górze będzie nasza aktualna powłoka, dolna będzie wolna. Aby przełączyć się na nią, wciśniemy C-a [Tab]. W nowym oknie musimy utworzyć nową powłokę, czyli C-a c. Możemy utworzyć też kilka takich regionów klikając wielokrotnie C-a S i tworząc dla nich nowe powłoki. Zakładki działają odpowiednio pokazując tytuł powłoki aktywnego regionu. Mamy możliwość również przełączać zakładki będąc w jednym regionie – czyli obrazując to: mamy cztery zakładki i dwa regiony. Każdy region może mieć otworzoną jedną z czterech zakładek. Ciekawym trikiem jest też to, że możemy kilka regionów ustawić na jedną zakładkę, wtedy wszystkie będą reagowały jednocześnie. Efekt trudny do opisania lecz przydatny, gdy pracujemy w trybie multiuser i chcemy podglądać, co robi inna osoba. Rozmiar regionów możemy zmieniać za pomocą polecenia resize , gdzie pod rozmiar podstawiamy wysokość w liniach, na jaką ma być dany region duży.

Dwa okna wypełniające cały ekran ze screenem podzielonym na dwa regiony
Rys. 1 Dwa okna wypełniające cały ekran ze screenem podzielonym na dwa regiony

4. Plik konfiguracyjny

We wcześniejszym punkcie wspomniałem o wpisach do pliku konfiguracyjnego. Napisałem też, że znajduje się on domyślnie w katalogu domowym pod nazwą ~/.screenrc. Jednak możemy też posiadać kilka(naście, dziesiąt…) takich plików, a żeby wykorzystać któryś z nich, uruchamiamy screena z opcją -c . A co w takim pliku może być? W uproszczeniu, plik konfiguracyjny screena to zestaw poleceń wykonywanych zaraz po starcie samego programu. Czyli możemy do takiego pliku dać wszystkie komendy, które normalnie wpisywalibyśmy po wciśnięciu C-a :. Przykładowo załączę tutaj zawartość pliku, który powoduje rozdzielenie okna na dwa regiony oraz uruchomienie na górnym programu ekg. Polecenia wpisujemy tak jak są, tj. jedno po drugim rozdzielane enterem omijając jednak reszte linijki pisaną po myślnikach.

  • screen ekg — uruchamia ekg
  • title ekg — nadaje tytuł oknu
  • split — dzieli okno na dwa regiony przenosząc ekg na górę
  • focus — przełącza się na dolny region
  • screen — uruchamia na nim domyślną powłokę, w moim przypadku basha
  • title bash — ustawia tytuł dla dolnego regionu
  • focus — przełącza się z powrotem na górny region

Jak widać, dzięki temu możemy zautomatyzować wiele czynności, które normalnie wykonywalibyśmy po połączeniu z serwerem, bądź uruchomieniu terminala. Pełną listę poleceń wpisywanych normalnie w programie, jak i do pliku konfiguracyjnego, można znaleźć w manualu.

5. Logowanie do pliku

Aby dane wyjściowe z sesji screen (bądź z danej zakładki w ramach sesji) były pokazywane na monitorze, a jednocześnie zapisywane do pliku zastosujemy poniższe polecenia:

  • logfile , do którego screen ma logować, domyślnie screenlog.0 (bądź 1,2,3…, gdy mamy więcej powłok screena).
  • flush - po ilu sekundach screen ma zapisywać do pliku, domyślnie 10.
  • log - czy ma logować, musimy wpisać log on, aby zaczął zapisywać do pliku.

6. Hasło do sesji screen

Jeśli w sesji screen pracuje jakiś ważny program, możemy go dodatkowo chronić hasłem, które chroni sesję przed połączeniem się z nią (reattach). Do tego celu słuźy polecenie password, po czym zostaniemy poproszeni o dwukrotne wpisanie hasła. Jeśli chcemy, by hasło było na stałe, po wydaniu tego polecenia musimy wpisać jeszcze paste.

W oknie pojawi się zakodowane hasło. Następnie należy je wpisać do pliku konfiguracyjnego po wyrazie password, w jednej linijce. Aby anulować hasło dla danej sesji, wystarczy wpisać password none dla jednej sesji, bądź usunąć wpis z pliku konfiguracyjnego, aby pozbyć się hasła na zawsze.

7. Screen uruchamiany od razu po połączeniu się ze zdalnym hostem.

W rzeczywistości ta porada niewiele ma wspólnego z samym screenem, jednak jest ona w moim przekonaniu bardzo przydatna. Jeśli chcemy, aby screen załączał się od razu wraz z połączeniem ze zdalnym hostem, wystarczy wpisać polecenie: ssh uzytkownik@zdalnyhost -t screen -RD. Niestety działa to jedynie, gdy mamy uruchomioną jedną sesję screena na zdalnym hoście. Gdy jest ich więcej, musimy znać PID bądź nazwę danej sesji i zastosować taką składnię: ssh uzytkownik@zdalnyhost -t screen -R . Po zakończeniu pracy screena, SSH automatycznie nas wyloguje.

8. Blokowanie ekranu

Służy do tego komenda lockscreen, bądź skrót C-a x. Nie powoduje ona jednak blokowania sesji (tak jak w pkt. 2.), lecz blokowanie samego ekranu. Czyli odłączenie i ponowne podłączenie spowoduje, że otrzymamy dostęp do sesji. Funkcja może być przydatna, jeżeli jesteśmy podłączeni ze zdalnym serwerem za pomocą powyższej porady, a musimy odejść na chwilę od komputera. Nie możemy zmienić hasła, którym jest nasze hasło użytkownika.

9. Uwagi

Myślę, że powyższe informacje będą dla Was przydatne. Sam przez długi czas używałem screena nie mając większego pojęcia o czymś takim jak regiony, zakładki i inne opisane powyżej funkcje. Pozdrawiam i życzę owocnej pracy:) Wszelkie pytania proszę kierować na lukiasz@gmail.com.

Znalazłeś literówkę? Zgłoś ją używając formularza!

Wpisz wynik działania: jeden - 6:

Komentarze (RSS)

Liczba komentarzy: 23

zwiń wątek Zarov  23 kwietnia 2007 o godz. 21:58 # Zwiększ karmę Zmniejsz karmę Cofnij swój głos Zgłoś komentarz do usunięcia KARMA: 0 [Pokaż komentarz]

Przydatne, brawo :)

 
zwiń wątek Vicious  23 kwietnia 2007 o godz. 23:38 # Zwiększ karmę Zmniejsz karmę Cofnij swój głos Zgłoś komentarz do usunięcia KARMA: -1 [Pokaż komentarz]

Dobry artykuł. Przyda się początkującym a i wyjadaczom co nie co przypomni ;)

 
zwiń wątek rootkit  24 kwietnia 2007 o godz. 8:04 # Zwiększ karmę Zmniejsz karmę Cofnij swój głos Zgłoś komentarz do usunięcia KARMA: 0 [Pokaż komentarz]

No, bardzo fajny artykuł, akurat używam shella i screena, ale wielu rzeczy o nim nie wiedzialem ;]

 
zwiń wątek Andrze86  24 kwietnia 2007 o godz. 8:59 # Zwiększ karmę Zmniejsz karmę Cofnij swój głos Zgłoś komentarz do usunięcia KARMA: 0 [Pokaż komentarz]

Wielkie dzięki, art bardzo przydatny, szczególnie tym, którzy na co dzień korzystają ze shella.

 
zwiń wątek taki kolo  24 kwietnia 2007 o godz. 15:12 # Zwiększ karmę Zmniejsz karmę Cofnij swój głos Zgłoś komentarz do usunięcia KARMA: -3 [Pokaż komentarz]

“Dobry artykuł. Przyda się początkującym a i wyjadaczom co nie co przypomni”

Artykuł bardzo dobry moim zdaniem, przejrzyście i rzeczowo napisany.
Ale jako zwykły, szary użytkownik, “nie_informatyk” musze powiedzieć:

O CO TU CHODZI?

Zupełnie zielonym (jak ja) ten artykuł raczej się nie przyda ;)

 
zwiń wątek ksywa  24 kwietnia 2007 o godz. 21:27 # Zwiększ karmę Zmniejsz karmę Cofnij swój głos Zgłoś komentarz do usunięcia KARMA: -1 [Pokaż komentarz]

czesc

art dobry

pytanie tylko co do zakladek, wklepujac byle ktora twoja propozycje nic nie widac (poprzez putty)

 
zwiń wątek ojciecd  25 kwietnia 2007 o godz. 9:53 # Zwiększ karmę Zmniejsz karmę Cofnij swój głos Zgłoś komentarz do usunięcia KARMA: 0 [Pokaż komentarz]

Ciekawy tekst, dowiedziałem się z niego paru rzeczy (mimo iż użytkuję screen… niejeden dzień). Przydałoby się jednak nieco pracy redakcyjnej nad nim, która usunęłaby niektóre “skróty myślowe” (jak np. informację o Ctrl-D, która to kombinacja klawiszy, ku mojemu zadziwieniu, “kończy screen” po prostu :]).

 
zwiń wątek Treadstone  25 kwietnia 2007 o godz. 18:35 # Zwiększ karmę Zmniejsz karmę Cofnij swój głos Zgłoś komentarz do usunięcia KARMA: 0 [Pokaż komentarz]

@ksywa - masz rację, błąd wynikający z formatowania tekstu: w pierwszej linijce powinno być:

hardstatus alwayslastline

w drugiej natomiast reszta kodu, nie oddzielana enterem.
Niejasność już jest poprawiona, dodałem odpowiedni komentarz do tej części artykułu.

 
zwiń wątek fromasz  25 kwietnia 2007 o godz. 19:57 # Zwiększ karmę Zmniejsz karmę Cofnij swój głos Zgłoś komentarz do usunięcia KARMA: 0 [Pokaż komentarz]

Treadstone widac w twoim artykule profesjonalizm!

Artykul napisales na dobry temat, gdyz screen jest bardzo przydatna rzecza a w internecie ciezko cokolwiek znalesc na ten temat.

Wielkie brawa dla Ciebie!!

 
zwiń wątek ksywa  27 kwietnia 2007 o godz. 7:23 # Zwiększ karmę Zmniejsz karmę Cofnij swój głos Zgłoś komentarz do usunięcia KARMA: 0 [Pokaż komentarz]

czesc

dzieki za szybki odzew, czy moglbys jeszcze zawrzec informacje na temat ustawienia putty i linuxa aby zgadzaly sie jak domyslam kodowanie znakow

chodzi mi o to ze ze jak lacze sie poprzez putty to po odpaleniu sesji screen niektore klawisze mam przemapowane

 
zwiń wątek Treadstone  27 kwietnia 2007 o godz. 19:38 # Zwiększ karmę Zmniejsz karmę Cofnij swój głos Zgłoś komentarz do usunięcia KARMA: 0 [Pokaż komentarz]

Sprawdź, czy na pewno masz ustawienia putty w porządku. Możesz też spróbować wyłączyć opcję w putty “Alternate screen” oraz/lub “Disable switching to alternate terminal screen”. Jeśli to nie pomoże, spróbuj do .screenrc dopisać taką linijkę: “termcapinfo xterm ti@:te@”. Koniecznie upewnij się, czy masz kodowanie w putty identyczne z tym, które ma zdalny system. Mi na tym programie (odpalonym przez wine) wszystko działało jak należy niezależnie od tego, czy screen działa, czy nie. Jeśli powyższe wskazówki nie pomogą, poczytaj faq na stronie putty, a jeśli dalej będziesz miał problem, załóż wątek na forum, postaram się pomóc.

 
zwiń wątek longinus torwaldzki  28 kwietnia 2007 o godz. 13:23 # Zwiększ karmę Zmniejsz karmę Cofnij swój głos Zgłoś komentarz do usunięcia KARMA: +2 [Pokaż komentarz]

witam,

świetny artykuł - szybko i konkretnie zapoznał mnie ze screenem - na początek o niebo lepszy od manuala:)

pozdrawiam

 
zwiń wątek pi00  3 maja 2007 o godz. 19:53 # Zwiększ karmę Zmniejsz karmę Cofnij swój głos Zgłoś komentarz do usunięcia KARMA: 0 [Pokaż komentarz]

Chyba wymyśliłem nowy skrót :D
Ctrl trzymamy naprzemiennie a i backspace i widzimy kolejny okna, hm, tzn. poprzednie :)

 
zwiń wątek etch @ dns-323 at btd  10 maja 2007 o godz. 9:03 # Zwiększ karmę Zmniejsz karmę Cofnij swój głos Zgłoś komentarz do usunięcia KARMA: -2 [Pokaż komentarz]

[…] jest tu: http://wiki.dns323.info/howto:chroot_debian. [edit] Tak, jestem lama, bo dopiero teraz poczytałem jaki fajny jest screen i z czym go jeść. Szkoda że nie pamiętam mapowania portów na routerze, […]

 
zwiń wątek pi00  12 maja 2007 o godz. 12:23 # Zwiększ karmę Zmniejsz karmę Cofnij swój głos Zgłoś komentarz do usunięcia KARMA: 0 [Pokaż komentarz]

Ale żem wyskoczył z tym wymyślonym skrótem :D Sam na niego wpadłem, ot co :)

 
zwiń wątek Treadstone  12 maja 2007 o godz. 13:54 # Zwiększ karmę Zmniejsz karmę Cofnij swój głos Zgłoś komentarz do usunięcia KARMA: 0 [Pokaż komentarz]

@pi00 - fajnie fajnie, ale to samo robi C-a p :-P

 
zwiń wątek viater  3 czerwca 2007 o godz. 19:05 # Zwiększ karmę Zmniejsz karmę Cofnij swój głos Zgłoś komentarz do usunięcia KARMA: +1 [Pokaż komentarz]

Extra !!! Tylko za cholere nie moge dojsc, jak zrobic taki uklad, jak na zalaczonym obrazku (Rys.1) ?

 
zwiń wątek COVERek  10 czerwca 2007 o godz. 12:54 # Zwiększ karmę Zmniejsz karmę Cofnij swój głos Zgłoś komentarz do usunięcia KARMA: +1 [Pokaż komentarz]

Jak podzelic tego screena na 4 czesci? Nie daje rady… :(

 
zwiń wątek Treadstone  11 czerwca 2007 o godz. 18:01 # Zwiększ karmę Zmniejsz karmę Cofnij swój głos Zgłoś komentarz do usunięcia KARMA: +1 [Pokaż komentarz]

Niestety nie znam możliwości podzielenia okna ze screenem horyzontalnie - to, co jest na zrzutce to po prostu “Dwa okna wypełniające cały ekran ze screenem podzielonym na dwa regiony”

Przepraszam, obrazek rzeczywiście może być trochę mylący:)

 
zwiń wątek GNU Screen - najczesciej uzywane opcje … | sinx/n = 6  13 czerwca 2007 o godz. 20:52 # Zwiększ karmę Zmniejsz karmę Cofnij swój głos Zgłoś komentarz do usunięcia KARMA: +1 [Pokaż komentarz]
 
zwiń wątek pi00  22 września 2007 o godz. 11:33 # Zwiększ karmę Zmniejsz karmę Cofnij swój głos Zgłoś komentarz do usunięcia KARMA: +1 [Pokaż komentarz]
 
zwiń wątek pi00  19 grudnia 2007 o godz. 16:22 # Zwiększ karmę Zmniejsz karmę Cofnij swój głos Zgłoś komentarz do usunięcia KARMA: +1 [Pokaż komentarz]
 
zwiń wątek Madry  18 stycznia 2008 o godz. 15:20 # Zwiększ karmę Zmniejsz karmę Cofnij swój głos Zgłoś komentarz do usunięcia KARMA: +3 [Pokaż komentarz]

Swietny art, tylko brakuje na koncu jakiejs zbiorczej tabelki z klawiszologia, przydatne do wydruku i do szybkiego powrotu do tekstu gdy zajdzie potrzeba.

 

Komentarze do tego wpisu są wyłączone.

O Autorze

Łukasz Olender

Uczeń I klasy LO z Chorzowa oraz 9 roku szkoły muzycznej. Do Linuksa podszedł z początku jako coś nowego, aby zabić wakacyjną nudę i przy okazji czegoś się nauczyć. Teraz od ponad roku używa Debiana, z Fvwm jako zarządcą okien.

RSS

Możesz śledzić komentarze do tego artykułu poprzez specjalny kanał; RSS 2.0 .

Inne z kategorii HOWTO

 więcej »

Inne z kategorii Konsola

 więcej »

Najpopularniejsze

Porównaj dystrybucje!

vs

Dołącz do nas!

Piszesz teksty o Linuksie? Nie pisz do poduszki! Publikuj na jakilinux.org!
Więcej o współpracy na blogu Grupy Jakilinux.

Butik JL

jakilinux butik
Obejrzyj więcej produktów i wybierz coś dla siebie.

Subskrybuj Biuletyn!

Biuletyn Grupy Jakilinux to okresowy subiektywny przegląd najważniejszych informacji o których piszemy w naszych serwisach, który wysyłamy e-mailem. Subskrybuj biuletyn!

Reklama

To jest miejsce na Twoją reklamę! Więcej informacji: Reklama w jakilinux.org