Internet Info, s.r.o. Lupa Měšec Podnikatel Root Zdroják DigiZone Slunečnice Vitalia TopDrive KupDnes Navrcholu NovýTarif Dobrý web Weblogy Woko Jagg Computer.cz SK: MojeLinky

Hlavní navigace

Okna v terminálu pomocí Tmux

Možná už znáte Screen nebo jeho vylepšení Byobu. Dnes si ukážeme dalšího jejich konkurenta, kterým je Tmux. Jeho výhodou je možnost práce s okýnky a hlavně je silně konfigurovatelný a skriptovatelný. Pokud vám něco na Screenu nesedělo a chtěli jste to vždycky změnit, můžete zkusit právě Tmux.

Tweetni to Twitter Jaggni to! Jagg Del.icio.us Delicious

Článků o terminálových multiplexerech jsme tu měli už několik – tedy přesně dva:
Screen: ještě mocnější terminál
Byobu: ještě o kousek lepší terminál

Dnes si povíme o třetím a rozšíříme tak velmi volnou „sérii“, která byla zahájena už před čtyřmi lety. Třetím do počtu dnes bude Tmux, který je zajímavou alternativou ke Screenu i z něj vycházejícímu By­obu.

Pokud vůbec netušíte, co to je terminálový multiplexer, pak vězte, že se jedná o software, který vám umožňuje v jednom terminálu otevřít více terminálů virtuálních. To se hodí zejména při dálkovém ovládání vzdáleného počítače přes SSH. Po spuštění multiplexeru si jednoduše otevřete více obrazovek, ve kterých můžete provádět nezávislé akce.

Navíc má tento přístup na serveru ještě jednu vynikající vlastnost – můžete se kdykoliv odpojit a nechat všechny terminály na druhé straně v provozu. V nich může probíhat například kompilace nějaké větší aplikace nebo jiná časově náročná akce. Časem se zase připojíte a dostanete se k terminálům v takovém stavu, v jakém jste je opustili. O této vlastnosti bude řeč ještě níže v článku.

Tmux je k dispozici pod licencí BSD a je možné jej přeložit pro Linux, FreeBSD, NetBSD, Solaris a AIX. OpenBSD jej má dokonce od roku 2009 ve svém hlavním (base) stromu. Samozřejmě jej s velkou pravděpodobností najdete také ve své oblíbené linuxové distribuci.

Čím Tmux zaujme

Tmux se od začátku snaží být moderní alternativou ke Screenu, který je tu s námi už od roku 1987 (!). Changelog jeho mladšího kolegy proti tomu začíná v polovině roku 2007, je tedy o dvacet let mladší. Přináší tak především modernější rozhraní, architekturu a více možností, které vám možná ve Screenu chybí.

Tmux je na rozdíl od Screenu (i když ten už to umí částečně taky) připraven přímo na práci s okny. Kromě přepínání celých obrazovek tak umožňuje pohodlně rozčlenit plochu terminálu na různě velká okna, která dokáže automaticky naskládat vedle sebe a potom mezi nimi pohodlně přepínat. Práce s ním vlastně připomíná tiling správce oken, které v X Window skládají okna jako dlaždice.

Tmux používá architekturu klient-server, kdy se serverový proces stará o běh jednotlivých spuštěných virtuálních terminálů. Ty jsou na sobě naprosto nezávislé a můžete si je pak připojovat do různých klientských částí. Dokonce je možné si jeden virtuální terminál otevřít současně ve více terminálech reálných. Prakticky si tuhle užitečnou vlastnost předvedeme později.

Tmux má vlastní rozhraní, které vám umožňuje ovládat jej ze skriptů. Můžete si tak naskriptovat nejčastější akce jako například „otevři mi další terminál a v něm mě přes SSH připoj do práce“. Skrze toto rozhraní je možné provádět stejnou sadu akcí, jaké můžete provádět ručně. Opět si ukážeme později.

