Terminálový multiplexer tmux - I.

tmux je moderní, vysoce konfigurovatelný terminálový multiplexer, podporující skriptování, klávesové zkratky ve stylu vi a Emacs, práci s okny a podokny.

28.3.2012 00:00 | David Adamczyk | přečteno 8045×

Tmux je součástí operačního systému OpenBSD, jedná se o alternativu k programu GNU Screen, která je šířena pod BSD licencí. Funguje jako terminálový multiplexer, který poskytuje virtuální okna a podokna v terminálu pro oddělení jednotlivých konzolových aplikací. Mezi těmito okny se můžete přepínat v rámci jedné relace (session), případně v jednom okně vytvořit několik podoken a tyto podokna různě seskupovat. Takto si můžete připravit pracovní prostředí, které Vám bude práci maximálně usnadňovat jestliže pracujete často v terminálu (ať už v grafickém, nebo textovém režimu). Díky jednoduché práci s okny virtuálních konzolí nemusíte používat emulátor terminálu podporující taby (záložky) a nemusíte otevírat několik oken terminálu současně, což je obvykle nepříjemné a znesnadňuje to orientaci mezi jednotlivými okny. Tmux je založen na principu klient-server modelu, kde server umožňuje běh více sezení. Každé okno s aplikací je nezávislou entitou, která může být použita ve více sezeních. Ke každému takovémuto sezení může přistupovat více klientů. Podporuje interaktivní menu, stavový řádek informující uživatele, umí rovněž klávesové zkratky ve stylu emacsu a vi, příkazový režim ve stylu vi včetně automatického doplňování, UTF8, kopírování a vkládání pomocí mnohonásobných bufferů a pro příznivce eyecandy nesmíme zapomenout na podporu 256 barev v terminálu ;-) Tmux je k dispozici pro Linux, FreeBSD, NetBSD, Solaris a AIX. Pro instalaci do svého systému použijte buď předem připravený balíček, nebo se pusťte do kompilace programu ze zdrojových kódů, které naleznete na adrese: http://tmux.sourceforge.net/

První spuštění

Při prvním spuštení tmuxu je vytvořeno nové sezení, jedno nové pracovní okno a stavový řádek, umístěný na spodní straně okna. Stavový řádek poskytuje informace o aktuálním sezení, oknech a jejich stavech, případně další informace, nebo jej můžete použít pro interaktivní zadávání příkazů.

Užitečné příkazy, které budete při práci s tmuxem jistě potřebovat je vypsání všech příkazů, do terminálu zadejte:

$ tmux list-commands
vypsání všech klávesových zkratek pomocí příkazu
$ tmux list-keys
a informace o všech oknech, podoknech a sezenich pomocí příkazu
$ tmux info
během hrátek s konfiguračním souborem se může hodit také příkaz
$ tmux source-file ~/.tmux.conf

Práce s klientem a sezení

Abychom se mohli s klientem připojit k nějakému sezení, je toto sezení vhodné nejprve vytvořit (pokud ještě není vytvořeno, nebo jen chceme vytvořit nové). Nové sezení vytvoříte příkazem

$ tmux new -s session_name
Teď máte vytvořeno jedno, nebo více běžících sezení, ke kterým se můžete připojovat, nebo mezi nimi libovolně přepínat. Seznam všech běžících sezení vypište příkazem
$ tmux list-sessions
. Pokud chcete klienta připojit ke konkrétnímu sezení napište do terminálu příkaz
$ tmux attach -t session_name
, kde uvedete jméno konkrétního sezení, ke kterému se chcete připojit. Přepnout se z jednoho sezení do jiného provedete příkazem
$ tmux switch -t session_name
Zejména při práci na vzdáleném stroji se může hodit odpojení se od sezení (pro případ, že se k němu chcete připojit například odjinud). Pro odpojení slouží příkaz
$ tmux detach
zapsaný do terminálu ve kterém běží klient připojen na příslušné sezení, ze kterého se chcete odpojit (je možné použít i klávesovou zkratku, která je uvedena v textu dále). Každé sezení je indikováno číslem (indexem sezení) v hranatých závorkách na stavovém řádku (první sezení je označeno indexem 0) nebo libovolným řetězcem pokud jste si sezení přejmenovali. Jestliže máte na svém počítači spuštěno několik sezení Tmuxu a pořebujete se mezi nimi pomocí jednoho klienta přepínat, nejsnáze tak učiníte vyvoláním menu klávesovou zkratkou [Ctrl-b s]. Toto menu zobrazí všechna aktivní sezení, jednoduchým výběrem jej můžete změnit. Naopak k předchozímu sezení se vrátíte stiskem [Ctrl-b L]. Pokud potřebujete během práce zastavit terminál ve kterém pracujete a přejete si pozastavit výpis provedete to klávesovou zkratkou [Ctrl-b z]. Pro odpojení klienta od sezení slouží [Ctrl-b d], chcete-li vybrat konkrétního klienta použijte [Ctrl-b D]. Uživatelé, kteří si budou během práce s Tmuxem připadat ztraceni mohou kdykoliv vyvolat seznam klávesových zkratek stisknutím [Ctrl-b ?]. Pracujete-li s tmuxem na vzdáleném serveru možná oceníte vynucené překreslení připojeného klienta stiskem [Ctrl-b r].

Příkazy a klávesové zkratky

