Vad är en TTY på Linux? (och hur man använder kommandot tty)

By rik

Vad åstadkommer kommandot tty? Det visar namnet på den terminal du för närvarande använder. TTY är en förkortning av ”teletypewriter”. Men varifrån kommer kommandots namn ursprungligen? Det kräver lite djupare förklaring.

Fjärrskrivare från 1800-talet

Under 1830- och 1840-talen utvecklades maskiner som kallades fjärrskrivare. Dessa apparater kunde skicka maskinskrivna meddelanden till avlägsna platser. Avsändaren skrev meddelandena på ett tangentbord och de skrevs sedan ut på papper hos mottagaren. Det var ett viktigt steg inom telegrafin, som tidigare hade förlitat sig på Morse-koden och liknande system.

Meddelanden kodades, skickades, togs emot, avkodades och slutligen skrevs ut. Flera tekniker användes för att koda och avkoda information. En av de mest kända, och mest använda, patenterades 1874 av Émile Baudot, vars namn lever vidare i termen baud för överföringshastighet. Hans teckenkodningssystem var 89 år äldre än ASCII.

Baudots kodningsmetod blev efterhand närmast en standard inom fjärrskrivartekniken och antogs av de flesta tillverkare. Baudots första hårdvarudesign hade endast fem tangenter, lite som pianotangenter. Användaren var tvungen att memorera speciella tangentkombinationer för varje bokstav. Med tiden kopplades Baudots kodningssystem till ett traditionellt tangentbord.

För att markera utvecklingen började dessa maskiner kallas teleskrivmaskiner. Detta kortades ned till teletyper och till sist till TTY. Så det är här förkortningen TTY kommer ifrån. Men vad har fjärrskrivare med datorer att göra?

ASCII och Telex

När ASCII-standarden kom 1963 antogs den av teletyptillverkarna. Trots att telefonen hade uppfunnits och var allmänt använd, fortsatte teletyperna att vara viktiga.

Telex var ett globalt nätverk av teletyper som gjorde det möjligt att skicka skriftliga meddelanden över hela världen. De var det främsta sättet att överföra skriftliga meddelanden under tiden efter andra världskriget fram till faxens genombrott på 1980-talet.

Samtidigt utvecklades datorer. De blev kapabla att interagera med användare i realtid och stödja flera användare samtidigt. Det gamla sättet med batch-jobb fungerade inte längre. Folk ville inte behöva vänta i 24 timmar eller mer på sina resultat. Att mata in högar med hålkort och vänta över natten på resultaten ansågs inte längre acceptabelt.

Människor behövde ett sätt att mata in instruktioner och få resultaten tillbaka direkt. Effektivitet var nyckeln.

Teletypen återanvänds

Teletypen blev den idealiska kandidaten som enhet för in- och utmatning. Det var ju en enhet designad för att skriva, koda, skicka, ta emot, avkoda och skriva ut meddelanden.

Teletypen brydde sig inte om att enheten i andra änden av anslutningen inte var en annan teletyp. Så länge den ”talade” samma kodningsspråk och kunde ta emot och skicka meddelanden var teletypen nöjd.

Och den använde ju också ett mer eller mindre standardiserat tangentbord.

Hårdvaruemulerade teletyper

Teletyper blev det vanliga sättet att interagera med den tidens stora mini- och stordatorer.

De ersattes så småningom av enheter som med hjälp av elektronik emulerade de elektromekaniska maskinerna. Dessa hade katodstrålerör (CRT) istället för pappersrullar. De skakade inte när de levererade svar från datorn. De möjliggjorde även funktioner som tidigare var otänkbara, som att flytta markören på skärmen, rensa skärmen och fetstila text.

DEC VT05 var ett tidigt exempel på en virtuell teletyp och en föregångare till den berömda DEC VT100. Miljontals DEC VT100 såldes.

Programvaruemulerade teletyper

I Linux och andra Unix-liknande operativsystem, som macOS, är terminalfönstret och applikationer som xterm och Konsole exempel på virtuella teletyper. De är helt emulerade i mjukvara och kallas pseudo-teletyper, förkortat PTS.

Och det är här tty kommer in i bilden.

Vad säger kommandot tty?

I Linux finns en pseudo-teletypmultiplexer som hanterar anslutningarna från alla terminalfönsters pseudo-teletyper (PTS). Multiplexern är ”master” och PTS är ”slavar”. Kärnan kommunicerar med multiplexorn via enhetsfilen som finns i /dev/ptmx.

Kommandot tty visar namnet på den enhetsfil som din pseudo-teletypslav använder för att ansluta till mastern. Och det är faktiskt numret på ditt terminalfönster.

