"Text-Terminals" "Linux"

14.1 Getty (naudojamas / etc / inittab)

Įvadas į "Getty"

Kad prisijungimo procesas prasidėtų serijinio prievado (ir prie jo prijungto terminalo), kai kompiuteris paleidžiamas (arba perjungia paleidimo lygius), failas / etc / inittab turi būti įvestas getty komanda. Gedito paleidimas iš komandinės eilutės gali sukelti problemų (žiūrėkite, jei Getty paleisti iš komandinės eilutės: programos nustoja pamatyti kodėl). Getty gauna TTY (terminalą). Kiekvienam terminalui reikia savo "Getty" komandos. Kiekvienoje / etc / inittab failo konsolėje yra bent viena komanda getty. Suraskite tai ir įdiekite "getty" komandas šalia jo esančių realių terminalų. Šiame faile gali būti parodytos "getty" linijos tekstiniams terminalams, kurie yra komentuojami, todėl viską, ką turite padaryti, tai pakartotinai juos komentuoti (pašalinti pagrindinius #) ir keisti keletą argumentų.

Leistini argumentai priklauso nuo to, kurį naudojate.
Du geriausi tiesiogiai prijungti terminalai:

Du įvesties modemams tinkami gavimo būdai (vengiama tiesiogiai prijungtų gnybtų) yra:

Paprasti gettys naudoti, jei nenaudojate realaus teksto terminalo. Daugelis Linux naudotojų naudoja vieną iš jų savo monitoriuje:

Jūsų "Linux" paskirstymas gali būti su "ps_getty" arba "agetty" tekstiniams terminalams. Kai kurie paskirstytojai tiekia ne. Deja, jie dažnai vadina jį "getty", todėl jums gali prireikti nustatyti, kuris iš jų yra, nes argumentai, kuriuos pateikėte po jo / etc / inittab, skiriasi. Debian naudoja agetty (paketo util-linux). RedHat ir Fedora naudojo ps_getty, kuris yra: ps_getty

Kaip paskutinė priemonė, norėdami nustatyti, kuri gatvė turite, galite patikrinti vykdomąjį kodą (paprastai į / sbin). ps_getty turi / etc / gettydefs, įterptų į šį kodą. Norėdami jį ieškoti, eikite į / sbin ir įveskite:
stygos getty | grep getty
Jei Getty yra iš tikrųjų agetty, pirmiau nieko neįvyks. Tačiau jei turite rašyti žodžius:
Getty-h
turėtų parodyti parinktis [-hiLmw].

Jei neturite getty, norėtumėte patikrinti kitus paskirstymus ir svetimų programą, kurią reikia konvertuoti tarp RPM ir Debian paketų. Šaltinio kodą galima atsisiųsti iš "Getty" programinės įrangos.

Jei nenaudojate modemo valdymo linijų (pavyzdžiui, jei naudojate tik mažiausią trijų laidininkų skaičių: persiunčia, gaunate ir įprastą signalo įžeminimą), turėtumėte leisti "getty" tai žinoti naudodami "vietos" vėliavėlę. Formatas priklauso nuo to, kokį gatvį naudojate.

Getty išeina po prisijungimo (ir gali atnaujinti)

Po to, kai prisijungsite, pastebėsite (naudodami "viršuje", "ps -ax" arba "ptree"), kad getty procesas nebeveikia. Kas nutiko? Kodėl Getty vėl paleidžiamas iš naujo, jei jūsų lukštas žuvo? Štai kodėl.

Įvedę savo vartotojo vardą, Getty jį paima ir ragina prisijungimo programą, nurodydama savo vartotojo vardą. "Getty" procesas pakeičiamas prisijungimo procesu. Prisijungimo procesas reikalauja jūsų slaptažodžio, jį patikrina ir paleidžia bet kokį procesą, nurodytą jūsų slaptažodžio failo atmintyje. Šis procesas dažnai yra "bash shell". Jei taip, bash prasideda ir pakeičia prisijungimo procesą. Atkreipkite dėmesį, kad vienas procesas pakeičia kitą ir kad "bash shell" procesas iš pradžių buvo pradėtas kaip Getty procesas. Šios pasekmės bus paaiškintos toliau.

Dabar / etc / inittab failą, jei bus nužudytas, "Getty" turi būti iš naujo paleistas (paleiskite). Tai sako taip linijoje, kuri skambina Getty. Bet jei nužudomas bash apvalkalas (arba prisijungimo procesas), getty respawns (paleidžiamas iš naujo). Kodėl? Na, tiek prisijungimo procesas, tiek bash yra "getty" ir "inherit" pakeitimai

* Teksto terminalo "How-To" indeksas

signalų ryšius nustato jų pirmtakai. Iš tikrųjų, jei pastebėsite išsamią informaciją, pastebėsite, kad pakeitimo procesas turės tą patį proceso ID kaip ir pradinis procesas. Taigi bash yra kažkokia gatvė, užmaskuota tuo pačiu proceso ID numeriu. Jei bashas nužudytas, tai lyg tas pats, kaip Getty buvo nužudytas (nors Getty nebeveikia). Tai lemia "Getty respawning".

Kai atsijungia, visi nuosekliojo prievado procesai yra nužudyti, įskaitant "bash shell". Tai taip pat gali atsitikti (jei įjungta), jei modulio prievadas yra siunčiamas į nuoseklųjį prievadą naudojant DCD įtampą. Arba išeinant iš DSC ar sumažėjus DCD rezultatas bus "Getty respawning". Galite priversti Getty į respawn rankiniu būdu nužudyti bash (arba prisijungti) arba paspaudus klavišą "k" ir tt, kai "viršuje" arba "nužudyti" komandą. Jums greičiausiai reikės jį nužudyti signalu 9 (kuris negali būti ignoruojamas).

Jei Getty paleisti iš komandinės eilutės: Programos bus sustabdytos

Paprastai paleiskite getty iš / etc / inittab, o ne iš komandinės eilutės, arba kai kurios programos, veikiančios terminale, gali būti netikėtai sustabdytos (sustabdytos). Štai kodėl (pereikite prie kito skirsnio, jei kodėl jums nėra svarbu). Jei paleisite Getty už pasakyti ttyS1 iš kito terminalo komandinės eilutės, pasakyk tty1, tada jis turės tty1 kaip "valdymo terminalą", net jei faktinis jis paleidžia ttyS1. Taigi jis turi neteisingą valdymo terminalą. Bet jei jis pradedamas inittab failo viduje, jis bus ttyS1 kaip valdymo terminalas (teisingas).

Nors valdantis terminalas yra neteisingas, ttyS1 prisijungimas veikia gerai (nes tau buvo pateiktas ttyS1 argumentas Getty). Standartinis įvestis ir išvestis nustatomi į ttyS1, nors valdymo terminalas išlieka tty11. Kitos programos, veikiančios ttyS1, gali paveldi šį standartinį įvestį / išvestį (kuris yra prijungtas prie ttyS1) ir viskas gerai. Tačiau kai kurios programos gali padaryti klaidą bandydamos skaityti iš savo valdymo terminalo (tty1), kuris yra klaidingas. Dabar tty1 gali pagalvoti, kad šios programos paleidžiamos fone naudojant tty1, todėl bandymas skaityti iš tty1 (tai turėjo būti ttyS1) baigia procesą, kuris bandė perskaityti. (Fono procesas negali būti skaitomas iš jo valdymo terminalo.). Galite matyti pranešimą, panašų į: " [1] + sustabdytas " ekrane. Šiuo metu esate įstrigę, nes negalite bendrauti su procesu, kuris bando su jumis bendrauti netinkamu terminalu. Žinoma, iš to pabėgti galite eiti į kitą terminalą ir nužudyti procesą ir tt

agetty (gali būti pavadintas getty)

Pavyzdinė eilutė / etc / inittab:

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

S1 yra iš ttyS1. 23 reiškia, kad getty paleidžiamas paleidžiant 2 arba 3 lygį. Respawn reiškia, kad jei getty (arba procesas, kuris jį pakeitė, pvz., Bash) yra nužudytas, Getty vėl bus automatiškai paleistas (respawn). / sbin / getty yra getty komanda. "-L" reiškia "Local" (ignoruoti modemo valdymo signalus). -h (nerodomas pavyzdyje) leidžia valdyti aparatūros srautą (toks pats kaip ir stty crtscts). 19200 yra bodo greitis. ttyS1 reiškia / dev / ttyS1 (COM2 MS-DOS). vt102 yra terminalo tipas, ir šis getty nustatys aplinkos kintamąjį TERM į šią vertę. Nėra konfigūracijos failų. Įveskite "init q" komandinėje eilutėje po redagavimo Getty ir turėtumėte pamatyti prisijungimo raginimą.

"Agetty" pariteto nustatymo automatinis nustatymas

" Agetty" programa bandys automatiškai aptikti paritetą, nustatytą terminalo viduje (įskaitant be pariteto). Jis nepalaiko 8 bitų duomenų baitų ir 1 bitų pariteto. Žr. 8 bitų duomenų bitus (plius paritetas). Jei naudosite " stty", kad nustatytumėte paritetą, " agetty" bus automatiškai išjungtas, nes iš pradžių jis nori, kad pariteto bitas būtų toks, lyg jis būtų duomenų bitas. Taip yra todėl, kad įvedate savo prisijungimo vardą, kad galėtumėte automatiškai nustatyti paritetą, kad gautumėte paskutinį bitą (galbūt pariteto bitą). Taigi, jei naudosite paritetą, įjunkite jį tik teksto terminalo viduje ir leiskite jį automatiškai aptikti ir nustatyti jį kompiuteryje. Jei jūsų terminalas palaiko gautą paritetą, prisijungimo raginimas atrodys iškraipytas, kol įvesite kažką, kad Getty galėtų aptikti

paritetas. Iškraipytas greitis atbaido lankytojus ir tt, bandant prisijungti. Tai gali būti tik tai, ko norite.

Kartais yra problema dėl automatinio pariteto nustatymo. Taip nutinka, nes kai pirmą kartą įveskite savo prisijungimo vardą, agetty pradeda prisijungimo programą, kad baigtumėte jus prisijungti. Deja, prisijungimo programa negali nustatyti pariteto, taigi, jei Getty programa nepavyko nustatyti pariteto, tada prisijungimas negalės nustatyti tai arba. Jei pirmasis prisijungimo bandymas nepavyksta, prisijungimas leis jums pabandyti dar kartą ir tt (visi, kurių paritetas nustatytas neteisingai). Galų gale, po tam tikrų nepavykusių bandymų prisijungti (arba po tam tikro laiko), agetty vėl pradės veikti ir vėl pradės prisijungimo sekas. Kai Getty vėl paleidžiamas, gali būti įmanoma aptikti paritetą antrojoje bandymo metu, kad viskas galėtų veikti gerai.

Neteisingai pariteto prisijungimo programa negali teisingai perskaityti jūsų įvesties ir negalėsite prisijungti. Jei jūsų terminalas palaiko gautą paritetą, jūs ir toliau matysite iškraipytą ekraną. Jei Getty nepavyksta nustatyti pariteto, failas / etc / issue paprastai nukreipiamas į ekraną prieš pat prieš eilutę, taigi ekrane gali atsirasti daugiau iškraipytų žodžių.

Kodėl negalima tiksliai nustatyti pariteto pagal pirmąją įvestą raidę? Štai pavyzdys: tarkime, kad jis aptinka 8 bitų baitą su jo lygiaverte bitu 0 (aukšto eilės bitu) ir su nelygiu 1-bitų skaičiumi. Kokia yra paritetas? Na, nelyginis 1 bitų skaičius reiškia, kad tai nelyginis paritetas. Bet tai taip pat gali būti tik 8 bitų simbolis be pariteto. Nėra jokio pagrindo nustatyti, kuris. Tačiau iki šiol mes pašalinome net lygių galimybių galimybę. Taigi pariteto nustatymas atliekamas pašalinant.

Jei kitas įvedamas bitas yra panašus į pirmąjį, ir tik pašalina net lygties galimybę, vis tiek negalima nustatyti pariteto. Ši situacija gali tęstis neribotą laiką, o retais atvejais prisijungimas nepavyks, kol nepakeisite savo prisijungimo vardo. Jei "agetty" nustato pariteto bitų 1, tai darys prielaidą, kad tai yra pariteto bitas, o ne 8 bitų simbolio aukšto lygio bitas. Todėl daroma prielaida, kad nenaudojate metaforų (aukšto bitų rinkinio) savo vartotojo varde (ty kad jūsų vardas yra ASCII).

Galima įvažiuoti į "prisijungimo liniją" įvairiais būdais. Tarkime, kad įvedate tik vieną raidę arba du savo prisijungimo vardui ir paspauskite grįžti. Jei šių raidžių nepakanka lygybei aptikti, prisijungimas prasidės prieš nustatant paritetą. Kartais ši problema atsiranda, jei neturite terminalo ir (arba) nėra prijungtas, kai "agetty" pirmą kartą paleidžiamas.

Jei įstrigo šiame "prisijungimo cikle", išeiti iš jo yra paspausti grąžinimo klavišą kelis kartus, kol gausite "Getty" prisijungimo raginimą. Kitas būdas yra tiesiog palaukti minutę tam tikrą laiką. Tada Getty prisijungimo eilutė bus įdiegta "Getty" programos ekrane, ir galėsite vėl bandyti prisijungti.

8 bitų duomenų baitai (plius paritetas)

Deja, "Agetty" negali nustatyti šio lygybės. 1999 m. Pabaigoje negalima išjungti pariteto automatinio aptikimo ir taip nustatys neteisingą paritetą. Rezultatas - prisijungimo procesas bus iškraipytas ir paritetas bus nustatytas neteisingai. Taigi atrodo, kad neįmanoma bandyti naudoti 8 bitų duomenų baitų su paritetu.

Getty (getty_ps dalis)

(Dauguma tai yra iš senojo Serial-HOWTO Greg Hankins)
Norėdami gauti šį failą, turite įdėti įrašus į konfigūracijos failą ir pridėti įrašą / etc / inittab . Štai keletas pavyzdžių, kuriuos naudojate savo terminalui, kurį įterpėte į konfigūracijos failą / etc / gettydefs .

# 38400 bps Dumb terminalo įrašas DT38400 # B38400 CS8 CLOCAL # B38400 SANE -ISTRIP CLOCAL # @ S @ L prisijungimas: # DT38400 # 19200 bps Dumb terminalo įrašas DT19200 # B19200 CS8 CLOCAL # B19200 SANE -ISTRIP CLOCAL # @ S @ L prisijungimas: # DT19200 # 9600 bps Dumb terminalo įrašas DT9600 # B9600 CS8 CLOCAL # B9600 SANE -ISTRIP CLOCAL # @ S @ L prisijungimo vardas: # DT9600

Atkreipkite dėmesį, kad DT38400, DT19200 ir tt yra tik etiketės ir turi būti tokios pat, kaip ir / etc / inittab .

Jei norite, galite padaryti Getty spausdinti įdomių dalykų prisijungimo reklamjuostę. Mano pavyzdžiuose turiu sistemos pavadinimą ir spausdintą serijinę liniją. Galite pridėti kitų dalykų: [blockquote

šešėlis = taip] @B Dabartinis (vertinamas tuo metu, kai matomas @B) bps norma. @D Dabartinė data, MM / DD / YY. @L Serijinė linija, prie kurios prijungta "Getty". @S sistemos pavadinimas. @T Dabartinis laikas, HH: MM: SS (24 valandas). @U Šiuo metu pasirašytų vartotojų skaičius. Tai failų / etc / utmp įrašų skaičius, turintis ne nulinį ut_name lauką. @ V VERSION vertės, kaip nurodyta numatytojo failo. Jei norite rodyti vieną "@" simbolį, naudokite "\ @" arba "@@".

Baigę redaguoti / etc / gettydefs , galite patikrinti, ar sintaksė yra teisinga:

linux # getty-c / etc / gettydefs

Įsitikinkite, kad serijos prievadui nėra kito failo getty arba uugetty konfigūracijos, kad jūsų terminalas yra prijungtas prie (pvz., /etc/default/{uu}getty.ttyS arba /etc/conf.{uu}getty.ttyS N ) , nes tai gali trukdyti paleisti Getty terminalą. Pašalinkite tokius prieštaringus failus, jei jie išeina.

Redaguokite savo / etc / inittab failą paleiskite getty serijiniame uoste (pakeisdami teisingą informaciją apie jūsų aplinką - uosto, greitį ir numatytąjį terminalo tipą):

S1: 23: respawn: / sbin / getty ttyS1 DT9600 vt100 Init linux # init q

Šiuo momentu terminalą turėtumėte pamatyti prisijungimo raginimą. Jums gali prireikti grįžti, norint gauti terminalo dėmesį.

Mgetty

"M" reiškia modemą. Ši programa pirmiausia skirta modemams ir nuo 2000 m. Vidurio reikės iš naujo kompiliuoti ją naudoti tekstiniams terminalams (nebent jūs naudosite aparatūros srauto valdymą - ir paprastai reikia rankinio kabelio). Tiesiogiai prijungtų terminalų dokumentacijai rasite vadovą "Tiesioginis": mgetty.texi.

Pažvelkite į paskutines /etc/mgetty/mgetty.config eilutes, kaip konfigūruoti terminalą. Jei nebūsite sakęs "toggle-dtr no", jis manys, kad jūs turite modemą ir nulenkite DTR kontaktą į kompiuterį, veltui bandydami iš naujo nustatyti neegzistuojantį modemą. Priešingai nei kiti gettys, "mgetty" neprisijungs prie terminalo, kol kažkas pateks į bet kurį šio terminalo raktą, taigi pamatysite? jei terminalas yra viršuje arba ps, kol tai įvyks. Įrašai / var / log / mgetty / gali parodyti kelis įspėjamuosius pranešimus, kurie taikomi tik modemams, kuriuos galite ignoruoti.

Štai paprastos eilutės pavyzdys, kurį įterpėte / etc / inittab:

S1: 23: respawn: / sbin / mgetty -r ttyS1