Program screen
Często mamy potrzebę pracy na kilku oknach terminala lub otwarcia jednocześnie kilku programów z interfejsem tekstowym. Nie pomoże nam tu posłanie takiego programu w tło (fg, bg, jobs) ponieważ mowa o programach z interfejsem tekstowym takim jak Midnight Commander czy htop:
Dysponując pulpitem graficznym nie ma problemu, otwieramy kilka okien terminala lub terminal z zakładkami i tyle. Kiedy nie mamy takiego pulpitu (przeważnie serwery) możemy wspomóc się wirtualnymi terminalami dostępnymi z poleceń ALT-F1-ALT-F6. Jednak istnieją nieco lepsze rozwiązania
SCREEN
Jest to mały program pozwalający w jednym oknie terminala tworzyć wiele okien. Każde z nich to osobna sesja aktualnie zalogowanego użytkownika (domyślnie). Między oknami możemy swobodnie się przełączać, okna można dodawać i usuwać.
Instalacja screen
> apt-get install screen
Uruchomienie
> screen
Po uruchomieniu screen’a na konsoli widzimy ekran powitalny:
Kiedy naciśniemy dowolny klawisz pojawia się ekran zwykłej konsoli. Nic nas jeszcze nie informuje o tym, że jest uruchomiony screen. Na początku mamy dostępne jedno wirtualne okno. Wpiszmy w nim dowolna komendę aby zobaczyć zmiany, przykładowo ‚ls’.
Aby dodać kolejne użyjemy kombinacji klawiszy CTRL-a-d (naciskamy CTRL, kolejno ‚a’, kolejno ‚c’ jak create). Pojawia sie kolejne okno choć program nas o tym nie informuje. Wpiszmy coś innego aby rozróżnić ekrany.
Dodajmy kolejne okno, teraz mamy już trzy ekrany. Aby sie przełączyć między nimi użyjemy kombinacji klawiszy Ctrl-a-n (next) i Ctrl-a-p (previous). Aby zamknąć aktywne okno należy w jego wierszu polecenia nacisnąć Ctrl-d. Zakończy to sesje danej konsoli i jednocześnie zmniejszy ilość okien w screen.
Program ten posiada wiele funkcji, a jedną z nich jest odłączenie (and. detach) od zestawu okien. Wykonamy to za pomocą kombinacji Ctrl-a-d. Na konsoli zobaczymy, że odłączyliśmy się od sesji screen o numerze 27457 na terminalu pts-1 komputera o nazwie „debmini”.
W tym momencie wszystkie otwarte w screen okna, a wraz z nimi uruchomione w nich programy, „idą w tło”, my zaś wracamy do konsoli z której wywołaliśmy screena. Co ważne programy otwarte w oknach screen (od którego teraz jesteśmy odłączeni) nadal działają i możemy do nich wrócić. Aby to uczynić trzeba ponownie się podłączyć do naszego screena. Tyle, że takich sesji screen możemy otwierać wiele (w każdej można otworzyć wiele okien i uruchomić wiele programów). Program pozwala na nazywanie sesji co ułatwi ich identyfikacje. Dodajmy nową sesje screen’a o nazwie PROGRAMY
screen -S PROGRAMY
W tej sesji dodajmy trzy okna, w pierwszym uruchomimy mc, w drugim top, w trzecim htop. Rozłączamy się z naszą drugą sesją (Ctrl-a-d). Mamy teraz w pamięci dwie sesje screen’a i kilka uruchomionych programów. Jak zatem rozpoznać do której sesji screena należy sie podłączyć? Służy do tego przełącznik
-r [nazwa-sesji]
gdzie [nazwa-sesji] to nazwa naszego screena. Przykładowa pokazana jest wyżej. Jeśli mamy uruchomioną tylko jedną sesję to od razu zostaniemy do niej podłączeni. Jeśli mamy wiele sesji w pamięci przełącznik ten pokaże je wszystkie:
Aby podłączyć się do wybranej sesji wydajemy polecenie:
screen -r PROGRAMY
Przykład pliku konfiguracujnego
Same okna screena nie są zbyt czytelne ponieważ nie ma informacji w jakiej sesji jesteśmy oraz jakie to okno. Na szczęście screen pozwala ustalić własne kolory i dodać pewne elementy upraszczające pracę. Aby to zrobić trzeba przygotować plik konfiguracyjny. Każdy użytkownik może mieć własny plik. Plik musi być umieszczony w katalogu domowym użytkownika, które chce skorzystać ze spersonalizowanego screen’a. Tworzymy więc plik o nazwie .screenrc (koniecznie kropka na początku czyli plik ukryty; plik musi znajdować się w katalogu domowym danego użytkownika czyli każdy może mieć swoją konfigurację screen’a) i wklejamy do niego poniższą zawartość. To przykładowa konfiguracja z kilkoma alternatywami. Znak # to komentarz.
#================================= 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}' #hardstatus string '%{= rk}[ %{G}%H %{g}][%= %{wk}%?%-Lw%?%{=b kR}(%{W}%n*%f %t%?(%u)%?%{=b kR})%{= rk }%?%+Lw%?%?%= %{g}]%{=r C}[ %m/%d %c ]%{W}'
#std - czarne tło #hardstatus string '%{gk}[ %{G}%H %{g}][%= %{wk}%?%-Lw%?%{=b kR}(%{W}%n*%f %t%?(%u)%?%{=b kR})%{= kw}%?%+Lw%?%?%= %{g}]%{=b C}[ %m/%d %c ]%{W}' #niebieskie tlo żółe i zielone napisy #hardstatus string '%{= bG}[ %{bG}%H %{bG}][%= %{bY}%?%-Lw%?%{= bR}(%{bG}%n*%f %t%?(%u)%?%{=b bR})%{= bY}%?%+Lw%?%?%= %{g}]%{=b bG}[ %m/%d %c ]%{W}' #j.w. ale czarne tlo #hardstatus string '%{= kg}[ %{kG}%H %{kG}][%= %{kY}%?%-Lw%?%{= kR}(%{kG}%n*%f %t%?(%u)%?%{=b kR})%{= kY}%?%+Lw%?%?%= %{g}]%{=b kG}[ %m/%d %c ]%{W}' #czerwone tlo np dla roota + zegarek hardstatus string '%{=b rw}[ %{rw}%H %{rw}][%= %{rw}%?%-Lw%?%{=b rw}(%{=b rY}%n*%f %t%?(%u)%?%{=b rw})%{=b rw}%?%+Lw%?%?%= %{=b rw}]%101` %d-%m-%Y %c:%s' #hardstatus string '%{gk}[ %{G}%H %{g}][%= %{wk}%?%-Lw%?%{=b gR}(%{W}%n*%f %t%?(%u)%?%{=b gR})%{= kw}%?%+Lw%?%?%= %{g}]%{=b C}[ %m/%d %c ]%{W}' #hardstatus alwayslastline "%{= g} %{= w}%-Lw%{=r}%n%f* %t %{-}%+LW %-=%| %101` | %D %M %d %Y %c:%s" termcapinfo xterm|xterms|xs|rxvt ti@:te@ screen -t bash01 bash #==================================
Ponieważ plik utworzyliśmy już po uruchomieniu kilku sesji screen’a to nowe ustawienia ich nie dotyczą. Otwieramy więc kolejną sesję:
screen -S TRZECIA
Tworzymy kilka okien Ctrl-a-n
Teraz u dołu ekranu pojawia się czytelna informacja o otwartych oknach:
Nazwę dowolnego okna możemy zmienić: Ctrl-a-A (druga litera to duże A):
Teraz kilka przydatnych skrótów:
Ctrl-a-c tworzy nowe okno (jego nazwa wyświetla się w czerwonych nawiasach)
Ctrl-a-n następne okno
Ctrl-a-p poprzednie okno
Ctrl-a-d opuszczenie screen’a z pozostawieniem uruchomionych w nim programów
Ctrl-a-A zmiana nazwy aktualnego okna
Aby powrócić do screena wydajemy polecenie
> screen -x
Program posiada dużo więcej opcji, wszystko znajdziemy w pomocy:
screen –help
Automatyczna konfiguracja screena dla nowych użytkowników
Jeśli chcemy sprawić aby każdy nowy użytkownik systemu miał tak samo skonfigurowany program screen (zielona linia statusu okna) to plik .screenrc można utworzyć w katalogu /etc/skel. Dzieki temu w katalogu domowym każdego nowego użytkownika pojawi sie ten plik. Przykładowy plik poniżej:
#================================== hardstatus alwayslastline #zielone tlo np dla roota + zegarek hardstatus string '%{=b gw}[ %{gw}%H %{gw}][%= %{gw}%?%-Lw%?%{=b gw}(%{=b gY}%n*%f %t%?(%u)%?%{=b gw})%{=b gw}%?%+Lw%?%?%=%{=b gw}]%101` %d-%m-%Y %c:%s' termcapinfo xterm*|xterms|xs|rxvt ti@:te@ screen -t bash01 bash #==================================
Zakładamy, że zwykły użytkownik ma zieloną linię statusu (root czerwoną).
Inne przykłady konfiguracji:
#czarne tło + tło każdego okna
hardstatus alwayslastline „%{rk}%H %{gk}%c %{yk}%M%d %{wk}%?%-Lw%?%{bw}%n*%f %t%?(%u)%?%{wk}%?%+Lw%?”
#niebieskie tło + zegarek
hardstatus string ‚%{=b bk}[ %{bk}%H %{bk}][%= %{bk}%?%-Lw%?%{=b bk}(%{=b bY}%n*%f %t%?(%u)%?%{=b bk})%{=b bk}%?%+Lw%?%?%= %{=b bk}]%101` %d-%m-%Y %c:%s’
Podział okna
Okno screen’a można podzielić na kilka podokien. Wykonamy to za pomocą kombinacji Ctrl-a-S, która podzieli okno w poziomie. Aby przejść do kolejnego okna używamy kombinacji Crtl-a-TAB. W nowym oknie trzeba otworzyć sesję za pomocą Ctrl-a-c. Poniżej przykład podzielonego poziomo okna.