Voor wie regelmatig op de terminal werkt heeft vaak aan één shell niet genoeg. De meest voor de hand liggende mogelijkheid is om met Alt+F2 een nieuwe console te gebruiken, of in X een nieuwe xterm te openen. In het eerste geval zijn het aantal terminals maar beperkt, in het tweede geval wordt het toch wel snel een rommeltje in je X-sessie.
Dit is één van de redenen waarom de terminal multiplexer is uitgevonden: met een enkele terminal kan je toch verschillende shells tegelijkertijd hebben draaien. Veel multiplexers zijn ook in staat om al je shells in de achtergrond te laten draaien terwijl je de bij behorende terminal hebt afgesloten. Denk bijvoorbeeld aan de situatie dat je vanuit je werk nog even een programma wilt compileren op je thuis-PC voordat je naar huis gaat. Bij gebrek aan een multiplexer zal je je werkstation waarop je met SSH bent ingelogd aan moeten laten staan om de compilatie niet af te breken. Echter, met een multiplexer kan je de sessie naar de achtergrond verplaatsen (loskoppelen) en veilig de terminal afsluiten. Alle programma's die je binnen de multiplexer hebt gestart blijven gewoon doorgaan.
screen
De bekendste terminal multiplexer is zonder meer GNU Screen. Deze is in iedere Linux-distributie te verkrijgen en heeft een trouwe staat van dienst. Alleen de ontwikkeling wil de laatste jaren niet echt vlotten (de repository wordt de laatste tijd druppelsgewijs aangevuld met verbeteringen). Een persoonlijk gemis was toch wel de mogelijkheid om het scherm verticaal te splitsen. Er is een patch die dit implementeert en deze is ook al een flinke tijd in de repository te vinden (2.5 jaar!), maar zodra je deze functionaliteit gebruikt stuit je toch al snel op bugs.
tmux
Sinds een relatief korte tijd is er ook een andere terminal multiplexer beschikbaar: tmux. Deze is van de grond af aan geschreven om een alternatief te kunnen bieden aan screen. Het biedt onder andere de vertical split aan waarnaar ik op zoek was. Bovendien is het geschreven onder de BSD-licentie, dat betekent dat het eenvoudig is om opgenomen te worden in een BSD-variant. Sterker nog: OpenBSD heeft dat al gedaan, zodat tmux standaard aanwezig is.
Toch kan het op bepaalde vlakken nog niet helemaal tippen aan de oude rot in het veld, screen. Zo wordt al snel het gebrek aan fatsoenlijke ondersteuning voor UTF-8 duidelijk, of het feit dat je niet kan zoeken in je backlog. Toch is dit niet heel ernstig en is het een kwestie van tijd dat dit rechtgezet wordt.
Sneltoetsen
Omdat ik voorheen altijd screen gebruikt heb, zijn de sneltoetsen in m'n vingers gebakken. Daar waar je een venster splitst met 'C-a S' in screen, moet je in tmux 'C-b "' gebruiken. Gelukkig kan je met tmux zelf de sneltoetsen indelen in het configuratiebestand, met behulp van het commando bind-key. Om screen zoveel mogelijk te immiteren heb ik de volgende instellingen in ~/.tmux.conf geplaatst:
bind-key a send-prefix
bind-key C-a last-window
bind-key S split-window
bind-key Tab down-pane
Hiermee haal ik wel een punt aan wat sommige mensen als een grote fout zien van screen: het gebruik van Ctrl-A. Deze wordt door een aantal mensen gebruikt om naar het begin van de regel te springen. De ontwikkelaars van tmux zijn zich daarvan bewust en hebben daarom Ctrl-B als 'meta'-sneltoets gekozen. Maar aangezien ik Ctrl-A nergens anders voor gebruikte en ik er zo gewend aan was, heb ik het met de eerste twee regels weer hersteld (de tweede regel is een sneltoets om Ctrl-A naar je terminal te sturen zonder dat dit wordt opgevangen door tmux).
Vensters en layouts
Net zoals bij screen kan je in tmux verschillende vensters tegelijkertijd hebben draaien. Door in screen het beeld te splitsen kan je meerdere vensters tegelijkertijd tonen. In tmux werkt het echter allemaal net wat anders. Vensters staan op zichzelf en er kan er maar één tegelijkertijd in beeld zijn. Maar een venster kan wel meerdere gedeeltes (panes) bevatten. Je maakt zo'n nieuw gedeelte door het venster te splitsen, met Ctrl-A S (volgens de instellingen hierboven). Je kan dan vervolgens van gedeelte wisselen door Ctrl-A o te typen. Voor de duidelijkheid: je blijft in hetzelfde venster. Wil je van venster wisselen, kan je C-A C-A of C-A 2 typen (of ieder ander vensternummer dan 2). Dit is tamelijk gelijk aan screen.
Hoe de gedeeltes binnen een vester ingedeeld worden kan je zelf kiezen met een layout, die je voor ieder venster apart kunt instellen. Hieronder zie je een overzicht van de beschikbare layouts (in versie 0.9):
![]() |
![]() |
![]() |
| Handmatig | Enkele shell | Gelijke verticale verdeling |
![]() |
![]() |
![]() |
| Gelijke horizontale verdeling | Een horizontaal hoofdvenster | Een verticaal hoofdvenster |
Je kan binnen een venster van layout wisselen door C-A Spatie te typen. Het is bij de meeste layouts (nog) niet mogelijk om de grootte van de gedeeltes aan te passen, alleen bij de layout Handmatig is het mogelijk om de gedeeltes hoger of lager te maken.
Conclusie
tmux is nog een jong project, maar wel veelbelovend. Het mist nog een aantal functies die wel in screen zitten, maar het weet ook de tekortkomingen van screen op te vangen. Ik moest in het begin even wennen aan de vensters en layouts, maar na een tijdje is het eigenlijk best prettig werken. Als voordeel van tmux wordt ook genoemd is dat je de tmux-commando's ook aanroepbaar zijn vanaf de shell (dus niet alleen met sneltoetsen), maar ik moet zeggen dat ik daar nog geen gebruik van gemaakt heb.
Meer informatie vind je in de manpage, die (gelukkig) niet zo lang is als de screen manpage. Het zou niet verschrikkelijk veel moeite moeten kosten om aan de slag te kunnen met tmux.