Låt oss se vad tty rapporterar för vårt terminalfönster:

tty

Svaret visar att vi är anslutna till enhetsfilen /dev/pts/0.

Vårt terminalfönster, som är en mjukvaruemulering av en teletyp (TTY), är alltså ansluten till pseudo-teletypmultiplexorn som en pseudo-teletyp (PTS). Och just i det här fallet är numret noll.

Det tysta alternativet

Alternativet -s (tyst) gör att tty inte genererar någon utskrift.

tty -s

Det producerar dock ett exitvärde:

0: om standardinmatningen kommer från en TTY-enhet, emulerad eller fysisk.
1: om standardinmatningen inte kommer från en TTY-enhet.
2: Syntaxfel, felaktiga kommandoradsparametrar har angetts.
3: Ett skrivfel har inträffat.

Detta är troligen mest användbart i Bash-skript. Men vi kan också visa hur man får ett kommando att köras bara om du kör det i ett terminalfönster (en TTY- eller en PTS-session).

tty -s && echo "In a tty"

Eftersom vi kör kommandot i en TTY-session blir utgångskoden 0 och det andra kommandot exekveras.

Vem bestämmer?

Andra kommandon kan avslöja ditt TTY-nummer. Kommandot ”who” visar information för alla inloggade användare, inklusive dig själv.

Alec och Mary är fjärranslutna till Linux-datorn. De är anslutna till PTS ett och två.

Användaren dave visas som ansluten till ”:0”.

Detta representerar skärmen och tangentbordet som är fysiskt anslutna till datorn. Även om skärmen och tangentbordet är hårdvaruenheter är de fortfarande anslutna till multiplexorn via en enhetsfil. Kommandot tty visar att den heter /dev/pts/2.

who
tty

Få tillgång till en TTY

Du kan komma åt en helskärms-TTY-session genom att hålla ned Ctrl+Alt-tangenterna och trycka på en av funktionstangenterna.

Ctrl+Alt+F3 visar inloggningsprompten för tty3.

Om du loggar in och utfärdar kommandot tty, ser du att du är ansluten till /dev/tty3.

Det här är inte en pseudo-teletyp (emulerad i programvara); det är en virtuell teletyp (emulerad i hårdvara). Den använder skärmen och tangentbordet som är anslutna till din dator för att emulera en virtuell teletyp, precis som DEC VT100 gjorde.

Du kan använda tangentkombinationen Ctrl+Alt tillsammans med funktionstangenterna F3 till F6 och ha fyra TTY-sessioner öppna om du vill. Du kan till exempel vara inloggad på tty3 och trycka på Ctrl+Alt+F6 för att gå till tty6.

För att komma tillbaka till din grafiska skrivbordsmiljö, tryck på Ctrl+Alt+F2.

Genom att trycka på Ctrl+Alt+F1 återgår du till inloggningsprompten för din grafiska skrivbordssession.

En gång i tiden öppnade Ctrl+Alt+F1 till Ctrl+Alt+F6 TTY-konsoler i helskärm och Ctrl+Alt+F7 återvände till den grafiska skrivbordsmiljön. Om du kör en äldre Linux-distribution kan det vara så ditt system beter sig.

Detta har testats på de senaste versionerna av Manjaro, Ubuntu och Fedora och de fungerar alla på samma sätt:

Ctrl+Alt+F1: Återgår till den grafiska inloggningsskärmen för skrivbordsmiljön.
Ctrl+Alt+F2: Återgår till den grafiska skrivbordsmiljön.
Ctrl+Alt+F3: Öppnar TTY 3.
Ctrl+Alt+F4: Öppnar TTY 4.
Ctrl+Alt+F5: Öppnar TTY 5.
Ctrl+Alt+F6: Öppnar TTY 6.

Att ha tillgång till dessa helskärmskonsoler gör att användare som bara använder kommandoradsinstallationer av Linux – och många Linux-servrar är konfigurerade på det sättet – har tillgång till flera konsoler.

Har du någonsin jobbat på en Linux-dator med en grafisk skrivbordsmiljö och råkat ut för att sessionen har frusit? Nu kan du hoppa över till en av TTY-konsolsessionerna för att försöka lösa situationen.

Du kan använda kommandona ”top” och ”ps” för att försöka identifiera den applikation som har kraschat, använda ”kill” för att avsluta den eller bara använda kommandot ”shutdown” för att försöka stänga ner datorn så säkert som möjligt.

Tre bokstäver med mycket historia

Kommandot tty har fått sitt namn från en enhet från slutet av 1800-talet. Det dök upp i Unix 1971 och är än i dag en del av Linux och Unix-liknande operativsystem.

Den här lilla kommandot har en hel historia bakom sig.