Tekst-terminas op Linux

14.1 Getty (brûkt yn / etc / inittab)

Ynlieding foar Getty

Om in ynloggeproses op in serial port te krijen (en it terminal befetsje) as de kompjûter begjint (of skeakelleaze nivo's) moat in kommando getty yn de / etc / inittab-bestân ynsteld wurde. Running getty fan 'e kommandorigel kin problemen feroarsaakje (sjoch As getty út kommando rinne: Programs krije stoppe om te sjen wêrom). Getty GETs in TTY (in terminal). Elk terminal moat syn eigen kommando getty. Der is ek minstens ien kommando getty foar de konsole yn elke / etc / inittab-bestân. Sykje dit en set de getty kommando's foar de echte terminen neist it. Dizze triem kin problemen getty-linen befetsje foar tekst-terminalen dy't kommentare binne dat jo alles nedich binne om har te fertsjinjen (fuorthelje # te ferwiderjen) en in pear arguminten te feroarjen.

De arguminten dy't tagelyk tastien binne ôfhinklik fan hokker getty jo brûke:
Twa gatjes bêste foar direkt ferbûne terminen binne:

Twa gatjes beste foar dial-in modems (foarkomme foar direkt ferbûne terminen) binne:

In ienfâldige gettys brûke as jo gjin echte tekst-terminal brûke. De measte Linux brûkers brûke ien fan dy op har monitor:

Jo Linux-distribúsje kin mei ps_getty of agetty foar tekst-terminals komme. Guon distribúsje leverje gjin. Spitigernôch neame se faak it "getty" neame, sadat jo miskien moatte fêststelle hokker ien jo hawwe sûnt de arguminten dy't jo hawwe nei dit / etc / inittab ferskille. Debian brûkt agetty (yn it pakket util-linux). RedHat en Fedora brûkten ps_getty dat is by: ps_getty

As lêste plak om te besykjen hokker getty jo hawwe, kinne jo de útfierbere koade kontrolearje (meast yn / sbin). ps_getty hat / etc / gettydefs yn dizze koade ynsteld. Om te sykjen, gean nei / sbin en type:
strings getty | grep getty
As getty op 'e hichte is, dan sil it boppesteande neat wurde. As jo ​​lykwols agly typearje:
getty -h
de opsjes sjen litte [-hiLmw].

As jo ​​de getty hawwe, dan wolle jo oare distribúsjes kontrolearje en it aliasprogramma om konvertearje tusken RPM- en Debian-pakketten. De boarne koade kin ynladen wurde fan Getty Software.

As jo ​​gjin modem-kontrolearrings brûke (bygelyks as jo allinich it minimum fan 3 dirigers brûke: ferstjoere, ûntfange en gewoane sinjaal grûn) moatte jo Getty dat witte troch in "lokale" flagge te brûken. It formaat hinget hingjen op hokker getty jo brûke.

Getty ferwacht nei login (en kin respawn)

Neidat jo ynlogge, sille jo fine (troch "top", "ps -ax" of "ptree") te brûken, dat it gettyproses net mear laat. Wat barde dit? Wêrom begjint Getty wer op as jo shell fermoarde is? Hjir is it wêrom.

Nei't jo jo brûkersnamme ynfiere, nimt Getty it en neamt it ynlochprogramma dat jo brûkersnamme fertelt. It gettyproses wurdt ferfongen troch it ynlochproses. It ynlochproses freget jo foar jo wachtwurd, kontrolearret it en begjint wat proses ynfierd is yn jo wachtwurd bestân. Dit proses is faak de bash-shell. As dat sa, begjint de akseptest en ferfangt. Tink derom dat ien proses in oare ferfangt en dat it bash-shell-proses oarspronklik as it getty-proses begon wie. De gefolgen dêrfan wurde hjirûnder ferklearre.

No yn 'e / etc / inittab-triem, wurdt getty neamd (werombetelje) as it fermoarde is. It seit sa op 'e line dy't Getty neamt. Mar as de bash-shell (of it oanmeldproses) fermoarde is, getty responds (opnij). Wêrom? No, sawol de ynlochproses en bash binne ferfangingen foar getty en erben

* Teksttiid-hoe-nei-yndeks

de sinjale ferbiningen fêstigje troch har foargongers. Yn feiten as jo de details befeiligje, sjoch jo dat it ferfetsproses de deselde proseduere ID hat as it oarspronklike proses. Sa bash is soarte fan getty yn ferklaaid mei deselde proses ID-nûmer. As bash is fermoardzje is it krekt lykas getty waard fermoarde (alhoewol't getty net mear rint). Dit resultaat yn getty respawning.

As jo ​​útskriuwe, sille alle prozes op dy serial port wurde mei de bash shell fermoarde. Dit kin ek barre (as it ynskeakele is) as in hingupssignal nei de serial poarte stjoerd wurdt troch in drop fan DCD-spanning troch it modem. De logout of drop yn DCD sil resultaat wurde yn getty respawning. Men kin Getty oanmeitsje troch manuell te deadzjen (bgl. Ynloggen) troch de k te kloppen, ensfh. Yn 'e "top" of mei it "kill" kommando. Jo sille wierskynlik it mei it sinjaal 9 (dat kin net negearre wurde) te deadzjen.

As getty út kommando-rigels rint: Programs wurde stoppe

Jo moatte normaal getty fan binnen / etc / inittab útfiere en net fan 'e kommando-rigel of oars kinne guon programma' s op 'e terminal kinne unferwachte blokkearre wurde (stoppe). Hjirom is it (fierder nei de folgjende seksje as de waarom net foar jo is). As jo ​​begjinne mei Getty foar sizze ttyS1 fan 'e kommandorigel fan in oar terminal, sizje tty1, dan sil it tty1 as syn "kontrolearjende terminal" ha, hoewol de eigentlike terminal dat rint is ttyS1. Sa hat it de ferkearde kontrolearjende terminal. Mar as it yn 'e ynittab bestân begjint dan sil it ttyS1 as kontrolearjende terminal (korrekt) hawwe.

Hoewol it kontrolearjen terminal is ferkeard, it oanmelden by ttyS1 wurket goed (sûnt jo ttyS1 as argument foar getty) joegen. De standertynfier en output binne ynsteld nei ttyS1, alhoewol it kontrolearjende terminal tyt11 bliuwt. Oare programma 's dy' t op ttyS1 rune kinne dizze standertynfier / útfier ynfine (dy is ferbûn mei ttyS1) en alles is OK. Mar guon programma's kinne de flater meitsje om te probearjen fan har kontrolearjende terminal (tty1) dy't ferkeard is. No kin tty1 tinke dat dizze programma's op 'e eftergrûn binne troch tty1 te rinnen, sadat in besykjen fan tty1 te lêzen hat (it soe ttyS1 wurde litten) yn it stopsjen fan it proses dat probearre te lêzen. (In eftergrûnproses is net tastien om te lêzen fan syn kontrolearjende terminal.). Jo kinne in berjocht sjogge wat: " [1] + stopt " op it skerm. Op dit stuit binne jo stutsen sûnt jo net mei in proses ynteraksje kinne dat jo besykje te kommunisearjen fia de ferkearde terminal. Natuurlijk om dit te ûntkommen kinne jo nei in oar terminal gean en it proses deadzje, ensfh.

agetty (mei namme Getty)

In foarbyldline yn / etc / inittab:

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

S1 is fan ttyS1. 23 betsjuttet dat getty by it rinnen fan rune nivo's 2 of 3. respawn betsjut dat as getty (of in proses dat ferfetset as bash) is fermoarde, getty automatysk start (respawn) wer. / sbin / getty is it getty kommando. De -L betsjut local (ignorant modem control signals). -h (net yn it foarbyld sjen litte) jout de ferdrukking fan hardware (lykas stty crtscts). 19200 is de baardrate. ttyS1 betsjut / dev / ttyS1 (COM2 yn MS-DOS). vt102 is it type terminal en dizze getty set de omjouwingsfariabele TERM op dizze wearde. Der binne gjin konfiguraasje bestannen. Typ "init q" op 'e kommandorigel nei it bewurkjen fan getty en jo moatte in oanmelding prompt sjen.

Agetty's auto-deteksje fan parityproblemen

It agi- programma sil besykje om de parityt yn 'e terminal te selektearjen (lykas gjin parity). It stipet 8-bit data bytes plus 1-bit parity. Sjoch 8-bit data bytes (plus parity). As jo stty brûke om parity te setten, sil automatysk automatysk it ûnthâlde, om't it earst de parityf bitume wol as as it in bit is. Dit is om't it de lêste bit (mooglik in parityke bytsje) krije moatst as jo jo login-namme ynstekke sadat it parityt automatysk fynt. As jo ​​parity brûke, ynskeakelje dan allinich yn 'e tekst-terminal en lit automatysk it automatysk ûntdekke en set it op de kompjûter. As jo ​​terminal de krêftige getal stipet, sil de ynloggeheak blokkeard wurde oant jo inkele soart soene kinne soene dat Getty it kin fine

parity. De yndieling fan 'e ferwidering sil ferstjoeren fan besikers, ensfh. Fan besykje om te ynloggen Dat soe krekt wêze wat jo wolle.

Der is somtiden in probleem mei auto-deteksje fan parity. Dit sil wêze, omdat jo nei jo log- yndeksamme begjinne, agiest begjint it oanmeldprogramma om jo ynloggen te foltôgjen. Lees docht it ynloggenprogramma de pariteit net fêststelle as it getty- programma de parityt net fêststeld en it oanmelden kin net bepale it ek. As it earste oanmakprobleem ferdwynt, dan sil jo ynloggen litte jo it opnij probearje, ensfh. (Allegear mei de parityf set fal). Uteinlik, nei in oantal mislearre besykjen om yn te logjen (of nei in tiidrit) agiest wer op 'e nij begjinne en de login-sesjes wer opnij begjinne. Ien kear gie it wer gelyk, it kin de parityt op 'e twadde besykje te besykjen sadat alles alles goed wurket.

Mei ferkearde parityt kin it oanmeldprogramma net goed lêzen lêze wat jo typearje en jo kinne net oanmeld wêze. As jo ​​terminal it geteare parity stipet, sille jo trochgean sille in skandaal skerm sjen. As getty it parityf net foltôgest in triem / etc / probleem wurdt normaal foar it skerm foar it skerm datum foarkomt, dan kinne ferskriklike wurden op it skerm ferskine.

Wêrom kin de parityt net identifisearje troch de earste letter te typen? Hjir is in foarbyld: Sjoch it in 8-bitbyte mei syn parity bit 0 (hege bestelling) en mei in odd oantal 1-bit. Hokker parity is it? No, it odd oantal fan 1 bits betsjut dat it geweldige parity is. Mar it kin ek gewoan in 8-bit karakter wêze mei gjin parity. Der is gjin wize sa fier om te bepalen hokker. Mar oant no hawwe wy de mooglikheid fan sels parityf bewarre. De ûntdekking fan parityt giet dêrtroch troch in proses fan eliminaasje.

As it folgjende byte typearre is as it earste en liket allinich de mooglikheid fan sels parityt ôf te sluten, it is noch altyd net mooglik om parityt te bepalen. Dizze situaasje kin ûnbefêstigje bliuwe en yn seldsume gefallen wurdt logins mislearre oant jo jo login-namme feroarje. As agiest fynt in parityf bit fan 1, sille jo der fan út wêze dat dit in parityklik is en net in hege bestelling bit fan in 8-bit karakter. It soarget derfoar dat jo meta-tekens (heechbehearder) brûke yn jo brûkersnamme (dus dat jo namme is yn ASCII).

Men kin op ferskate manieren yn in "oanmelding" komme. Tink derom dat jo allinich in inkele letter of twa foar jo loginnamme ynfiere en dan weromkomme. As dizze brieven net genôch binne foar parity detection, dan wurdt oanmeld dien, foardat parityt fûn is. Somt dit probleem bart as jo de terminal net hawwe en / of ferbine as agetty earst begjint.

As jo ​​yn dizze "oanmelding loop" stean bliuwe, dan is it weromreis-kaaien meardere kearen as jo de getty login prompt krije. In oare manier is om gewoan in minút te wachtsjen foar in tiidlim. Dan wurde de getty login prompt op it skerm set troch it gettyprogramma en jo kinne besykje nochris om yn te loggen.

8-bit data bytes (plus parity)

Helaas, agetty kin dizze parityt net fêststelle. Ein 1999 hat it gjin opsje foar it útskriuwen fan de auto-fekânsje fan parityt en sil dêrmei falske parityt ûntdekke. It gefolch is dat it oanmeldproses oerlevere wurde sil en parityt ferkeard fêststeld wurde. Sa kin it net te dwaan wêze om te probearjen mei 8-bit data bytes mei parity.

getty (diel fan getty_ps)

(Meast fan dit is fan âlde Serial-HOWTO troch Greg Hankins)
Foar dizze getty moat men beide ynfoegingen yn in konfiguraasjebestân sette en in ynfier taheakje yn / etc / inittab . Hjir binne in pear ynstellings foar brûkers foar jo terminal dy't jo ynsetten yn de konfiguraasjetriem / etc / gettydefs .

# 38400 bps Dumb Terminal-Eintrag DT38400 # B38400 CS8 CLOCAL # B38400 SANE -ISTRIP CLOCAL # @ S @L login: # DT38400 # 19200 bps Dumb Terminal-Eintrag DT19200 # B19200 CS8 CLOCAL # B19200 SINNE -ISTRIP CLOCAL # @ S @L login: # DT19200 # 9600 bps Dumme terminal yntegre DT9600 # B9600 CS8 CLOCAL # B9600 SANE -ISTRIP CLOCAL # @ S @L login: # DT9600

Taljochting: de DT38400, DT19200, ensfh. Binne allinich labels en moatte itselde wêze dat jo brûke yn / etc / inittab .

As jo ​​wolle, kinne jo Getty print interessante dingen meitsje yn 'e brûkersbanner . Yn myn foarbylden haw ik de systembus en de serieare linen printe. Jo kinne oare dingen taheakje: [blockquote

shade = ja] @B De aktuele (beoardielde op 'e tiid dat de @B sjoen wurdt) bps-rapport. @D De aktuele datum, yn MM / DD / YY. @L De serieare rigel dêr't getty oan is. @S De systeemnamme. @T De aktuele tiid, yn HH: MM: SS (24-oere). @U It oantal oanmelde op brûkers. Dit is in getal fan it oantal yngongen yn de / etc / utmp-triem dy't in net-null ut_name fjild hawwe. @V De wearde fan VERSION, lykas yn de standert standert bestiet. Om ien inkele '@' -type te sjen, brûk dan '\ @' of '@@'.

As jo ​​bewurking binne / etc / gettydefs kinne jo befêstigje dat de syntaksis korrekt is troch te dwaan:

linux # getty -c / etc / gettydefs

Soargje derfoar dat der gjin oare getty of uugetty config triem foar de serial poarte is dat jo terminal befettet sa as ( /etc/default/{uu}getty.ttyS N of /etc/conf.{uu}getty.ttyS N ) , sa sil it wierskynlik wêze dat it gryt op in terminal is. Ferûngelokke kontroleare bestannen as se útgeane.

Wizigje jo / etc / inittab triem om Getty op 'e serial port te fieren ( ynfolje yn de goeie ynformaasje foar jo omjouwing - haven, fluch, en standert terminaltype):

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

Op dit punt moatte jo in ynlochkommando op jo terminal sjen. Jo moatte miskien weromkomme om de oandacht fan 'e terminal te krijen.

mgetty

De "m" stiet foar modem. Dit programma is benammen foar modems en as fan mids 2000 sil it rekompolearjen freegje om it te brûken foar text-terminals (as jo gjin hardware-streamkontrôle brûke - en dat meast in handbakkabel nedich is). Foar de dokumintaasje foar direkte ferbining mei de terminalen sjoch it "Direkte" diel fan it hantlieding: mgetty.texi.

Sjoch op de lêste rigels fan /etc/mgetty/mgetty.config foar in foarbyld fan it konfiguraasje foar in terminal. As jo ​​sizze dat jo "toggle-dtr no" sizze, sille jo tinke dat jo in modem en drop (ferneatigje) it DTR-pinsje op 'e PC yn in fergese besykjen om it net-besteand modem werom te setten. Yn tsjinstelling mei oare gettys, mgetty sil himsels net oan in terminal befetsje, oant ien ien elke kaai fan dat terminal befettet, dus jo sjochst? foar it terminal yn boppe of ps oant dit bart. De logs yn / var / log / mgetty / kinne in pear warskôgings sjen litte dy't allinich tapast binne foar modems dy't jo mislearre.

Hjir is in foarbyld fan de ienfâldige line dy jo yn / etc / inittab sette:

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