Pokud se vám nelíbí „slepé“ ovládání Screenu, potěší vás Tmux podporou různých vysouvacích menu, která vám ulehčí orientaci v celém programu. Z dalších vlastností můžeme zmínit třeba automatické zamykání terminálu, podporu UTF-8 a 256barvových terminálů.

Praktické využití

Pro první krůčky s Tmuxem si musíme ukázat jeho základní ovládání. Pokud jste zvyklí na Screen, budete v Tmuxu jako doma. Jen jako klávesový prefix používá Ctrl-b místo Ctrl-a Screenu. Podle dokumentace je možné to v konfiguračním souboru přemapovat, mně ale zmíněný postup nefungoval. Na druhou stranu je vlastně jedno, jestli mačkáte a nebo b.

Pokud neznáte ovládání Screenu, pak vězte, že vždycky nejprve stisknete prefixovou kombinaci kláves (v tomto případě tedy Ctrl-b) a poté jednu klávesu, která označuje požadovanou akci. Dále budou tyto akce popsány i s použitými klávesami.

Každopádně Tmux spustíte tak, že jednoduše ve svém reálném terminálu napíšete:

$ tmux

a objeví se vám základní obrazovka.

Teď už můžete začít základními akcemi jako je přidání terminálů, přesun mezi nimi, vyhledávání či přesun.

  • Ctrl-b c nový terminál
  • Ctrl-b n následující terminál
  • Ctrl-b p předchozí terminál
  • Ctrl-b , přejmenování terminálu
  • Ctrl-b w zobrazí seznam terminálů
  • Ctrl-b f vyhledávání mezi terminály
  • Ctrl-b : přechod do příkazového režimu
  • Ctrl-b d odpojení od Tmuxu

Tolik k základnímu ovládání. Stejně jako u Screenu je možné se poslední jmenovanou zkratkou odpojit od sezení. Tmux klient se nám zavře, ale server stále běží a s ním i všechny terminály, okýnka i procesy. Návrat provedeme pomocí

$ tmux attach

Pozor ovšem na to, že může existovat více různých sezení. V takovém případě budete připojeni k první z nich, což ovšem nemusí být vámi kýžený kousek. Můžete použít příkazu ls a vybrat si sezení správné. Celý postup bude v praxi vypadat takto:

$ tmux ls
0: 1 windows (created Tue May 17 18:48:13 2011) [80x23]
5: 4 windows (created Tue May 17 18:55:09 2011) [80x23] (attached)
6: 1 windows (created Tue May 17 20:18:00 2011) [80x23]

$ tmux attach -t 5

Práce s okýnky

Největší síla Tmuxu se ovšem ukrývá v tom, co jsme si zatím neukázali – v práci s okýnky. Jednotlivé terminály, které jsme si dříve vytvořili, si teď můžeme rozdělit na několik různých částí, které uvidíme zároveň a můžeme s nimi manipulovat.

Poznámka: Bohužel standardně nemá Tmux nastavenou klávesu pro rozdělení obrazovky vertikálně. Je možné ale tuto klávesu snadno nastavit. Do souboru .tmux.conf ve svém domovském adresáři přidejte řádek:

bind _ split-window -v
  • Ctrl-b % rozdělí obrazovku horizontálně
  • Ctrl-b _ rozdělí obrazovku vertikálně (po nastavení)
  • Ctrl-b o přepni mezi okny
  • Ctrl-b { posuň okno doleva
  • Ctrl-b } posuň okno doprava
  • Ctrl-b q ukaž čísla oken
  • (zatímco jsou čísla zobrazena, stisk číslice vás přepne do vybraného okna)

Příkazový a skriptovací jazyk

Už jsem zmínil, že Tmux má mocný příkazový režim, který je možné využít i ve skriptech. K pokročilejšímu ovládání jej budete muset využít. Můžete si příkazy zapamatovat a psát je v interaktivním režimu (Ctrl-b :), nebo si je můžete namapovat na některou z kláves tak, jako to bylo ukázáno o několik odstavců výše.

