Screen – manager terminali w Linuksie

Poradnik użytkowania screena, czyli managera terminali. Dzięki niemu zmniejszysz ilość otwartych terminali (lub okien PuTTY) i zostawisz program „w tle”. Jedno z podstawowych narzędzi dla tych, którzy dużo pracują „w konsoli”.

Screen w Linuksie

Spis treści

  1. Krótko o screenie
  2. Skąd wziąć i jak uruchomić?
  3. Zostawianie w tle i przywracanie
  4. Podstawowa funkcjonalność
  5. Więcej tricków
  6. Podsumowanie skrótów w formie tabelki

Krótko o screenie

Być może zastanawiałeś się kiedyś, co zrobić żeby zostawić program (skrypt) na konsoli, ale jednak się z niej wylogować. Albo móc w jednym oknie mieć tak jakby kilka terminali, żeby się między nimi przełączać. W jednym trzymasz odpalone ekg2 (taki klient m.in. dla GG), w drugim leci jakiś make (albo grzebiesz po dysku find-em), a w trzecim edytujesz jakiś plik w swoim ulubionym Vim-ie :) Właśnie dzięki programowi screen, jest to możliwe!

Skąd wziąć i jak uruchomić?

Krok pierwszy – instalacja

Możesz oczywiście ściągnąć źródła ze strony projektu, skompilować i zainstalować. Tylko po co? W praktycznie każdej dystrybucji Linuksa znajdziesz screena, więc użyj managera pakietów (np. apt-get), aby go zainstalować. Jeśli jednak używasz jakiejś mało znanej dystrybucji która paczki nie dostarczyła, ściągnij źródła i skompiluj.

Pierwsze uruchomienie

Zakładam, że masz poprawnie skonfigurowaną powłokę i używasz kodowania UTF-8. Przed uruchomieniem screena utwórz plik ~/.screenrc z zawartością:

defutf8 on
defscrollback 4096
bind j focus down
bind k focus up

Dzięki temu screen będzie używał kodowania UTF-8, historia per okno będzie miała 4096 linii, a klawisze j oraz k będą pomocne przy przemieszczaniu się między oknami (o tym później).

Jak uruchomić? Wpisz w konsoli screen. Po przeczytaniu paru informacji o licencji i wciśnięciu entera, możesz korzystać z dobrodziejstw programu screen.

Jednak jeśli zamierzasz na swoim koncie korzystać z więcej niż jednej instancji screena, warto te instancje nazwać. Zrobisz to, dodając parametr przy uruchomieniu: screen -S testowy. Dzięki temu, na liście uruchomionych instancji będziesz widział również ich nazwy. Dodatkowo, przy przywracaniu konkretnej instancji screena będziesz mógł użyć jej nazwy, co jest wygodniejsze niż operowanie PIDami. Jeśli zalogujesz się w nowym terminalu/PuTTY na konto i wpiszesz screen -list, otrzymasz listę uruchomionych instancji screena, wraz z informacją czy dana instancja jest w danej chwili aktywna (Attached) czy nie (Detached), czyli coś takiego:

There is a screen on:
        3033.testowy     (10.02.2015 22:22:17)   (Detached)

Zostawianie w tle i przywracanie

Polecenia screenowi można wydawać przy pomocy skrótu klawiatury zaczynającego się od C-a (klawisz Control + literka a). Jeśli dalej masz odpalony screen opisany powyżej, wciśnij C-a d (d = detach). Na konsoli zobaczysz coś takiego:

[detached from 3033.testowy]

Powróciłeś do terminalu, do miejsca w którym odpaliłeś screena. Jednak screen dalej działa w tle i wszystko co zostało w nim uruchomione, również. Aby powrócić do screena, wystarczy uruchomić screen -r. To zadziała, gdy tylko jeden screen jest w stanie Detached. Gdy jest ich więcej, trzeba podać jako parametr, który z nich chcesz przywrócić. Możesz podać po PIDzie (mało wygodne), lub po nazwie. Przy powyższym, będzie to screen -r 3033 (podany PID) lub screen -r testowy (podana nazwa).

