Terminalmultiplexer: meerdere sessies in één venster
Stel je voor: je werkt op een verre server via een simpele tekstverbinding, en je wilt tegelijk een bestand bewerken, een proces monitoren en een download laten draaien. Zonder hulpmiddelen zou je drie apart inlogvensters moeten openen — en als je internetverbinding wegvalt, verlies je alle voortgang. Een terminalmultiplexer lost dit op door binnen één verbinding meerdere "schermen" te maken die je kunt splitsen, wisselen en zelfs laten doorlopen nadat je de verbinding hebt verbroken.
Het woord "multiplexer" komt oorspronkelijk uit de telecommunicatie, waar het apparaten aanduidt die meerdere signalen over één kanaal sturen. Bij een terminalmultiplexer is het principe vergelijkbaar: één verbinding met een computer wordt "vermenigvuldigd" tot meerdere onafhankelijke werksessies. Denk aan een serveerster die met één blad tegelijk meerdere tafels bedient — de multiplexer regelt welk deel van je scherm bij welke taak hoort, en onthoudt alles ook als jij even wegloopt.
Wat is het precies?
Een terminal is het klassieke tekstvenster waarin je commando's intypt — de zwarte of witte balk met een knipperende cursor die programmeurs en systeembeheerders gebruiken. Van oorsprong kon een terminal maar één taak per keer tonen. Een terminalmultiplexer is een programma dat tussen jou en die onderliggende terminal gaat zitten en daar een eigen laag bovenop legt.
Die laag bestaat uit een paar bouwstenen. Een sessie is de hele werkomgeving die de multiplexer beheert. Binnen een sessie maak je vensters (windows), die je kunt zien als tabbladen. Elk venster kan weer worden opgedeeld in panelen (panes) — kleinere vakjes naast of onder elkaar, elk met hun eigen actieve commando.
Het cruciale technische kenmerk is dat de multiplexer werkt volgens een client-server-model. Het programma start een achtergrondproces (de server) dat losstaat van jouw kijkvenster (de client). Sluit je je kijkvenster — bijvoorbeeld omdat je internetverbinding wegvalt of je besluit uit te loggen — dan blijft die achtergrondserver gewoon draaien. Dit heet "detachen": je koppelt je scherm los, maar het proces erachter loopt door. Later kun je met een simpel commando weer "attachen" en zie je alles precies zoals je het achterliet, inclusief lopende processen.
Daarnaast bieden de meeste terminalmultiplexers toetsencombinaties om snel te schakelen tussen vensters en panelen, tekst te kopiëren binnen de tekstomgeving, en de indeling van het scherm aan te passen — allemaal zonder de muis nodig te hebben.
Wat wil men ermee bereiken?
De belangrijkste belofte is continuïteit. Systeembeheerders en ontwikkelaars werken vaak op afstand, via het protocol SSH (Secure Shell), op servers die soms honderden kilometers verderop staan. Een instabiele verbinding was vroeger een groot probleem: viel de verbinding weg, dan verdween ook het lopende proces. Met een terminalmultiplexer draait het proces gewoon door op de server, los van jouw eigen internetverbinding.
Een tweede doel is overzicht en efficiëntie. Door een scherm op te delen in meerdere panelen kun je bijvoorbeeld logbestanden volgen in het ene paneel, terwijl je in het andere paneel commando's uitvoert. Dat bespaart tijd die anders zou gaan naar het wisselen tussen losse vensters.
Een derde, minder voor de hand liggend doel is samenwerking. Omdat een sessie op de server draait, kunnen meerdere mensen tegelijk met dezelfde sessie verbinden en precies hetzelfde scherm zien — nuttig bij het samen oplossen van een probleem of bij het geven van een technische demonstratie op afstand.
Voorbeelden uit de praktijk
GNU Screen is de oudste veelgebruikte terminalmultiplexer, voor het eerst uitgebracht in 1987 door Oliver Laumann. Decennialang was het de standaardkeuze voor systeembeheerders en wordt het nog steeds op veel Linux-systemen standaard meegeleverd.
tmux (terminal multiplexer) werd in 2007 geschreven door Nicholas Marriott als modern alternatief voor Screen. Het kreeg een flexibelere architectuur, een actieve open source-gemeenschap en is inmiddels de meest gebruikte terminalmultiplexer onder ontwikkelaars, met uitgebreide mogelijkheden om de configuratie aan te passen via een tekstbestand.
Byobu, ontwikkeld door Dustin Kirkland en gelanceerd rond 2009, is geen zelfstandige multiplexer maar een gebruiksvriendelijke schil rond tmux of Screen. Het voegt statusbalken toe met systeeminformatie en wordt onder andere gebruikt binnen Ubuntu, de Linux-distributie van Canonical.
Zellij is een nieuwere terminalmultiplexer, geschreven in de programmeertaal Rust en voor het eerst uitgebracht in 2021. Het legt meer nadruk op een uitnodigende gebruikersinterface met zichtbare toetsenhulp, in tegenstelling tot de vaak cryptische toetscombinaties van tmux en Screen.
Kitty, een terminalemulator (het programma dat het terminalvenster zelf tekent) ontwikkeld door Kovid Goyal, bevat sinds enkele jaren ingebouwde multiplexer-achtige functies voor het splitsen van vensters, wat laat zien dat de functionaliteit ook buiten losstaande multiplexer-programma's steeds vaker wordt geïntegreerd.
Hoe ver is de techniek?
Terminalmultiplexers zijn een volwassen, stabiele technologie. GNU Screen en tmux worden al jaren gebruikt in productieomgevingen over de hele wereld en veranderen weinig aan hun kernfunctionaliteit — de basisprincipes van sessies, vensters en panelen staan al decennia vast.
De ontwikkeling verschuift tegenwoordig vooral naar gebruiksvriendelijkheid en visuele weergave. Nieuwere projecten zoals Zellij proberen de vaak steile leercurve van tmux te verlagen door duidelijkere menu's en toetsenhulp te tonen. Ook wordt er geëxperimenteerd met het combineren van multiplexer-functies met moderne terminalemulators die grafische elementen ondersteunen, zoals afbeeldingen of ligaturen in lettertypen.
Een blijvend obstakel is dat terminalmultiplexers per definitie werken binnen de beperkingen van een tekstgebaseerde omgeving. Muisondersteuning, kopiëren-plakken tussen de multiplexer en andere toepassingen op je computer, en het correct doorgeven van kleuren en lettertypekenmerken van de terminalemulator blijven soms lastig, vooral bij oudere software of ongebruikelijke terminalemulators. Dit zijn geen fundamentele doorbraken die nog moeten komen, maar praktische knelpunten die ontwikkelaars voortdurend bijschaven.
Wie werken eraan?
Terminalmultiplexers zijn overwegend een product van de open source-gemeenschap, zonder dominante grote bedrijven erachter. tmux wordt onderhouden door een klein team van vrijwillige ontwikkelaars rond oprichter Nicholas Marriott, met bijdragen van gebruikers wereldwijd via het platform GitHub.
Canonical, het Britse bedrijf achter Ubuntu, heeft met Byobu wel een directere rol gespeeld door het te ontwikkelen als standaardonderdeel van hun distributie. Bij Zellij ligt het initiatief bij een informele groep ontwikkelaars die de Rust-programmeertaal gebruiken, met financiering deels via donatieplatforms zoals Open Collective.
Verder zijn er talloze individuele bijdragers en gebruikers uit de bredere Linux- en Unix-gemeenschap die via bugmeldingen, documentatie en plug-ins (uitbreidingen) meewerken aan deze projecten, zonder dat er sprake is van gecoördineerd onderzoek door universiteiten of specifieke landen — dit is typisch "grassroots" softwareontwikkeling.