GNU Screen

GNU Screen je velmi užitečný program pro práci v příkazové řádce, je nastavitelný manažer oken v konzoli s terminály VT100/ANSI a rozděluje je. Dovede rozdělovat celou obrazovku na terminály a přepíná mezi obrazovkami. Rozděluje fyzický terminál mezi několik procesů (často interatktivní shelly). Skýtá až 10 pracovních ploch v podobě shellu, které lze ještě rozdělit. Pro každý terminál je zde paměť historie rolování, mechanismus kopírovat-vložit který dovede přesouvat text mezi okny.

O screenu

Když je spuštěn příkaz screen, vytvoří se samotné okno s konzolí uvnitř a můžeme s ní pracovat, jak jsme zvyklí. Kdykoli můžeme vytvořit nové okno s jiným programem uvnitř, zabít existující okno, zobrazit seznam oken, kopírovat a vkládat mezi okny, zobrazit historii rolování, přepínat mezi okny v libovolném stylu. Programy pokračující v pozadí pokračují v běhu, ikdyž jejich okno není viditelné. Když je program ukončen, okno se zavře a objeví se předchozí okno.

Ve spolupráci s programem Reptyr je skvělým pomocníkem pro vzdálenou administraci a práci.

Instalace

Alpine Linux apk add screen
Arch Linux pacman -S screen
CentOS yum install screen
Debian/Ubuntu apt get install screen
FreeBSD pkg install screen
OpenSUSE zypper in screen

Nastavení

Nastavení programu je v souboru screenrc, který program používá uživatelský z domovského adresáře a poté hledá systémový v /etc. Primárně program hledá uživatelské nastavení v domovském adresáři.

~/.screenrc
/etc/screenrc

Příklady nastavení

Stavový panel:

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

A další finální stavový panel:

truecolors on 
hardstatus off 
backtick 0 5 5 "/bin/date" '+%Y-%m-%d' 
backtick 1 5 5 "/bin/date" '+%H:%M' 
hardstatus alwayslastline '%{#00ff00}[ %H ][%{#ffffff}%= %{7}%?%-Lw%?%{1;0}%{1}(%{15}%n%f%t%?(%u)%?%{1;0}%{1})%{7}%?%+Lw%?%? %=%{#00ff00}][ %{#00a5ff}%{6}%0%{#ffffff}%{7}%1%{#00ff00} ]'

Stavový panel nahoře:

hardstatus firstline

Uvítací hláška:

startup_message off

Vloží hardstatus do názvu okna:

backtick 1 5 5 true 
termcapinfo rxvt* 'hs:ts=\E]2;:fs=\007:ds=\E]2;\007' 
hardstatus string "screen (%n: %t)" 
caption string "%{= kw}%Y-%m-%d;%c %{= kw}%-Lw%{= kG}%{+b}[%n %t]%{-b}%{= kw}%+Lw%1`" 
caption always

Vypne vizuální upozornění:

vbell off

Po uzavření textového editoru jako například nano se nevyčistí text, pro nápravu:

altscreen on

Oprava názvů oken (bash):

windowlist string "%4n %h%=%f"

Moje vymazlené nastavení

GNU/screen - můj vzhled a 3 okna

Barevné téma pro terminál urxvt k docílení stejného barevného tématu je k dispozici zde.

.screenrc:

defscrollback 5000
startup_message off
vbell off
#mousetrack on
altscreen on
shelltitle "$ |bash"

# Terminal
#term screen-256color
term xterm-256color
#term rxvt-unicode-256color
attrcolor b ".I"    # allow bold colors - necessary for some reason
defbce on    # use current bg color for erased chars

# okna
screen 1
screen 2
#screen -t MC 3 mc
select 1
bind c screen 1 # window numbering starts at 1 not 0
bind 0 select 10

# layouty

#layout new one
#select 1
#split
#focus down
#select 2
#focus up

#layout new one
#select 1
#split -v
#focus right
#select 2
#split
#focus down
#select 3
#focus left

#layout attach one
#layout select one

# Zkratky
bind  -k k1 select 1
bind  -k k2 select 2
bind  -k k3 select 3
bind  -k k4 select 4
bind  -k k5 select 5
bind  -k k6 select 6
bind  -k k7 select 7
bind  -k k8 select 8
bind  -k k9 select 9
bind -k kl focus left
bind -k kr focus right
bind -k ku focus up
bind -k kd focus down
bindkey -k F1 prev
bindkey -k F2 next
bind = resize =
bind + resize +1
bind - resize -1

truecolors on
hardstatus on
hardstatus alwayslastline
hardstatus string '%{= kG}[ %{G}%H %{g}][%= %{= kW}%?%-Lw%?%{G}(%{G}%n*%f%t%?(%u)%?%{G})%{W}%?%+Lw%?%?%= %{g}][[%{G} %m-%d %{G} %c %{g}]'
caption always "%?%F%{+u WG}%? %= %3n %t %="
#caption always "%?%F%{-b bc}%:%{-b bb}%?%C|%D|%M %d|%H%?%F%{+u wb}%? %L=%-Lw%45>%{+b by}%n%f*%t%{-}%+Lw%-0<"
#caption splitonly "%?%F%{= G}%:%{= W}%?[%n %t]%{02}"
#caption string "%{03} "

.bashrc:

# automaticka jmena oken
export PS1='\[\033k\033\\\]'$PS1

# Nastartovat screen v kazdem shellu
if [[ -z "$STY" ]]; then
   screen -xRR session_name
fi
		

Příkazy v konzoli

Klávesové zkratky

Začátkem zkratek je vždy Ctrl + a a to v tabulce psát nehodlám, zbytečně by se nám to pletlo.

Když stiskneme Ctrl + a, máme zaktivované naslouchání klávesových zkratek GNU Screen (které trvá dokud se nestiskne nějaká klávesa) a pak stačí zadat jen zbývající:

cNové okno
wSeznam oken
0Číslo aktivní obrazovky
1Číslo aktivní obrazovky
2Číslo aktivní obrazovky
3Číslo aktivní obrazovky
4Číslo aktivní obrazovky
5Číslo aktivní obrazovky
6Číslo aktivní obrazovky
7Číslo aktivní obrazovky
8Číslo aktivní obrazovky
9Číslo aktivní obrazovky
nDalší okno
spaceDalší okno
pPředchozí okno
backspacePředchozí okno
SRozdělí okno horizontálně
lRozdělí obrazovku vertikálně
tabPřepne vstup na jiný region obrazovky při rozdělení
QZničí rozdělené regiony kromě aktivního, zruší rozdělení
APřejmenuje název okna
CVyčistí obrazovku
dOdpojí sezení z terminálu
D DOdpojí sezení a odhlásí
iZobrazí informace o oknu
lObnoví okno
tZobrazí systémové informace
vZobrazí verzi
kZabije okno
?Zobrazí klávesové zkratky
\Zabije všechna okna a ukončí Screen
:Režim vkládání příkazů
*Seznam připojených displejů

Sdílení sezení

Spustíme Screen na lokálním počítači, tím se nám vytvoří i sezení. Pokud si chceme sezení pojmenovat, použijeme atribut -S a název sezení.

screen -S sdilene

Pro připojení k aktivnímu sezení, které není odpojené, použijeme příkaz:

screen -x

Tipy