Portál AbcLinuxu, 1. května 2025 00:09
Pomůcka, kterou důvěrně zná snad každý milovník příkazové řádky, a přesto o ní není příliš slyšet. Tento článek se pokusí ukázat základní využití tohoto skvělého nástroje.
Screen sám sebe označuje za "full-screen window manager that multiplexes a physical terminal between several processes", což by se dalo přeložit jako "celoobrazovkový správce oken, který rozmnožuje terminál mezi více procesů". Nenechte se zastrašit. V zásadě jde o to, že se vytvářejí "okna" (windows), která se z hlediska procesů uvnitř tváři jako normální terminály a poté se s nimi různými způsoby pracuje. Například taková základní funkce je, že se dané okno zobrazí na terminálu a vstup z terminálu je přeposílán tomuto oknu.
To by samo o sobě ještě nebylo tak skvělé, ale screen umí s okny dělat mnohem zajímavější kouzla. Například jde screen odpojit od terminálu na pozadí (detach), zatímco procesy spuštěné uvnitř běží nerušeně dál. Nebo třeba rozdělit si terminál na dvě oblasti.
Díky své popularitě se dostal do balíčkových repozitářů většiny distribucí, a tak by neměl být problém s jeho instalací.
Dost bylo teorie a nyní praktická ukázka. Spustíme si tedy screen.
screen
Na první pohled se pouze smazal obsah terminálu a nahoře je jen jeden řádek s výzvou. Stiskneme-li ^a ?
(nejdříve zmáčknout Ctrl-a, pustit a poté zmáčknout ?) objeví se obrazovka s nápovědou screenu.
Pro pochopení této nápovědy je nutné vědět, že veškeré klávesové zkratky v programu screen se skládají z ^a
a nějakého dalšího znaku.
Pro stručnost se v nápovědě uvádí pouze druhý znak, pokud je u jednoho příkazu více znaků, znamená to, že daný příkaz je vyvolán kterýmkoliv z nich. Pokud jsou tedy například u příkazu detach uvedeny dvě varianty, ^D
a d
, znamená to, že po stisknutí ^a ^D
(Ctrl-a Ctrl-d) se stane totéž, co po stisknutí ^a d
.
Stisknutím klávesy Enter se vrátíme zpět k našemu oknu.
K čemu více oken? Třeba v případě, kdy jsme připojeni přes SSH na vzdálený počítač a najednou zjistíme, že jeden terminál nám nestačí — například chceme mít naráz spuštěnou kompilaci nějakého balíčku a při tom se hrabat v nastavení jiného. Otevírat nové SSH spojení by bylo neefektivní.
Nové okno se nejjednodušeji vytváří pomocí klávesové zkratky ^a c
. Zkuste si tedy nejdříve spustit nějaký program v prvním okně. Poté si pomocí výše uvedené zkratky otevřte nové okno.
Nyní zmizelo vše, co jste měli v terminálu, a objevil se nově spuštěný shell.
Cyklit mezi okny lze pomocí klávesové zkratky ^a n
v jednom směru a pomocí ^a p
ve směru opačném. Pro vyvolání seznamu všech oken slouží zkratka ^a "
. Pro lepší orientaci v tomto seznamu lze nastavit jména jednotlivých oken, a to klávesovou zkratkou ^a A
(pozor, A je Shift-a), kterou se nastavuje jméno aktuálního okna. Mezi prvními deseti okny lze přepínat také pomocí ^a [číslo okna]
. Okna se číslují od 0 — tedy ^a 0
nás přepne na první okno, ^a 1
na druhé...
Představme si nyní modelovou situaci. Jsme připojeni ke vzdálenému terminálu přes SSH a máme rozdělanou nějakou práci. Najednou se potřebujeme odpojit, přesunout se k jinému počítači, tam se připojit a pokračovat v práci.
Přesně na podobné účely se velmi hodí funkce detach, která odpojí screen od terminálu. Po stisknutní klávesové zkratky ^a d
vše zmizí, tedy až na hlášení [detached]
.
Pomocí programu ps
se lze přesvědčit, že screen je stále spuštěný, jen nemá přiřazený žádný terminál. Nyní je možné s klidným svědomím se třeba i odhlásit, a opětovně se přihlásit, a procesy spuštěné uvnitř screenu si toho ani nevšimnou.
Screen se zpátky připojuje k terminálu pomocí parametru -r
.
Pokud na pozadí čeká pouze jedna spuštěná instance screen, tak se bez ptaní obnoví. Pokud ale na pozadí čeká více spuštěných instancí, screen -r
pouze výpíše jejich seznam ve tvaru pid.tty.host
. Tento výpis můžeme získat kdykoliv spuštěním screen -ls
. K připojení k danému screenu povětšinou stačí zadat pid dané instance, tedy screen -r [pid]
, kde [pid]
nahradíme číslem PID. Ve výjimečných situacích může být nutné zadat celou identifikaci, tedy screen -r [pid.tty.host]
. Zajímavým doplňujícím parametrem je -d
, který říká, že pokud instance, ke které se snažíme připojit, je již připojena k nějakému terminálu, chceme ji nejdříve od toho terminálu odpojit a pak připojit k aktuálnímu.
Je sice pěkné mít více oken, ale zatím jsme uměli mít zobrazeno pouze jedno okno naráz. Bylo by pěkné mít například v horní polovině obrazovky otevřenou manuálovou stránku k nástroji, který se snažíme v dolní části terminálu používat. Není nic jednoduššího, než zmáčknout ^a S
, čímž rozdělíme terminál na dva stejně velké regiony.
Mezi jednotlivými regiony se přepíná pomocí ^a <TAB>
. V jednotlivých regionech fungují klávesové zkratky na přepínání oken tak, jak jsme zvyklí.
Jelikož při použití screen prakticky nefunguje prohlížení historie v terminálovém emulátoru, má screen funkci s názvem "copy/scrollback mode".
Stisknutím ^a [
(^a ^[
, či ^a <ESC>
) jej zapneme. Nyní se můžeme pohybovat kurzorem nahoru, dolu, doleva, či doprava pomocí šipek, hjkl, či pomocí PgUp, PgDown,^U,^D a dalších. Tento mód lze vypnout pomocí <ESC>
.
Pokud zmáčkneme mezerník, označíme začátek (konec) kopírované oblasti.
Konec (začátek) označíme jednoduše tak, že kursorem najedeme na danou pozici a opět zmáčkneme mezerník. Tím se zároveň vrátíme do normálního módu.
Z této schránky se vkládá pomocí ^a ]
.
Tímto jsem popsal ty nejzákladnější funkce programu screen. Mnohé další jsou popsány v jeho manuálové stránce. Další užitečné informace lze najít na oficiální stránce, či u strýčka Google.
hardstatus alwayslastline "[%H] %w "
Clovek potom vie, ake ma naotvarane okna a na akom stroji je prihlaseny.
Zajimavy je aj prepinac -x , ktory umoznuje pripojit sa k attachnutemu terminalu t.j. ze mozu na tom robit dvaja ludia naraz.(uzitocne, ked clovek vysvetluje, ako sa nieco konfiguruje)
Tiez som to pouzival na emulaciu lepsieho terminalu na horsom seriovom terminali. Proste, ked sa pustil links bez screenu, tak zacal vydavat divne pazvuky a dal sa len vypnut :D, musel to napravit administrator (nepomohlo ani killnut proces z druheho terminalu).
A vobec, na starom rozheganom terminali mat viac okien, to bol sen :D
"celoobrazovkový správce oken, který rozmnožuje terminál mezi více procesů"rozmnožuje ? Určitě existuje lepší překlad, v tomto případě by lepší bylo i "multiplexuje".
Jelikož při použití screen prakticky nefunguje prohlížení historie v terminálovém emulátoru,...Mohl bys to nějak přiblížit? (např. distro) Mě historie funguje normálně (tj. šipkami nahoru a dolů se zobrazují předchozí příkazy)
# Yet another hack: # Prepend/append register [/] to the paste if ^a^] is pressed. # This lets me have autoindent mode in vi. register [ "\033:se noai\015a" register ] "\033:se ai\015a" bind ^] paste [.]Ma to len jeden hacik, ze to funguje len do momentu kym neprepnete okno.
defscrollback 10000 termcapinfo xterm*|rxvt* ti@:te@ termcapinfo xterm*|rxvt* OL=10000A funguje to pak přesně jak bys očekával, jako bys ani ve screenu nebyl
rozmnožuje ? Určitě existuje lepší překlad, v tomto případě by lepší bylo i "multiplexuje".Jak je napsáno na počátku článku, článek je určen především pro začátečníky a snažil jsem se volit slova dle tohoto záměru, a tedy nepřekládat anglický termín — který mi navíc připadá zbytečně nečitelný pro neznalého — tím, že mu přidám českou koncovku. Přesto uznávám, že slovo rozmnožuje není příliš šťastně zvoleno. Holt je to můj druhý článek a ještě mám co pilovat.
Mohl bys to nějak přiblížit? (např. distro) Mě historie funguje normálně (tj. šipkami nahoru a dolů se zobrazují předchozí příkazy)Měl jsem opravdu namysli ne historii zadávaných příkazů, ale obsahu terminálu. Tedy něco, čím se v klasickém linuxovém terminálu scrolluje pomocí S-PgUp a S-PgDown.
Měl jsem opravdu namysli ne historii zadávaných příkazů, ale obsahu terminálu.Už mi bylo vysvětleno.
export TERM=screen
Ale proč se zbavovat screenu, že? K tomu rozdeleni na regiony mohl byt napsano jak ten region zrusit ;)^a Q
Screen je ale skvely hlavne v tom, kdyz se pres SSH pripojim k serveru, neco delam a spadne spojeni. Obvykle kdyz SSH spadne, tak se posila nejaky signal bezicim aplikacim a obvykle se ty aplikace ukonci. Kdyz to ale bezi ve screenu, tak se screen pouze odpoji a programy bezi dal, takze se pak staci znovu pripojit k serveru a tam se pripojit ke screenu a makam dal:)Je to signál SIGHUP a posílá se při chcípnutí terminálu obecně, mezi což se počítá i chcípnutí spojení s terminálem.
man vlock
, ale to je trochu OT ne?
mkfifo fifo mc >fifo
cat fifoTiez si pozrite program script.
Netusite nekdo, zda si 2 nezavisle screeny na stejnem pocitaci dokazi posilat copy-paste buffer?
man screen
A hledat ^A >
a ^A <
, případně readbuf a writebuf.
Doplnění: od gtktermu jsem utekl ke screenu, sériová konzole je poté o dost použitelnější
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.