Ukážeme si některé důležité příkazy, ostatní samozřejmě naleznete v dokumentaci k Tmuxu. Všechny příkazy i klávesy naleznete v manuálové stránce, která je opravdu dlouhá.

Poznámka: Příkazový řádek funguje velmi podobně jako řádka v terminálu. Pomocí tabulátoru příkazy doplňuje a má i historii, ve které se pohybujete pomocí kurzorových šipek.

  • break-pane oddělí okno do samostatného terminálu
  • resize-pane změní velikost okna nahoru
  • resize-pane -U změní velikost okna dolů
  • resize-pane -L změní velikost okna doleva
  • resize-pane -R změní velikost okna doprava
  • split-window -h rozdělí okno horizontálně
  • split-window -v rozdělí okno vertikálně
  • select-layout tiled rozmístí okna rovnoměrně po celé obrazovce (existují i další layouty)

Většina dalších příkazů se hodí ve skriptech, kterými můžete Tmux plně ovládat. Nastíníme si jen maličkou část možností v praktickém skriptu. Řekněme, že chcete připravit skript, který po spuštění připraví nějakou základní podobu vašeho terminálového sezení. Mohl by vypadat asi takto:

#!/bin/bash
tmux new-session -d -s servery

tmux new-window -t servery:1 -n 'Server1' 'ssh root@1.2.3.4'
tmux new-window -t servery:2 -n 'Server2' 'ssh root@5.6.7.8'
tmux new-window -t servery:3 -n 'Server3' 'ssh root@9.1.2.3'

tmux select-window -t servery:1
tmux attach-session -t servery

Jen v krátkosti vysvětlení: nejprve je vytvořená nová session s názvem servery. V ní jsou vytvořeny tři virtuální terminály, ve kterých se rovnou spustí žádané příkazy. Pak se jedno z oken vybere a na proběhne spuštění klienta, který se k zadané session připojí. Takto bychom mohli ještě terminály rozdělit na různá okna, ta pak třeba naaranžovat a opět v nich spustit různé příkazy. Možnosti jsou nevyčerpatelné.

Tmux hned po přihlášení

Z praktické zkušenosti s užíváním podobných aplikací mám jednu významnou zkušenost: začnete je opravdu používat až ve chvíli, kdy se vám budou automaticky spouštět. Jinak si na to prostě nevzpomenete a raději si otevřete patnáct okýnek a třikrát se přihlásíte přes SSH, než abyste napsali do terminálu  tmux.

Do souboru .tmux.conf v domovském adresáři si připište následující řádek

new-session

Pak už stačí do .bash_profile připsat na konec řádek, který Tmux po přihlášení spustí.

davame_internetu_obsah
       
tmux attach

Ten zajistí připojení k opuštěnému sezení nebo, pokud žádné sezení neexistuje, vytvoří nové. Pokud si tuto úpravu uděláte na vzdáleném serveru, nemusíte se o Tmux vůbec starat a vždycky ho budete mít po ruce.

Závěrem

Postupně jsem používal všechny tři už zmíněné multiplexery. Začal jsem na klasickém Screenu, později jsem přešel na chvíli na Byobu, ale nakonec jsem zakotvil na Tmuxu. Používám jej jak v Debianu, tak i ve FreeBSD a práce s ním mi přijde jednoznačně nejpřehlednější a nejpřímočařejší. Zkuste si ho taky.

Petr Krčmář

Petr Krčmář

Petr Krčmář pracuje jako šéfredaktor serveru Root.cz. Vystudoval elektroniku se zaměřením na počítačové systémy, nyní se zabývá médii, především těmi elektronickými.

Školení: Linux – Firewall, Samba, VPN

Na třídenním školení se naučíte nainstalovat a spravovat Firewall a Router, SAMBA Doménový a Souborový server. Dále si zprovozníte vlastní, zabezpečený VPN server.

Podrobnější informace a přihláška

Ohodnoťte jako ve škole:
Průměrná známka 1,93

Přehled názorů