Jeśli np. na innym komputerze (lub po prostu w innym oknie terminala/PuTTY) nie zrobiłeś C-a d (czyli na liście screen -list widnieje jako Attached), próba podłączenia się do danej instancji screena się nie uda. Jednak można to wymusić przez dodatkowy parametr, czyli screen -r testowy -d. Dana instancja może być wykorzystywana tylko w jednym oknie.

Podsumowanie

Zatem podsumowując, możesz mieć wiele instancji screena, każda z nich może być nazwana, do każdej możesz się podłączyć (z ang. attach) tylko w jednym oknie terminala. Poniżej masz zebrane informacje odnośnie uruchamiania, podłączania się pod istniejącą instancję, lub odłączania

Podstawowa funkcjonalność

Oprócz możliwości zostawiania różnych procesów w tle (np. działających po wylogowaniu), screen daje wiele możliwości ułatwiających pracę.

Więcej okien

Możesz spróbować w oknie screena wykonać jakieś polecenie, żeby móc rozpoznać później to konkretne okno (wystarczy komenda będąca komentarzem, czyli np. #okno 0). Następnie wciśnij kombinację C-a c (c = create). Właśnie stworzyłeś kolejne okno screena, które ma uruchomioną domyślną powłokę Twojego konta.  Również możesz je oznaczyć, np przez polecenie #okno 1. Wciskając kombinację C-a C-a (trzymając klawisz Control klikasz 2× w a), przechodzisz do ostatnio używanego okna screena. Wygodne, gdy używasz naprzemiennie dwóch okien, nawet jeśli masz ich więcej. Otwórz kolejne okno (kolejne C-a c) i oznacz przez #okno 2. Teraz kolejne dwa skróty: C-a n (lub C-a C-n, n = next) przechodzi do następnego okna (lub jeśli jesteś na ostatnim przechodzi do pierwszego na liście), a skrót C-a p (lub C-a C-p, p = previous) do poprzedniego.

Oczywiście im więcej okien, tym łatwiej się pogubić w którym akurat jesteś, lub w którym masz uruchomiony konkretny program. Jednym z ułatwień jest przejście do okna o konkretnym numerze, wciskając C-a <nr>, np. C-a 1. Działa to jedynie dla pierwszych 10 okien, ponumerowanych od 0 do 9. Dlatego wygodne jest używanie skrótu C-a " (tak, to cudzysłów), który wyświetli wszystkie okna screena. Jeśli domyślnym shellem u Ciebie jest bash, to zobaczysz coś takiego:

 Num Name                                                  Flags

0 bash $
1 bash $
2 bash $

Zbyt wiele nie mówi – 3 okna (ponumerowane od 0 do 2), każde nazwane bash. Tutaj możesz użyć klawiszy strzałek, lub klawiszy j i k, aby poruszać się po liście, wybór okna zatwierdzasz znakiem Enter. Na szczęście nazwę da się zmienić. Przejdź do okna 0 (jak widzisz powyżej, masz wiele opcji na przejście do wybranego okna). Teraz użyj skrótu C-a A (Ctrl+a Shift+a; małe a i duże A to nie to samo), aby zmienić nazwę okna. Możesz wpisać np. test1. Teraz na liście okien (C-a ") zobaczysz coś takiego:

 Num Name                                                  Flags

0 test1 $
1 bash $
2 bash $

Jak więc widzisz, możesz używać wielu okien w screenie, a poruszanie się po nich będzie łatwe dzięki różnym dostępnym skrótom, jak również dzięki możliwości nazwania każdego z okien.

Więcej tricków

Zablokowanie

Pewnie mało przydatne, bo przecież nikomu nie podajesz hasła do swojego konta :) Ale może się jednak przydać. Jeśli użyjesz skrótu C-a x, zablokujesz screena. Do odblokowania musisz wpisać hasło do swojego konta.

Podział screena

Jeśli w screenie masz kilka okien i chciałbyś widzieć jednocześnie więcej niż jedno z nich, możesz podzielić obszar widoczny i widzieć 2 lub więcej okien. Podział w pionie to skrót C-a | natomiast podział w poziomie to C-a S. Przełączanie pomiędzy oknami to skrót C-a Tab (Tab jako klawisz tabulacji, nie wpisanie kolejnych literek T-a-b). Podział jest wygodny, jeśli np. odpalasz jakiegoś find’a, make’a czy coś podobnego w jednym oknie, a w drugim pracujesz. Dzięki tej opcji zobaczysz od razu kiedy polecenie się zakończy. Równie dobrze można tego użyć do podglądu jakiegoś pliku z logiem aplikacji, w momencie jak zajmujesz się czymś innym.

Zmiana kodowania

Jeśli używasz jakiegoś starego programu, który nie wspiera kodowania UTF-8 (zakładam cały czas że takie masz domyślnie w terminalu i poprawnie skonfigurowane w samym screenie), możesz w danym oknie screena ustawić konwersję kodowania w locie. Jeśli np. korzystasz ze starej wersji programu ekg, który obsługuje jedynie iso-8859-2, wystarczy że użyjesz skrótu C-a : (wejście w tryb poleceń screena) a następnie wpiszesz encoding iso-8859-2. Wszystkie wpisywane znaki w tym oknie będą konwertowane z UTF-8 do iso-8859-2 przed przekazaniem do programu, a wszystko co program wypisuje/wyświetla, będzie konwertowane w drugą stronę. Czyż nie jest to wygodne dla wielu starych programów, na które wcześniej czy później trafisz?

Kopiowanie i wklejanie

Oczywiście screen daje też możliwość kopiowania treści z danego okna i wklejanie tej treści, np. w innym. Aby wejść w tryb zaznaczania (w celu skopiowania), użyj skrótu C-a [ (nawias kwadratowy otwierający) a następnie strzałkami kursora przejdź do miejsca od którego chcesz kopiować, wciśnij spację, a po wybraniu miejsca do którego chcesz kopiować, wciśnij spację ponownie. Skopiowany tekst możesz wkleić w tym lub innym oknie przy pomocy skrótu C-a ] (nawias kwadratowy zamykający).

Podsumowanie skrótów w formie tabelki

Skrót klawiszowy
Opis Informacje dodatkowe
C-a d
odłączenie od screena
C-a c stworzenie nowego okna
C-a p przejście do poprzedniego okna
C-a n przejście do następnego okna
C-a 1 przejście do okna nr. 1 możesz tak przejść do okna o numerze od 0 do 9
C-a C-a przejście do poprzednio używanego okna
C-a " pokazanie listy okien po liście możesz się poruszać, enterem przechodzisz do wybranego okna
C-a A zmiana nazwy okna pamietaj, to duże A czyli musisz użyć shifta
C-a x zablokowanie screena do odblokowania musisz wpisać hasło
C-a | podział ekranu screena w pionie
C-a S podział ekranu screena w poziomie
C-a Tab przejście do następnego obszaru przy podzielonym ekranie to jest klawisz tabulacji, nie wciśnięcie kolejno klawiszy T-a-b
C-a X zamknięcie bieżącego obszaru z podziału screena
C-a Q usuń wszystkie obszary z podziału okna, poza bieżącym
C-a [ przejście do trybu kopiowania kursorem wybierasz miejsce skąd kopiujesz, spacją „rozpoczynasz” kopiowanie, spacją kończysz
C-a ] wklejenie skopiowanego wcześniej tekstu
C-a : przejście do trybu poleceń screena w ten sposób zmienisz kodowanie (encoding iso-8859-2) w oknie, czy zmienisz obszar przy podziale okna (wypróbuj resize +5, resize -5, resize 15)

Oczywiście Twoim przyjacielem man screen – zapewne znajdziesz tam kilka innych ciekawych możliwości, które tu nie były opisane.