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”.
Spis treści
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
screen -S <nazwa>
uruchamia nową instancję screena, nadając jej nazwę- wciśnięcie wewnątrz screena
C-a d
, powoduje odłączenie od bieżącej instancji screen -list
wyświetla wszystkie istniejące instancje danego użytkownika, wraz z informacją o PIDzie, nazwie i stanie (attached lub detached)screen -r <nazwa>
podłącza pod instancję screena o danej nazwiescreen -r <nazwa>
-d podłącza pod instancję, wymuszając odłączenie od niej w terminalu, w którym podłączyłeś wcześniej
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.