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.
![]()
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 ekgtitle ekg— nadaje tytuł oknusplit— dzieli okno na dwa regiony przenosząc ekg na góręfocus— przełącza się na dolny regionscreen— uruchamia na nim domyślną powłokę, w moim przypadku bashatitle bash— ustawia tytuł dla dolnego regionufocus— 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.
Liczba komentarzy: 23
Komentarze do tego wpisu są wyłączone.




Przydatne, brawo
Dobry artykuł. Przyda się początkującym a i wyjadaczom co nie co przypomni
No, bardzo fajny artykuł, akurat używam shella i screena, ale wielu rzeczy o nim nie wiedzialem ;]
Wielkie dzięki, art bardzo przydatny, szczególnie tym, którzy na co dzień korzystają ze shella.
“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
czesc
art dobry
pytanie tylko co do zakladek, wklepujac byle ktora twoja propozycje nic nie widac (poprzez putty)
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 :]).
@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.
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!!
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
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.
witam,
świetny artykuł - szybko i konkretnie zapoznał mnie ze screenem - na początek o niebo lepszy od manuala:)
pozdrawiam
Chyba wymyśliłem nowy skrót

Ctrl trzymamy naprzemiennie a i backspace i widzimy kolejny okna, hm, tzn. poprzednie
[…] 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, […]
Ale żem wyskoczył z tym wymyślonym skrótem
Sam na niego wpadłem, ot co 
@pi00 - fajnie fajnie, ale to samo robi C-a p
Extra !!! Tylko za cholere nie moge dojsc, jak zrobic taki uklad, jak na zalaczonym obrazku (Rys.1) ?
Jak podzelic tego screena na 4 czesci? Nie daje rady…
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:)
[…] Dodatkowe materiały: http://jakilinux.org/aplikacje/konsola/screen-sztuczki/ […]
Dużo przydatnych informacji
http://bbs.archlinux.org/viewtopic.php?id=20803
Poradnik na rootnode
https://wiki.rootnode.net/Screen
Swietny art, tylko brakuje na koncu jakiejs zbiorczej tabelki z klawiszologia, przydatne do wydruku i do szybkiego powrotu do tekstu gdy zajdzie potrzeba.