Možná to také znáte, připojíte se přes SSH na vzdálený počítač a během důležité aktualizace je připojení najednou ztraceno, nebo spustíte nějakou časově náročnější úlohu, např. kompilaci či skript, a protože vše trvá déle než jste původně předpokládali, přemýšlíte nad tím, zda spojení ukončit a příště se o to pokusit znovu, nebo ještě počkat a domů vyrazit o chvíli později. Tak přesně v těchto a mnoha dalších případech se vám hodí program screen.
Screen je vcelku malý nástroj, který vám umožní spravovat více různých sezení, které dál poběží i v okamžiku, kdy se od počítače odpojíte (ať už z vlastní vůle nebo z důvodu vyšší moci), ke kterým se budete moci později kdykoliv opět připojit a zkontrolovat jejich výsledek. Ale dost bylo teorie, pojďme se podívat jak na to.
Pro instalaci programu screen v Debianu a jemu podobných systémech bude stačit zadat něco jako aptitude install screen. V jiných distribucích tomu bude podobně.
Nové sezení spustíte jednoduše zadáním příkazu screen. Objeví se vám krátké informační okno, které potvrďte klávesou [Enter] a dál už pracujete podobně jako v klasické konzoli. Jediný rozdíl spočívá v tom, že jakmile zadáte příkaz exit, dojde k ukončení screenu. Doteď by to nebylo zas až tak zajímavé. Zkuste ovšem místo klasického příkazu exit stisknout klávesovou zkratku [Ctrl + a] a pak ještě písmeno „d“. Objeví se vám krátká informace o tom, že jste se odpojili od obrazovky screen.
Spuštění screenu
Příkaz pro odpojení od screenu funguje ať se děje cokoliv, může vám zrovna běžet kompilace, můžete zrovna kopírovat pomocí Midnight Commanderu nebo můžete mít spuštěné stahování wget či jinou libovolnou aplikaci. I když se odpojíte, program zůstává běžet a tak je to podobné, jako když se jenom podíváte na obrazovku jiného počítače. Jedna z mála věcí, která screen spolehlivě zabije je restartování počítače.
A jak že se znovu připojíte? Máte-li spuštěnou pouze jednu virtuální obrazovku screen, bude stačit zadat příkaz:
screen -r
Pokud máte spuštěno více obrazovek screen, objeví se vám jejich seznam, který vypadá např. takto:
There are several suitable screens on:
5488.pts-1.imhotep (3.11.2009 17:36:55) (Detached)
5471.pts-1.imhotep (3.11.2009 17:34:09) (Detached)
Type "screen [-d] -r [pid.]tty.host" to resume one of them.
Seznam spuštěných screenů zobrazíte také zadáním příkazu: screen -ls.
Více screenů najendou
Do příslušného okna se pak dostanete zadáním:
screen -r 5488.pts-1.imhotep
Nebo zkráceně jenom:
screen -r 5488
Pokročilá práce se screen
Trochu sadomasochisticky může působit možnost spuštění další obrazovky v samotném screenu. A jak že se to provádí? Zadejte [Ctrl + a] následované písmenem „c“. Tím se vytvoří další obrazovka v aktuálním screenu. Mezi těmito obrazovkami se pak přepínáme pomocí tlačítek [Ctrl + a] „n“ pro další obrazovku a [Ctrl + a] + „p“ pro předchozí obrazovku. Jak je vidět, obrazovek je možno vytvořit hned víc a libovolně mezi nimi procházet. Jakmile stisknete oblíbené [Ctrl + a] „d“ pro odpojení od screenu, odpojíte se od všech. Později si je ovšem můžete znovu obvyklým způsobem spustit.
Kompletní seznam zkratek screenu si zobrazíte zadáním kombinace [Ctrl + a] následované symbolem „?“. Tím se vám zobrazí seznam všech možností.
Screen vám také umožní monitorovat ticho nebo naopak aktivitu v ostatních oknech. K tomu slouží [Ctrl + a] „m“ pro monitorování aktivity a [Ctrl + a] „_“ pro monitorování ticha. Jakmile se pak přepnete do dalšího okna screenu budete na aktivitu (nebo ticho) sledovaného okna upozorněni krátkou hláškou v levé dolní částí obrazovky. Na můj vkus je sice trochu krátká, ale rychlé přepnutí můžete provést zadáním [Ctrl + a] „'“ (jednoduchá uvozovka) následované zadáním čísla obrazovky nebo pomocí [Ctrl + a] „"“ (dvojité uvozovky) a vybráním okna ze seznamu.
Zkratkových kláves a možností screenu je ještě víc, ale proč hned vypisovat jejich seznam. Osobně jsem si dlouhou dobu vystačil s těmi opravdu základními (vytvoření nového screenu a opětovné připojení k němu). Teď, když jsem začetl do nápovědy, tak možná ještě časem začnu používat nová okna a přepínání mezi nimi. ;-)
Využití screenu při SSH (nebo jiném) připojení
Pokud screen nainstalujete na server, můžete se pomocí normálního SSH připojit, spustit screen a začít stahovat novou verzi Mandriva Linuxu či Ubuntu, nebo kompilovat nějaký komplexnejší program. Poté screen odpojíte a odpojíte se z SSH připojení. Stahování / kompilace bude pokračovat i když už přes SSH připojeni nebudete. Později se můžete znovu připojit a situaci zkontrolovat.
je možné (nechat si) spustit screen automaticky po připojení přes ssh?
Re:Screen: Správce sezení v terminálu Martin Šín 5. 11. 2009, 07:31:28 Odpovědět
No, já bych přidal řádek "screen" (nebo lépe "/usr/bin/screen") - bez těch uvozovek do souboru .bashrc v domovském adresáři uživatele, ke kterému se připojujete... Screen se pak spustí po přihlášení.
Což ale není dobré, protože hele:
1. připojím se na ssh a automaticky s emi pustí screen
2. pustím stahování videa z dovolené
3. odpojím se od screenu i ssh
[pauza]
4. připojím se na ssh a chci pustit screen -r, místo toho se mi pustí nový screen
Re:Re:Re:Screen: Správce sezení v terminálu Martin Šín 5. 11. 2009, 07:47:26 Odpovědět
Máš pravdu, pak bychom to upravili třeba takto: "screen -r || screen". Zdá se mi, že to i funguje ..
Re:Re:Re:Re:Screen: Správce sezení v terminálu Martin Šín 5. 11. 2009, 07:48:46 Odpovědět
No anebo tam dát jen to screen -r a jednou ten screen prostě spustit ručně. ;-) (Si připadám jak spammer, takových příspěvků)
Dal bych tam:
if [ "$(pidof SCREEN)" ]; then # bůhvíproč je to velkým
screen -r # případně screen -ls, podle vámi preferovaného chování
else
screen
fi
Re:Re:Re:Screen: Správce sezení v terminálu Ondřej Válek 5. 11. 2009, 08:19:31 Odpovědět
Použijte
screen -DRS default
neboli "dej mi screen s názvem sezení 'default', pokud neexistuje, tak ho vytvoř, a pokud existuje a má ho někdo jiný připojený, tak ho odpoj a dej mi ho". Výsledek je takový, že ten scree dostanete vždy, nikdy se nevytváří zbytečně nový a navíc se k němu automaticky dostanete i když vám třeba kvůli výpadku zatuhne SSH spojení.
Pokud se vám stane, že už něco spustíte mimo screen (nebo tmux) a musíte se odpojit, můžete zkusit poslat proces na pozadí (ctrl+z), nechat běžet dál (bg), zakázat shellu, aby posílal při ukončení SIGHUP (set NOHUP) a odpojit se. Není to samozřejmě náhrada za screen, jelikož po odpojení už proces nedostanete nijak na popředí (opravte mě prosím), ale třeba kopírování nějakého souboru to zachránit může.
jde to. mrkněte se na příkazy fg a bg, je to jeden ze základních konceptů unixu a je dost šikovné s tím umět pracovat. V kostce: příkazem jobs vypíšete, co zrovna běží v souvislosti s vaším sezením na pozadí a můžete se mezitím přepínat pomocí fg a bg. Pomocí ctrl+Z přepnete běžící úlohu do pozadí, přesněji řečeno ji zastavíte. Pak ji buď hodíte do popředí pomocí fg anebo ji rozběhnete v pozadí pomocí bg. Stadnardně se odpojuje aplikace už při jejím startu od terminálu přidáním znaku & na konec příkazu. Pokud tedy chcete například něco spustit a odhlásit se od terminálu (ssh) aniž by příkaz skončil, zkuste to pomocí třebas
$ nohup dlouhotrvajici_prikaz &
Pozor, takový příkaz je pak sice rezistentní vůči HANGUP (= třeba odhlášení), ale i nadále jde zabít třeba pomocí SIGTERM. Pokud ho spustíte a potřebujete nějak pracovat s jeho interaktivitou (zadat heslo... ono to stále vidíte, protože stderr se pořád týká vašeho sezení), hodíte si ho do popředí pomocí fg... Atd atd. Co bych se tu rozepisloval, mrkněte na man nohup, tam to budete mít bez faktických chyb, které jsem tu mohl uvést já :-)
Já to používám místo screenu, sice to není pohodlné, ale ve většině případů to postačí.
Screen je bezva. A jeho rozšíření screen-profiles nebo nověji byobu je ještě lepší.
Vyzkoušejte, já používám třeba v Ubuntu.
https://launchpad.net/~byobu/+archive/ppa
Rád bych upozornil na podobný článek týkající se screenu, který vyšel před nějakým časem na Linuxsoftu.
http://www.linuxsoft.cz/article.php?id_article=1100
Screen: Správce sezení v terminálu Petr12. 01. 2010, 14:11:04 Odpovědět
Martin Šín (*1980) vystudoval pedagogickou fakultu a nyní pracuje jako učitel matematiky a výpočetní techniky na střední škole. Ve volném čase překládá a také hraje hry (ani jedno mu příliš nejde). V práci se snaží prosazovat open-source programy.
Je zbytečné Flash zatracovat. Spíše si projděme různé otevřené alternativy, díky kterým můžeme svobodně vyvíjet interaktivní a vyšperkované aplikace a nebýt přitom svazováni balíkem od firmy Adobe.
Ak sa chcete zísť s kopou kamošov a odreagovať sa pri nejakej poriadnej sieťovej hre, a pritom nebyť závislí na Windows a platených hrách, mnoho možností nemáte.Tento seriál vám však predstaví tie najlepšie multiplayer hry pre Linux.
Naučte se vrhat stíny, vytvářet komiksy, lámat perspektivu, používat efekty, vylepšovat panortáma nebo retušovat fotky. GIMP je mocný nástroj, naučte se ho s námi ovládat.