Příkazy, které chcete provádět máte možnost volat v příkazovém řádku nebo pomocí klávesových zkratek. Seznam všech příkazů, které Tmux umí provádět vypíšete příkazem

$ tmux list-commands
Větší množství příkazů zadávejte oddělením středníkem. Všechny tyto příkazy, které jsou odděleny středníkem, budou vykonávány postupně v pořadí tak jak jsou zapsány.
$ tmux prikaz1; prikaz2; prikaz3
Přejete-li si klávesové zkratky z nějakého důvodu pozměnit (například se kryjí s klávesovými zkratkami Vašeho správce oken), případně chcete vytvořit nové klávesové zkratky provedete to následujícím způsobem:
unbind-key ^A - odebere klávesovou zkratku Ctrl-A
bind-key ^A select-pane -t :.+ přiřadí příkaz klávesové zkratce Ctrl-A
Nezapomeňte, že klávesové zkratky se vyvolávají použitím prefixu (standardně [Ctrl-b]). Pokud budete chtít vyvolat příkaz, který jsme si právě nastavili použijeme [Ctrl-b + Ctrl-A] Jak bylo právě řečeno, dost často je problém klávesových zkratek v prostředí ve kterém pracujete. Jestliže se Vám standardní prefix [Ctrl-b] kryje s jinou klávesovou zkratkou, můžete jej jednoduše změnit na jiný prefix následovně:
$ tmux set-option -g prefix C-a; unbind-key C-b; bind-key C-a send-prefix
Teď budou všechny klávesové zkratky volány po použití prefixu [Ctrl-a]. To znamená, že například odpojení klienta od sezení vyvoláte stiskem [Ctrl-a d]. Zajímavou možností je nastavení klávesových zkratek nejčastěji používaným aplikacím a předávání parametrů. Ukážeme si jak přiřadit klávesovou zkratku programu w3m, který bude otevřen v novém okně a jak mu předat jako parametr adresu webu, který chceme otevřít. $ tmux bind-key P command-prompt "new-window 'exec w3m %%'" Po stisknutí klávesové zkratky [Ctrl-b + P] se ve stavovém řádku objeví výzva, do které napíšete řetězec, který bude následně předán jako parametr spuštěnému programu w3m, který se bude nacházet v nově otevřeném okně. Stejně tak můžete volat jakoukoliv jinou terminálovou aplikaci, která bude spuštěna v novém okně nebo podokně. Pokud se často přihlašujete na vzdálený počítač můžete si takto nastavit i klávesové zkratky pro ssh a podobně. Další zajímavou vlastností může být specifikace konkrétního cíle se kterým chceme pracovat. K tomu použijeme parametr -t. Máme na výběr z target-client což specifikuje konkrétního klienta, target-sesion pro zadávání příkazu konkrétnímu sezení, target-window pro zadávání příkazu konkrétnímu oknu a target-pane pro konkrétní podokno.Jestliže není okno nebo konkrétní cíl specifikován bude vybrán aktuální cíl nebo aktuální okno. Seznam všech klientů dostanete příkazem:
$ tmux list-clients
seznam všech sezení příkazem:
$ tmux list-sessions
seznam všech oken pomocí:
$ tmux list-windows
a všech podoken příkazem:
$ tmux list-panes


Při výběru oken a podoken lze použít také tzv. offset, což je posunutí o konkrétní počet položek (+2 znamená o 2 položky dále, nebo -3 od tři položky zpět) Parametr -t očekává následující volby: target-session je názvem sezení, nebo jméno klienta se stejnou syntaxí jako target-client - sezení bude připojeno do aktuálního klienta. target-window je názvem okna v zápisu [sezení:okno], pro session platí stejná pravidla jako pro target-session a window je indexem příslušného okna, například [tretisezeni:1]. Speciální znak ! znamená předchozí aktivní okno, + další okno a - předchozí okno. target-pane - platí stejná pravidla jako pro target-window. Za položku pane dosazujeme index příslušného podokna. Například mysession:mywindow.1 kde 1 je index podokna. Jestliže je index podokna vynechán, bude vybráno právě aktivní podokno. Jako index podokna mohou být použity také příslušné názvy: top, bottom, left, right, top-left, top-right, bottom-left, bottom-right. Záleží na sestavení vašich podoken v okně.
$ tmux select-window -t:-2
Posune se na okno o dvě pozice zpět v aktuálním sezení
$ tmux select-window -t 1:-2
Posune na okno o dvě pozice zpět v sezení, které je označené indexem 1. Toto si nejlépe vyzkoušíte, když si spustíte dva terminály a v každém se přihlásíte k jinému sezení tmuxu. Stejným způsobem můžete přistupovat k libovolnému podoknu v daném sezení. Tedy příkazem:
$ tmux split-window -h -t 1:2
rozdělíte v sezení s indexem 1 jeho druhé okno na dva podokna a příkazem:
$ tmux clock-mode -t 1:2.0
zobrazíte v podokně s indexem 0 hodiny. Příkazy shellu musí být předány jako jeden řetězec:
$ tmux new-window ‘vi /etc/passwd’

V dalším díle Vás čeká popis práce s okny, podokny, stavovým řádkem a něco málo o tom jak si s tmuxem ušetřit práci.
Online verze článku: http://www.linuxsoft.cz/article.php?id_article=1917