Teksti-terminaalit Linuxissa

14.1 Getty (käytetty / etc / inittab)

Johdatus Getty

Jotta sisäänkirjautumisprosessi ajettaisiin sarjaportin (ja siihen liitetyn päätteen) kanssa, kun tietokone käynnistyy (tai vaihtaa suoritustasoja), getty-komento on sijoitettava / etc / inittab -tiedostoon. Gettyin suorittaminen komentoriviltä saattaa aiheuttaa ongelmia (katso Jos getty suoritetaan komentoriviltä: Ohjelmat pysähtyvät nähdäksesi miksi). Getty GETs TTY (terminaali) menossa. Jokainen päätelaite tarvitsee oman getty-komennonsa. Jokaisessa / etc / inittab-tiedostossa on myös vähintään yksi getty komento konsolille. Etsi tämä ja laita getty-komennot oikeiden päätteiden vieressä. Tämä tiedosto voi sisältää esimerkkejä getty-riveistä tekstipäätteille, joita kommentoidaan, joten sinun tarvitsee vain poistaa kommentit (poista johtava #) ja muuta muutamia argumentteja.

Sallitut argumentit riippuvat siitä, mihin Getty-versioon haluat käyttää:
Kaksi päästä parhaiten suoraan kytkettyihin päätteisiin ovat:

Kaksi gettys parasta dial-in modeemien (välttää suoraan kytkettyjä terminaaleja) ovat:

Helppo käyttää, jos et käytä todellista tekstipäätettä. Useimmat Linux-käyttäjät käyttävät jotain seuraavista:

Linux-jakelu voi olla joko ps_getty tai agetty tekstipäätelaitteille. Jotkut jakelut eivät tarjoa mitään. Valitettavasti he usein vain kutsuvat sitä "getty", joten sinun on ehkä selvitettävä, mistä sinulla on, koska sen jälkeen antamasi argumentit / etc / inittab eroavat toisistaan. Debian käyttää agettyia (util-linux-pakettiin). RedHat ja Fedora käyttivät ps_getty-palvelua, joka on osoitteessa: ps_getty

Viimeisenä keinona selvittää mikä getty sinulla on, voit tarkistaa sen suoritettavan koodin (yleensä / sbin). ps_getty on / etc / gettydefs upotettu tähän koodiin. Voit etsiä sen valitsemalla / sbin ja kirjoittamalla:
strings getty | grep getty
Jos getty on tosiasiassa edellä, se ei johda mitään. Kuitenkin, jos sinulla on agetty kirjoittaminen:
getty-h
pitäisi näyttää vaihtoehdot [-hiLmw].

Jos sinulla ei ole getty-tiedostoa, haluat tarkistaa muut jakelut ja muukalainen ohjelma muuntaa RPM- ja Debian-paketit. Lähdekoodi voidaan ladata Getty-ohjelmistosta.

Jos et käytä modeemin ohjauslinjoja (esimerkiksi jos käytät vain vähimmäismäärää 3 johtimella: lähetys, vastaanotto ja yhteinen signaalin maadoitus), sinun pitäisi antaa getty tietää tämä käyttämällä "paikallista" lippua. Tämän muoto riippuu siitä, mitä getty käytät.

Getty poistuu sisäänkirjautumisen jälkeen (ja voi jälleenmyydä)

Kun kirjaudut sisään, huomaat (käyttämällä "top", "ps -ax" tai "ptree"), että getty-prosessi ei enää käynnisty. Mitä sille tapahtui? Miksi getty käynnistyy uudelleen, jos kuori tapetaan? Tässä miksi.

Kun olet kirjoittanut käyttäjänimesi, getty ottaa sen ja kehottaa kirjautumisohjelmaa kertomaan sen käyttäjänimesi. Getty-prosessi korvataan kirjautumisprosessilla. Sisäänkirjautumisprosessi pyytää salasanasi, tarkistaa sen ja käynnistää minkä tahansa prosessin määritellään salasanatiedostossa. Tämä prosessi on usein bash-kuori. Jos näin on, bash käynnistää ja korvaa kirjautumisprosessin. Huomaa, että yksi prosessi korvaa toisen ja että bash-kuori prosessi alun perin aloitettiin getty-prosessina. Seuraavassa selostetaan tämän seurauksia.

Nyt / etc / inittab-tiedostossa getty on tarkoitus palata uudelleen (uudelleen), jos se tapetaan. Se sanoo niin linjalla, joka kutsuu getty. Mutta jos bash shell (tai kirjautumisprosessi) tapetaan, getty respawns (uudelleen). Miksi? Sekä kirjautumisprosessi että bash ovat korvauksia gettille ja perivät

* Teksti-terminaalin hakuohje

signaaliliitännät, jotka niiden edeltäjät ovat määrittäneet. Itse asiassa, jos noudatat yksityiskohtia, huomaat, että korvausprosessilla on sama prosessin tunnus kuin alkuperäinen prosessi. Siten bash on eräänlainen getty, joka peittää saman prosessin ID-numeron. Jos bash tapetaan, se on aivan kuten getty tapettiin (vaikka getty ei ole enää käynnissä). Tämä johtaa getty-jälleenmyyjään.

Kun kirjaudut ulos, kaikki sarjaportin prosessit tapetaan mukaan lukien bash-kuori. Tämä voi myös tapahtua (jos se on käytössä), jos modeemiin kuuluu pudotus DCD-jännite, jos sarjaporttiin lähetetään hangup -signaali. Joko poistumisprosessi tai pudotus DCD: ssä johtaa Getty-jälleenmyyjään. Yksi voi pakottaa gettyin lunastamaan manuaalisesti bash (tai login) tappamalla k-näppäimen, jne. "Top" tai "kill" -komennolla. Sinun on todennäköisesti tapettava sen signaalin 9 avulla (jota ei voida sivuuttaa).

Jos getty suoritetaan komentoriviltä: Ohjelmat pysähtyvät

Sinun pitäisi normaalisti käyttää gettyia / etc / inittab: stä eikä komentoriviltä, ​​tai jotkin ohjelmat, jotka ovat käynnissä päätelaitteessa, voidaan odottamattomasti keskeyttää (pysäyttää). Tästä syystä (siirry seuraavaan osaan, jos se ei ole sinulle tärkeä). Jos käynnistät getty for say ttyS1: n toisen terminaalin komentoriville, eli tty1, sen tty1 on sen "ohjaava pääte", vaikka varsinainen päätelaite, jota se käyttää, on ttyS1. Niinpä sillä on väärä valvontapääte. Mutta jos se aloitetaan inittab-tiedoston sisällä, se tulee ttyS1: ksi hallintapäätteeksi (oikein).

Vaikka ohjauspäätelaite on väärä, kirjautumistunnus ttyS1: ssä toimii hyvin (koska annat ttyS1: n argumenttina getty: lle). Tavallinen tulo ja lähtö on asetettu ttyS1: een, vaikka ohjausterminaali pysyy tty11: ssä. Muut ohjelmat, jotka suoritetaan ttyS1: ssä, voivat periä tämän tavallisen tulon / lähdön (joka on liitetty ttyS1: een) ja kaikki on kunnossa. Mutta jotkut ohjelmat saattavat tehdä virheen yritettäessä lukea niiden hallitsevasta päätteestä (tty1), joka on väärä. Nyt tty1 voi ajatella, että näitä ohjelmia ajetaan taustalla tty1, joten yritetään lukea tty1: stä (se olisi pitänyt olla ttyS1), jolloin se lopettaa prosessin, joka yritti lukea. (Taustoprosessia ei saa lukea sen ohjaavasta päätteestä.). Saatat nähdä viestin jotain: " [1] + pysähtynyt " ruudulla. Tässä vaiheessa olet jumissa, koska et voi olla vuorovaikutuksessa prosessiin, joka yrittää kommunikoida sinuun väärällä päätteellä. Tietenkin paeta tästä voit mennä toiseen terminaaliin ja tappaa prosessi jne.

agetty (voi olla nimeltään getty)

Esimerkki rivillä / etc / inittab:

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

S1 on peräisin ttyS1: stä. 23 tarkoittaa, että getty suoritetaan ajettaessa tason 2 tai 3 sisään. Respawn tarkoittaa, että jos getty (tai prosessi, joka korvasi sen, kuten bash), tapetaan getty käynnistyy uudelleen (respawn) uudelleen. / sbin / getty on getty-komento. -L tarkoittaa Paikallista (ohittaa modeemin ohjaussignaalit). -h (ei näy esimerkissä) mahdollistaa laitteiston virtauksen hallinnan (sama kuin stty crtscts). 19200 on baudinopeus. ttyS1 tarkoittaa / dev / ttyS1 (COM2 MS-DOS: ssa). vt102 on terminaalin tyyppi ja tämä getty asettaa ympäristömuuttujan TERM tähän arvoon. Ei ole asetustiedostoja. Kirjoita "init q" komentorivillä muokkaamisen jälkeen getty ja sinun pitäisi nähdä kirjautumisen kehote.

Parytysongelmien automaattinen tunnistus

Agetty- ohjelma yrittää automaattisesti havaita päätelaitteen sisällä olevan pariteetin (ei pariteettia). Se ei tue 8-bittisiä datatavuja plus 1-bittinen pariteetti. Katso 8-bittiset datatavut (plus pariteetti). Jos käytät stty- arvoa pariteetin asettamiseksi, agetty poistaa sen automaattisesti, koska se aluksi haluaa pariteettibittiä tulevan läpi ikään kuin se olisi databittiä. Tämä johtuu siitä, että sen täytyy saada viimeinen bitti (mahdollisesti pariteettibitti), kun kirjoitat kirjautumisnimeäsi, jotta se pystyy tunnistamaan automaattisesti pariteetin. Siten jos käytät pariteettia, ota se vain tekstipäätteen sisälle ja anna agetty automaattisesti havaita ja asettaa sen tietokoneelle. Jos päätelaite tukee vastaanotettua pariteettia, kirjautumispyyntö näyttää sekaisin, kunnes kirjoitat jotain, niin että getty voi havaita

pariteetti. Vääristynyt kehotus estää kävijöitä jne. Yrittämättä kirjautua sisään. Se voisi olla juuri sitä mitä haluat.

On joskus ongelma automaattisen havaitsemisen pariteetin kanssa. Tämä tapahtuu, koska kun kirjoitat ensin käyttäjätunnuksesi, agetty käynnistää sisäänkirjautumisohjelman lopettaaksesi kirjautumisen sisään. Valitettavasti kirjautumisohjelma ei pysty havaitsemaan pariteettia, joten jos getty- ohjelma ei onnistunut määrittämään pariteettia, kirjautumistunnus ei voi määrittää se joko. Jos ensimmäinen kirjautumisyritys epäonnistuu, kirjautumisen avulla voit yrittää uudelleen, jne. (Kaikki, joiden pariteettiasetus on väärä). Lopulta useiden epäonnistuneiden kirjautumisyritysten jälkeen (tai aikakatkaisun jälkeen) agetty käynnistyy uudelleen ja käynnistää kirjautumisjärjestykset uudelleen. Kun getty on taas käynnissä, se saattaa pystyä havaitsemaan pariteetin toisessa kokeessa, joten kaikki voi sitten toimia OK.

Väärällä pariteetilla kirjautumisohjelma ei pysty lukemaan oikein kirjoittamaa, etkä voi kirjautua sisään. Jos päätelaitteesi tukee vastaanotettua pariteettia, näet edelleen sekava näyttö. Jos getty ei havaitse pariteettia, / etc / issue -tiedosto syötetään yleensä juuri ennen ennen kehotetta, joten ruudulle voi tulla enemmän sekaisin sanoja.

Miksi et voi havaita pariteettia ensimmäisellä kirjaimella kirjoitettuna? Seuraavassa on esimerkki: Oletetaan, että se havaitsee 8-bittisen tavun, jonka pariteettibitti 0 (suuren luokan bitti) ja pariton määrä 1-bittiä. Mikä pariteetti on se? No, pariton määrä 1 bittiä merkitsee, että se on outoa pariteettia. Mutta se voi olla myös vain 8-bittinen merkki ilman pariteettia. Tällä hetkellä ei ole mitenkään mahdollista päättää, mikä. Mutta toistaiseksi olemme poistaneet mahdollisuuden tasavertaisuuteen. Pariteetin ilmaisu etenee näin ollen eliminointimenetelmällä.

Jos seuraava tavu kirjoitettu on samanlainen kuin ensimmäinen ja myös poistaa vain pariteetin mahdollisuuden, on vielä mahdotonta määrittää pariteettia. Tämä tilanne voi jatkua loputtomiin ja harvinaisissa tapauksissa kirjautuminen epäonnistuu, kunnes vaihdat kirjautumistunnuksesi. Jos agetty löytää paritebittiä 1, se olettaa, että tämä on pariteettibitti eikä 8-bittisen merkin suuri määräbitti. Sen vuoksi oletetaan, että et käytä meta-merkkejä (high bit set) käyttäjänimessäsi (eli että nimesi on ASCII-muodossa).

Yksi voi päästä "kirjautumispiiriin" eri tavoin. Oletetaan, että kirjoitat vain yhden kirjaimen tai kaksi kirjautumistunnistasi ja napsautat sitten paluuta. Jos nämä kirjaimet eivät riitä pariteetin havaitsemiseen, kirjautumiset suoritetaan ennen kuin pariteetti on havaittu. Joskus tämä ongelma ilmenee, jos päätelaite ei ole päällä ja / tai kytketty, kun agetty käynnistyy ensimmäisen kerran.

Jos pysähdytte tähän "sisäänkirjautumispiiriin", se ulospääsy on paluupainiketta useita kertoja, kunnes saat getty-kirjautumisviestin. Toinen tapa on vain odottaa minuutti tai aikaa aikakatkaisua varten. Tällöin getty-ohjelma käynnistyy getty-ohjelmalla ja voit yrittää uudelleen kirjautua sisään.

8-bittiset datatavut (plus pariteetti)

Valitettavasti agetty ei pysty tunnistamaan tätä pariteettia. Vuoden 1999 lopulla sillä ei ole mahdollisuutta poistaa pariteetin automaattinen tunnistus ja siten havaita virheellinen pariteetti. Tuloksena on, että kirjautumisprosessi sekoittuu ja pariteetti asetetaan väärin. Näin ollen ei näytä olevan mahdollista yrittää käyttää 8-bittisiä datatavuja pariteetilla.

getty (osa getty_ps)

(Suurin osa tästä on Greg Hankinsin vanhasta sarjakuvauksesta)
Tämän getty-tiedoston täytyy syöttää tietueet asetustiedostoon ja lisätä merkinnän / etc / inittab-tiedostoon . Seuraavassa on joitain esimerkkejä käyttötarkoituksestasi, jota asetit asetustiedostoon / etc / gettydefs .

# 38400 bps Dumb Terminal-merkintä DT38400 # B38400 CS8 CLOCAL # B38400 SANE -ISTRIP CLOCAL # @ S @L sisäänkirjautuminen: # DT38400 # 19200 bps Dumb Terminal-merkintä DT19200 # B19200 CS8 CLOCAL # B19200 SANE -ISTRIP CLOCAL # # DT19200 # 9600 bittiä Dumb Terminal-merkintä DT9600 # B9600 CS8 CLOCAL # B9600 SANE -ISTRIP CLOCAL # @ S @L sisäänkirjautuminen: # DT9600

Huomaa, että DT38400, DT19200 jne. Ovat vain tarroja ja niiden on oltava samat kuin / etc / inittab .

Jos haluat, voit tehdä getty tulostaa mielenkiintoisia asioita kirjautumissuunnisteessa. Esimerkkeisseni on järjestelmän nimi ja sarjaportti tulostettu. Voit lisätä muita asioita: [blockquote

sävy = yes] @B Nykyinen (arvioitu ajankohtana, jolloin @B näkyy) bps-nopeus. @D Nykyinen päivämäärä, kk / pv / vuosi. @L Sarjaportti, johon getty on liitetty. @S Järjestelmän nimi. @T Nykyinen aika, HH: MM: SS (24 tuntia). @U Nykyisin kirjautuneiden käyttäjien määrä. Tämä on määrä / etc / utmp -tiedostojen määrä, jolla on ei-null ut_name-kenttä. @V VERSION-arvo, joka on annettu oletusasetustiedostossa. Jos haluat näyttää yhden "@" -merkin, käytä joko "\ @" tai "@@".

Kun olet valmis / etc / gettydefs , voit varmistaa, että syntaksi on oikea:

linux # getty -c / etc / gettydefs

Varmista, että sarjaporttiin, johon päätteesi on kiinnitetty, ei ole muita getty- tai uugetty-määritystiedostoja , kuten ( /etc/default/{uu}getty.ttyS N tai /etc/conf.{uu}getty.ttyS N ) , koska tämä todennäköisesti häiritsee käynnissä olevan gettin toimintaa terminaalissa. Poista tällaiset ristiriitaiset tiedostot, jos ne poistuvat.

Muokkaa / etc / inittab -tiedostoa getty : in suorittamiseksi sarjaporttiin (korvaamalla oikeat tiedot ympäristölle - portti, nopeus ja oletusterminaalin tyyppi):

S1: 23: respawn: / sbin / getty ttyS1 DT9600 vt100 sen sisällä linux # init q

Tässä vaiheessa sinun pitäisi nähdä pääkäyttäjän sisäänkirjautumiskysymys. Sinun on ehkä lyödä paluuta saadaksesi päätelaitteen huomion.

mgetty

"M" tarkoittaa modeemia. Tämä ohjelma on ensisijaisesti modeemeja ja vuoden 2000 puolivälistä alkaen se tarvitsee kääntämistä käyttämään sitä tekstipäätteille (ellet käytä laitteiston virtauksen säätöä - ja se vaatii yleensä käsityönä olevan kaapelin). Suoraan liitettyjen päätelaitteiden dokumentaatiota on ohjeen "Suora" -osassa: mgetty.texi.

Katso /etc/mgetty/mgetty.config : n viimeiset rivit esimerkkiä sen määrittämisestä päätelaitteelle. Ellei sanota "toggle-dtr no", se ajattelee, että sinulla on modeemi ja pudota (kieltäydytään) DTR-tappio tietokoneella turhaan yrittääksesi nollata olemattoman modeemin. Toisin kuin muut gettys, mgetty ei liity terminaaliin, ennen kuin joku lyö minkä tahansa terminaalin avaimen, joten näet sen? terminaalin päälle tai ps, kunnes tämä tapahtuu. Lokissa / var / log / mgetty / saattaa näkyä muutamia varoitusviestejä, jotka koskevat vain modeemeja, joita voit jättää huomiotta.

Tässä on esimerkki yksinkertaisesta rivistä, jota laitat / etc / inittab:

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