tmux everyday
pepazdepa 26. 5. 2011 03:46
Nový
Dotaz
none 26. 5. 2011 08:13
Nový
├ 
Re: Dotaz
Petr Krčmář 26. 5. 2011 08:15
Nový
└ 
Re: Dotaz
Jirka 26. 5. 2011 09:01
Nový
tmux
milan 26. 5. 2011 09:30
Nový
├ 
Re: tmux
rob s 26. 5. 2011 09:53
Nový
└ 
Re: tmux
pepazdepa 26. 5. 2011 10:12
Nový
 
├ 
Re: tmux
rob s 26. 5. 2011 10:16
Nový
 
├ 
Re: tmux
milan 26. 5. 2011 10:16
Nový
 
└ 
Re: tmux
belzebub 26. 5. 2011 13:44
Nový
 
 
├ 
Re: tmux
belzebub 26. 5. 2011 13:55
Nový
 
 
│
└ 
Re: tmux
Trident 29. 5. 2011 22:10
Nový
 
 
└ 
meraky Re: tmux
ebik 28. 5. 2011 19:08
Nový
No tak zrocna Ctrl+b muze byt problem
benzin 26. 5. 2011 09:54
Nový
├ 
Re: No tak zrocna Ctrl+b muze byt problem
pepazdepa 26. 5. 2011 10:01
Nový
└ 
Re: No tak zrocna Ctrl+b muze byt problem
rob s 26. 5. 2011 10:04
Nový
 
└ 
Re: No tak zrocna Ctrl+b muze byt problem
Tom22 26. 5. 2011 15:19
Nový
Dotaz - screen ihned po prihlaseni
Otto Šabart 26. 5. 2011 10:07
Nový
├ 
Re: Dotaz - screen ihned po prihlaseni
Jenda 27. 5. 2011 02:09
Nový
│
└ 
Re: Dotaz - screen ihned po prihlaseni
Bystroushaak 27. 5. 2011 23:46
Nový
└ 
Re: Dotaz - screen ihned po prihlaseni
Otto Šabart 28. 5. 2011 10:32
Nový
tmux + mc?
Borek 26. 5. 2011 10:17
Nový
└ 
Re: tmux + mc?
FxF 28. 5. 2011 13:15
Nový
Dotaz
none 26. 5. 2011 10:20
Nový
rozdil screen versus tmux
hpa 26. 5. 2011 11:00
Nový
├ 
Re: rozdil screen versus tmux
x 26. 5. 2011 13:05
Nový
└ 
Re: rozdil screen versus tmux
szt 30. 5. 2011 02:54
Nový
ssh s X11Forwarding a tmux
fopr 26. 5. 2011 12:20
Nový
├ 
Re: ssh s X11Forwarding a tmux
Ondra Satai Nekola 26. 5. 2011 12:55
Nový
└ 
Re: ssh s X11Forwarding a tmux
ByCzech 30. 5. 2011 20:35
Nový
tmux sa chova ako screen s tymto konfigom:
eax 26. 5. 2011 13:35
Nový
└ 
Re: tmux sa chova ako screen s tymto konfigom:
Slávek 30. 5. 2011 21:44
Nový
 
└ 
Re: tmux sa chova ako screen s tymto konfigom:
Slávek 2. 6. 2011 17:28
Nový
screenlock v tmux (ekvivalent c-a c-x ve screen(e))
tukan 26. 5. 2011 14:38
Nový
└ 
Re: screenlock v tmux (ekvivalent c-a c-x ve screen(e))
pepazdepa 26. 5. 2011 15:55
Nový
Teamocil
erich 31. 5. 2011 14:24
Nový
Teamocil
erich 31. 5. 2011 14:27
Nový
       

Tento text je již více než dva měsíce starý. Chcete-li na něj reagovat v diskusi, pravděpodobně vám již nikdo neodpoví. Pro řešení aktuálních problémů doporučujeme využít naše diskusní fórum.

Zasílat nově přidané příspěvky e-mailem