Skip to main content

Tekst-terminaler på Linux - 14,1 Getty (bruges i / etc / inittab)

Command Line Essentials: Git Bash for Windows (Juni 2026)

Command Line Essentials: Git Bash for Windows (Juni 2026)
Anonim

14.1 Getty (bruges i / etc / inittab)

Introduktion til Getty

For at få en loginproces køre på en seriel port (og terminalen er forbundet med den), når computeren starter (eller skifter løbe niveauer), skal en getty kommando indsættes i filen / etc / inittab. At køre getty fra kommandolinjen kan forårsage problemer (se Hvis Getty løber fra kommandolinjen: Programmer bliver stoppet for at se hvorfor). Getty får en TTY (en terminal) går. Hver terminal har brug for sin egen getty kommando. Der er også mindst en Getty-kommando til konsollen i hver / etc / inittab-fil. Find dette og sæt getty-kommandoerne til de rigtige terminaler ud for det. Denne fil kan indeholde sample getty linjer til tekstterminaler, der kommenteres, så alt du skal gøre er at uncomment dem (fjern den førende #) og ændre nogle argumenter.

De argumenter, der er tilladt, afhænger af hvilken getty du bruger:To gettys bedste til direkte tilsluttede terminaler er:

  • agetty (nogle gange bare kaldet getty): Meget let at sætte op. Ingen konfigurationsfiler. Se agetty
  • getty (del af getty_ps)

To gettys bedste til dial-in modemmer (undgå for direkte tilsluttede terminaler) er:

  • mgetty: den bedste til modemer; arbejder også for terminaler, men dårligere
  • uugetty: kun modemer; del af getty_ps-pakken

Simple gettys at bruge, hvis du ikke bruger en reel tekst-terminal. De fleste Linux-brugere bruger en af ​​disse på deres skærm:

  • mingetty
  • fbgetty
  • fgetty
  • rungetty

Din Linux-distribution kan leveres med enten ps_getty eller agetty til tekst-terminaler. Nogle distributioner leverer hverken. Desværre kalder de ofte bare "getty", så du bliver måske nødt til at bestemme, hvilken du har siden de argumenter, du lægger efter det i / etc / inittab, er forskellige. Debian bruger agetty (i util-linux-pakken). RedHat og Fedora brugte ps_getty som er på: ps_getty

Som en sidste udvej for at prøve at bestemme hvilken getty du har, kan du tjekke den eksekverbare kode (normalt i / sbin). ps_getty har / etc / gettydefs indlejret i denne kode. For at søge efter det, skal du gå til / sbin og skrive:strenge getty | grep getty Hvis getty faktisk er agetty vil ovennævnte resultere i ingenting. Men hvis du har agetty typing:getty -hbør vise indstillingerne -hiLmw.

Hvis du ikke har getty vil du tjekke andre distributioner og alien program til at konvertere mellem RPM og Debian-pakker. Kildekode kan downloades fra Getty Software.

Hvis du ikke bruger modemstyringslinjer (for eksempel hvis du kun bruger minimumsantalet 3 ledere: send, modtag og fælles signalplads), skal du lade getty vide dette ved hjælp af et "lokalt" flag. Formatet af dette afhænger af hvilket getty du bruger.

Getty udganger efter login (og kan respawn)

Når du logger ind, vil du bemærke (ved at bruge "top", "ps -ax" eller "ptree"), at getty-processen ikke længere kører. Hvad er der sket med det? Hvorfor genstarter getty igen, hvis din shell bliver dræbt? Her er hvorfor.

Når du har indtastet dit brugernavn, tager Getty det og kalder login-programmet, der fortæller det dit brugernavn. Getty-processen erstattes af loginprocessen. Login processen spørger om dit kodeord, kontrollerer det og starter, hvad processen er angivet i din adgangskodefil. Denne proces er ofte bash shell. I så fald starter bash og erstatter loginprocessen. Bemærk, at en proces erstatter en anden, og at bash shell processen oprindeligt startede som getty processen. Følgerne heraf vil blive forklaret nedenfor.

Nu i filen / etc / inittab, skal Getty respondere (genstart), hvis den bliver dræbt. Det siger så på linjen, der kalder getty. Men hvis bash shell (eller login processen) bliver dræbt, responderer Getty (genstarter). Hvorfor? Nå, både login og bash er udskiftninger til getty og arv

* Tekst Terminal How-To Index

signalforbindelserne etableres af deres forgængere. Faktisk hvis du observerer detaljerne, vil du bemærke, at udskiftningsprocessen vil have samme proces ID som den oprindelige proces. Således er bash slags getty i forklædning med samme proces ID nummer. Hvis bash er dræbt, er det ligesom getty blev dræbt (selv om getty ikke kører længere). Dette resulterer i getty respawning.

Når man logger ud, dræbes alle processerne på den serielle port, herunder bash shell. Dette kan også ske (hvis aktiveret), hvis et hangup signal sendes til seriel port med en dråbe DCD spænding af modemet. Enten logout eller drop i DCD vil resultere i getty respawning. Man kan tvinge Getty til at respawn ved manuelt at dræbe bash (eller login) enten ved at trykke på k-tasten mv. I "top" eller med "kill" kommandoen. Du vil sandsynligvis nødt til at dræbe det med signal 9 (som ikke kan ignoreres).

Hvis getty løber fra kommandolinjen: Programmer bliver stoppet

Du bør normalt køre Getty indefra / Etc / inittab og ikke fra kommandolinjen ellers kan nogle programmer, der kører på terminalen, blive uventet suspenderet (stoppet). Her er hvorfor (spring til næste afsnit, hvis hvorfor ikke er vigtigt for dig). Hvis du starter getty for at sige ttyS1 fra kommandolinjen i en anden terminal, siger tty1, så vil den have tty1 som dens "controlling terminal", selvom den aktuelle terminal den kører på, er ttyS1. Således har den den forkerte kontrol terminal. Men hvis det er startet inde i inittab filen, så vil det have ttyS1 som den kontrollerende terminal (korrekt).

Selvom den kontrollerende terminal er forkert, fungerer login på ttyS1 fint (da du gav ttyS1 som et argument til getty). Standardindgangen og -udgangen er indstillet til ttyS1, selvom den styrende terminal forbliver tty11. Andre programmer, der kører på ttyS1, kan arve denne standardindgang / -udgang (som er forbundet til ttyS1) og alt er OK. Men nogle programmer kan begå fejlen ved at forsøge at læse fra deres kontrollerende terminal (tty1), hvilket er forkert. Nu kan tty1 tro at disse programmer bliver kørt i baggrunden af ​​tty1, så et forsøg på at læse fra tty1 (det burde have været ttyS1) resulterer i at stoppe processen, der forsøgte at læse. (En baggrundsproces må ikke læse fra dens styrende terminal.). Du kan muligvis se en besked noget som: "1 + Stoppet"på skærmen. På dette tidspunkt sidder du fast, da du ikke kan interagere med en proces, der forsøger at kommunikere med dig via den forkerte terminal. Selvfølgelig at undslippe dette kan du gå til en anden terminal og dræbe processen osv. .

agetty (kan hedde getty)

Et eksempel linje i / etc / inittab:

S1: 23: respawn: / sbin / getty -L 19200 ttyS1 vt102

S1 er fra ttyS1. 23 betyder, at getty køres ved at gå i løbe niveau 2 eller 3. respawn betyder, at hvis getty (eller en proces, der erstatter den som bash) dræbes, vil gettyget automatisk starte (respawn) igen. / sbin / getty er getty kommandoen. -L betyder Local (ignorere modemstyresignaler). -h (ikke vist i eksemplet) muliggør styring af hardware flow (samme som stty crtscts). 19200 er baud rate. ttyS1 betyder / dev / ttyS1 (COM2 i MS-DOS). vt102 er typen af ​​terminal, og denne getty vil indstille miljøvariabelen TERM til denne værdi. Der er ingen konfigurationsfiler. Skriv "init q" på kommandolinjen efter redigering af getty og du skal se en login prompt.

Agetty er automatisk afsløring af paritetsproblemer

Det agetty programmet vil forsøge at automatisk opdage paritetssættet inde i terminalen (herunder ingen paritet). Det understøtter ikke 8-bit data bytes plus 1-bit paritet. Se 8-bit databytes (plus paritet). Hvis du bruger stty at sætte paritet, agetty vil automatisk deaktivere det, da det i starten ønsker, at paritetsbiten skal komme igennem, som om det var en databit. Dette skyldes, at det er nødvendigt at få den sidste bit (muligvis en paritetsbit), når du indtaster dit login-navn, så det kan automatisk opdage paritet. Således, hvis du bruger paritet, skal du aktivere det kun inden for tekst-terminalen og lade agetty Autodetekter den og sæt den på computeren. Hvis din terminal understøtter modtaget paritet, vil login prompt blinke, indtil du skriver noget, så Getty kan registrere

paritet. Den forvrængede prompt vil afholde besøgende mv. Fra at forsøge at logge ind. Det kunne være lige hvad du vil.

Der er nogle gange et problem med automatisk detektering af paritet. Dette sker, fordi du først skriver dit loginnavn, agetty starter Log på program for at afslutte at logge dig ind. Desværre er det Log på Programmet kan ikke registrere paritet, så hvis getty programmet undlod at bestemme pariteten da Log på vil heller ikke kunne bestemme det. Hvis det første loginforsøg fejler, Log på vil lade dig prøve igen, etc. (alt sammen med pariteten er forkert). Efter en række mislykkede forsøg på at logge ind (eller efter en timeout) agetty vil starte igen og starte login-sekvenserne igen. Når getty kører igen, kan det være muligt at opdage pariteten på det andet forsøg, så alting kan så fungere ok.

Med forkert paritet er Log på programmet kan ikke korrekt læse, hvad du skriver, og du kan ikke logge ind. Hvis din terminal understøtter modtaget paritet, vil du fortsætte med at se en forvrænget skærm. Hvis getty ikke registrerer paritet, bliver en / etc / issue-fil normalt dumpet til skærmen lige før før prompten, så der kan forekomme mere forstyrrede ord på skærmen.

Hvorfor kan man ikke let opdage paritet ved det første bogstav skrevet? Her er et eksempel: Antag, at det opdager en 8-bit byte med dens paritetsbit 0 (højordensbit) og med et ulige antal 1-bits. Hvilken paritet er det? Tja, det ulige antal 1 bits indebærer, at det er ulige paritet. Men det kunne også bare være en 8-bit karakter uden paritet. Der er ingen måde så langt at afgøre, hvilken. Men indtil nu har vi elimineret muligheden for lige paritet. Påvisning af paritet foregår således ved en eliminationsproces.

Hvis den næste byte typen svarer til den første og også kun eliminerer muligheden for ensartet paritet, er det stadig umuligt at bestemme paritet. Denne situation kan fortsætte på ubestemt tid, og i sjældne tilfælde vil login mislykkes, indtil du ændrer dit login-navn. Hvis agetty finder en paritetsbit på 1, antages det at dette er en paritetsbit og ikke en højordensbit af en 8-bit tegn. Det antager således, at du ikke bruger meta-tegn (høj bit sæt) i dit brugernavn (dvs. at dit navn er i ASCII).

Man kan komme ind på en "login loop" på forskellige måder. Antag, at du kun skriver et enkelt bogstav eller to til dit login navn og derefter klikker på retur. Hvis disse bogstaver ikke er tilstrækkelige til paritetsdetektering, er login-kørsler før paritet blevet detekteret. Nogle gange sker dette problem, hvis du ikke har terminalen på og / eller tilsluttet, når agetty først starter.

Hvis du sidder fast i denne "login loop", er det en chance for at ramme returnøglen flere gange, indtil du får Getty login prompt. En anden måde er at bare vente et øjeblik eller deromkring for en timeout. Derefter vil getty login prompt blive sat på skærmen ved getty programmet, og du kan prøve igen at logge ind.

8-bit databyte (plus paritet)

Desværre kan agetty ikke opdage denne paritet.Fra slutningen af ​​1999 har den ingen mulighed for at deaktivere auto-detektion af paritet og dermed opdage forkert paritet. Resultatet er, at loginprocessen vil blive forvrænget, og paritet vil blive indstillet forkert. Således virker det ikke muligt at forsøge at anvende 8-bit databytes med paritet.

getty (del af getty_ps)

(Det meste af dette er fra den gamle Serial-HOWTO af Greg Hankins)For denne getty skal man både sætte poster i en konfigurationsfil og tilføje en post i / Etc / inittab. Her er nogle eksempler på poster, der skal bruges til din terminal, som du lægger i konfigurationsfilen / etc / gettydefs.

Bemærk, at DT38400, DT19200 osv. Kun er etiketter og skal være det samme som du bruger / Etc / inittab.

Hvis du vil, kan du lave getty Udskriv interessante ting i login banner. I mine eksempler har jeg systemnavnet og serienummeret trykt. Du kan tilføje andre ting: blockquote

skygge = yes

Når du er færdig med at redigere / etc / gettydefs, kan du kontrollere, at syntaksen er korrekt ved at gøre:

Sørg for, at der ikke er andre getty eller uugetty config-fil til den serielle port, at din terminal er knyttet til f.eks. (/etc/default/{uu}getty.ttySN eller /etc/conf.{uu}getty.ttySN), da dette sandsynligvis vil forstyrre kørslen getty på en terminal. Fjern sådanne modstridende filer, hvis de udgår.

Rediger din / Etc / inittab fil til at køre getty på seriel port (erstatning i de korrekte oplysninger for dit miljø - port, hastighed og standardterminaltype):

På dette tidspunkt skal du se en login prompt på din terminal. Du må muligvis slå tilbage for at få terminalens opmærksomhed.

mgetty

"M" står for modem. Dette program er primært til modemer, og fra midten af ​​2000 vil det kræve genkompilering for at bruge det til tekstterminaler (medmindre du bruger hardware flow kontrol - og det kræver normalt et håndlavet kabel). For dokumentationen for direkte tilsluttede terminaler, se "Direct" i manualen: mgetty.texi.

Se på de sidste linjer af /etc/mgetty/mgetty.config for et eksempel på at konfigurere det til en terminal. Medmindre du siger "toggle-dtr no", vil det tro at du har et modem og drop (negate) DTR pin på pc'en forgæves forsøg på at nulstille det ikke-eksisterende modem. I modsætning til andre gettys vil mgetty ikke knytte sig til en terminal, før nogen rammer nogen nøgle i den terminal, så du kan se en? for terminalen i top eller ps indtil dette sker Logfilerne i / Var / log / mgetty / kan vise nogle få advarselsmeddelelser, som kun gælder for modemer, som du måske ignorerer.

Her er et eksempel på den enkle linje, du lægger i / Etc / inittab: