Tekst-Terminalet në Linux

14.1 Getty (përdoret në / etc / inittab)

Hyrje në Getty

Në mënyrë që të kryhet një proces i hyrjes në një port serial (dhe terminali i lidhur me të) kur kompjuteri të niset (ose ndizet nivelet e drejtimit), një komandë getty duhet të futet në skedarin / etc / inittab. Running getty nga rreshti i komandës mund të shkaktojë probleme (shih Nëse getty drejtuar nga rreshti i komandës: Programet ndalet për të parë pse). Getty GET një TTY (një terminal) që shkon. Çdo terminal ka nevojë për komandën e vet të Getty. Ka gjithashtu të paktën një komandë getty për konsolin në çdo skedar / etc / inittab. Gjeni këtë dhe vendosni komandat getty për terminalet e vërtetë pranë tij. Ky skedar mund të përmbajë mostër getty për terminalet e tekstit që janë komentuar në mënyrë që të gjithë ju duhet të bëni është të mos i komplotoni ato (hiqni udhëheqësin #) dhe të ndryshoni disa argumente.

Argumentet që janë të lejuara varen nga cilën getty ju përdorni:
Dy gettys më të mira për terminalet e lidhur direkt janë:

Dy gettys më të mirë për dial-in modem (shmangur për terminalet e lidhur direkt) janë:

Gettys thjeshtë për të përdorur në qoftë se ju nuk përdorni një tekst të vërtetë-terminal. Shumica e përdoruesve të Linux përdorin një nga këto në monitorimin e tyre:

Shpërndarja juaj e Linux mund të vijë me ose ps_getty ose agetty për terminalet e teksteve. Disa shpërndarje nuk ofrojnë as. Për fat të keq, ata shpesh e quajnë atë "getty" kështu që ju mund të keni nevojë të përcaktoni se cilën keni, pasi që argumentet që vendosni pas tij / etc / inittab ndryshojnë. Debian përdor agetty (në paketën util-linux). RedHat dhe Fedora përdorën ps_getty e cila është në: ps_getty

Si një mjet i fundit për të provuar të përcaktuar se cilën getty keni, mund të kontrolloni kodin e ekzekutueshëm (zakonisht në / sbin). ps_getty ka / etc / gettydefs ngulitur në këtë kod. Për ta kërkuar atë, shkoni te / sbin dhe shkruani:
vargjet getty | grep getty
Nëse Getty është në fakt agetty e mësipërme do të rezultojë në asgjë. Megjithatë, nëse ju keni shtypur agetty:
getty-h
duhet të tregojë opsionet [-hiLmw].

Nëse ju nuk keni getty doni të kontrolloni shpërndarjet e tjera dhe programin e huaj për të kthyer në mes RPM dhe pakove Debian. Kodi burimor mund të shkarkohet nga Getty Software.

Nëse nuk po përdorni linjat e kontrollit modem (për shembull nëse përdorni vetëm numrin minimal prej 3 përcjellësve: transmetoni, merrni dhe tokën e sinjalit të përbashkët) duhet ta dini getty këtë duke përdorur një flamur "lokal". Formati i kësaj varet nga se cilën getty përdor.

Getty del nga pas identifikimit (dhe mund të ripërtërihet)

Pas hyrjes ju do të vëreni (duke përdorur "top", "ps -ax" ose "ptree") që procesi getty nuk funksionon më. Çfarë ndodhi me të? Pse getty rifillon përsëri nëse shell juaj është vrarë? Ja pse.

Pasi të shkruani emrin e përdoruesit, getty e merr atë dhe e quan programin e identifikimit duke i thënë atij emrin tuaj të përdoruesit. Procesi getty zëvendësohet nga procesi i identifikimit. Procesi i identifikimit kërkon fjalëkalimin tuaj, kontrollon atë dhe fillon çfarëdo procesi që është specifikuar në dosjen tuaj të fjalëkalimit. Ky proces është shpesh shell bash. Nëse është kështu, bash fillon dhe zëvendëson procesin e identifikimit. Vini re se një proces zëvendëson një tjetër dhe se procesi bash shell filloi fillimisht si proces getty. Implikimet e kësaj do të shpjegohen më poshtë.

Tani në skedarin / etc / inittab, getty duhet të rifillojë (restart) nëse vritet. Ajo thotë kështu në linjë që thërret getty. Por nëse bash shell (ose procesi i identifikimit) është vrarë, getty respawns (restarts). Pse? E pra, të dy procesi i identifikimit dhe bash janë zëvendësime për getty dhe trashëgiminë

* Terminali i tekstit Si-Për Indeksi

lidhjet e sinjaleve vendosen nga paraardhësit e tyre. Në fakt, nëse vëzhgoni detajet do të vini re se procesi i zëvendësimit do të ketë të njëjtin ID të procesit si procesi origjinal. Kështu bash është lloj i getty në maskim me të njëjtin numër ID të procesit. Nëse bash është vrarë është ashtu si getty u vra (edhe pse getty nuk po kandidon më). Kjo rezulton në ripërtëritje të getty.

Kur një logout, të gjitha proceset në atë port serial janë vrarë duke përfshirë edhe shell bash. Kjo gjithashtu mund të ndodhë (nëse aktivizohet) nëse një sinjal hangup është dërguar në portin serial me një rënie të tensionit DCD nga modemi. Ose logout ose rënie në DCD do të rezultojë në respawning getty. Dikush mund ta detyrojë Getty-in të ripërtërijë duke vrarë bash (ose hyrje) me dorë duke shtypur çelësin k, etj, ndërsa në "krye" ose me komandën "vrasin". Ju ka gjasa të keni nevojë për të vrarë atë me sinjal 9 (i cili nuk mund të injorohet).

Nëse getty të drejtuar nga rreshti i komandës: Programet ndalet

Ju duhet normalisht të ekzekutoni getty nga brenda / etc / inittab dhe jo nga rreshti i komandës ose ndryshe disa programe që operojnë në terminal mund të pezullohen papritmas (ndaluar). Ja pse (kaloni në seksionin tjetër nëse pse nuk është e rëndësishme për ju). Nëse filloni getty për të thënë ttyS1 nga rreshti i komandës së një terminali tjetër, thoni tty1, atëherë do të ketë tty1 si "terminali kontrollues" i tij, edhe pse terminali aktual në të cilin ndodhet është ttyS1. Kështu ka terminalin e gabuar kontrollues. Por nëse ajo fillon brenda skedarit inittab atëherë do të ketë ttyS1 si terminal kontrollues (korrekt).

Edhe pse terminali kontrollues është i gabuar, hyrja në ttyS1 punon mirë (pasi që i keni dhënë ttyS1 si argument për getty). Hyrja dhe dalja standarde janë vendosur në ttyS1 edhe pse terminali kontrollues mbetet tty11. Programet e tjera të drejtuar në ttyS1 mund të trashëgojnë këtë hyrje / dalje standarde (e cila është e lidhur me ttyS1) dhe gjithçka është në rregull. Por disa programe mund të bëjnë gabimin e përpjekjes për të lexuar nga terminali i tyre kontrollues (tty1) i cili është i gabuar. Tani tty1 mund të mendojnë se këto programe po drejtohen në sfond nga tty1 kështu që një përpjekje për të lexuar nga tty1 (duhet të ketë qenë ttyS1) rezulton në ndalimin e procesit që u përpoq të lexonte. (Procesi i sfondit nuk lejohet të lexohet nga terminali i tij kontrollues.). Ju mund të shihni një mesazh diçka si: " [1] + Ndalo " në ekran. Në këtë pikë ju jeni të mbërthyer pasi nuk mund të ndërveproheni me një proces që po përpiqet të komunikojë me ju nëpërmjet terminalit të gabuar. Sigurisht që të ikni nga kjo mund të shkoni në një terminal tjetër dhe të vrisni procesin, etj.

agetty (mund të quhet getty)

Një shembull në / etc / inittab:

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

S1 është nga ttyS1. 23 do të thotë që getty është drejtuar pas futjes së niveleve 2 ose 3. Respawn do të thotë që nëse getty (ose një proces që zëvendëson atë si bash) vritet, getty automatikisht do të fillojë përsëri (respawn). / sbin / getty është komanda getty. -L do të thotë Lokale (injoroni sinjalet e kontrollit modem). -h (nuk tregohet në shembull) mundëson kontrollin e rrjedhjes së harduerit (njësoj si crtscts stty). 19200 është norma e baudit. ttyS1 do të thotë / dev / ttyS1 (COM2 në MS-DOS). vt102 është lloji i terminalit dhe ky getty do të vendosë variablin mjedisor TERM në këtë vlerë. Nuk ka skedarë konfigurimi. Lloji "init q" në rreshtin e komandës pas redaktimit të getty dhe ju duhet të shihni një hyrje të shpejtë.

Zbulimi automatik i problemeve të barazisë

Programi agetty do të përpiqet të zbulojë automatikisht paritetin e vendosur brenda terminalit (duke përfshirë pa barazi). Ai nuk mbështet formën e të dhënave me 8 bit plus paritetin 1-bit. Shikoni bytes 8-bit të të dhënave (plus barazi). Nëse përdorni stty për të vendosur barazi, agetty automatikisht do ta ndreqë atë pasi që fillimisht dëshiron që paketa e barazimit të vijë në të, sikur të ishte një bit i të dhënave. Kjo është për shkak se ajo ka nevojë për të marrë bit e fundit (ndoshta një bit pariteti) si ju shkruani emrin tuaj login-në mënyrë që ajo mund të auto-zbuluar barazi. Pra, nëse përdorni paritetin, aktivizoni atë vetëm brenda terminalit të teksteve dhe lejeni ta zbulojnë automatikisht dhe ta vendosin atë në kompjuter. Nëse terminali juaj mbështet parimin e marrë, hyrja e hyrjes do të duket e ngatërruar derisa të shkruani diçka në mënyrë që getty të mund të zbulojë

barazi. Shkelja e ngatërruar do të pengojë vizitorët, etj. Nga përpjekja për t'u identifikuar. Kjo mund të jetë pikërisht ajo që ju dëshironi.

Ka ndonjëherë një problem me zbulimin automatik të barazisë. Kjo ndodh pasi pasi ta shtypni emrin tuaj të parë, agetty fillon programin e identifikimit për të përfunduar regjistrimin. Për fat të keq, programi i identifikimit nuk mund të zbulojë barazinë kështu që nëse programi getty nuk ka arritur të përcaktojë barazinë, atëherë identifikimi nuk do të jetë në gjendje të përcaktojë ose. Nëse tentativa e parë e identifikimit dështon, hyrja do t'ju lejojë të provoni përsëri, etj. (Të gjitha me paritet të vendosur gabim). Përfundimisht, pas një numri përpjekjesh të dështuara për t'u identifikuar (ose pas një periudhe kohore), agetty do të fillojë përsëri dhe të fillojë sekuencat e identifikimit përsëri. Sapo getty po kandidon përsëri, mund të jetë në gjendje të zbulojë barazinë në provën e dytë, kështu që gjithçka mund të funksionojë mirë.

Me barazim të gabuar, programi i identifikimit nuk mund të lexojë saktë se çfarë shkruani dhe nuk mund të hyni. Nëse terminali juaj mbështet parimin e marrë, do të vazhdoni të shihni një ekran të ngatërruar. Nëse getty nuk arrin të zbulojë paritetin, një skedar / etc / issue zakonisht dergohet në ekran vetëm para se të jetë e shpejtë, kështu që në ekran mund të shfaqen fjalë më të ngatërruara.

Pse nuk mund të zbulohet më mirë pariteti me shkronjën e parë të shtypur? Ja një shembull: Supozoni se zbulon një byte 8-bit me bitin e barazisë 0 (bit me rend të lartë) dhe me një numër të rastësishëm 1-bitësh. Çfarë pariteti është ajo? E pra, numri i rastësishëm i 1 bitëve nënkupton se është barazi e çuditshme. Por kjo gjithashtu mund të jetë thjesht një karakter 8-bit pa barazi. Nuk ka asnjë mënyrë deri tani për të përcaktuar se cili. Por deri më tani kemi eliminuar mundësinë e barazisë madje. Zbulimi i barazisë rrjedh kështu nga një proces i eliminimit.

Nëse byte tjetër i shtypur është i ngjashëm me atë të parë dhe gjithashtu eliminon vetëm mundësinë e barazisë madje, është ende e pamundur përcaktimi i barazisë. Kjo situatë mund të vazhdojë pafundësisht dhe në raste të rralla identifikimi do të dështojë derisa të ndryshoni emrin tuaj të identifikimit. Nëse agetty gjen një bit pariteti 1, ai do të supozojë se ky është një bit i barazisë dhe jo një bit me rend të lartë të një karakteri 8-bit. Pra, supozon që ju nuk përdorni meta-karaktere (set me bit të lartë) në emrin tuaj të përdoruesit (dmth. Se emri juaj është në ASCII).

Dikush mund të hyjë në një "loop login" në mënyra të ndryshme. Supozoni që të shkruani vetëm një letër të vetme ose dy për emrin tuaj të identifikimit dhe pastaj goditni kthimin. Nëse këto letra nuk janë të mjaftueshme për zbulimin e barazisë, atëherë identifikimi shkon përpara se pariteti të jetë zbuluar. Ndonjëherë ky problem ndodh nëse nuk e keni terminalin dhe / ose nuk jeni të lidhur kur fillon agetty parë.

Nëse ju merrni mbërthyer në këtë "loop login" një mënyrë për të dalë nga ajo është që të goditur çelësin e kthimit disa herë derisa të merrni prompt login getty. Një mënyrë tjetër është që të prisni vetëm një minutë për një kohë të gjatë. Pastaj do të vendoset getty login prompt në ekranin e programit getty dhe mund të provoni përsëri për tu identifikuar.

Bytes 8-bit të të dhënave (plus barazi)

Për fat të keq, agetty nuk mund të zbulojë këtë barazi. Që nga fundi i vitit 1999 nuk ka mundësi për të çaktivizuar zbulimin automatik të barazisë dhe kështu do të zbulojë barazi të pasaktë. Rezultati është se procesi i identifikimit do të ngatërrohet dhe pariteti do të jetë i gabuar. Kështu që nuk duket e mundshme që të përpiqemi të përdorim bytes të të dhënave 8-bit me barazi.

getty (pjesë e getty_ps)

(Shumica e kësaj është nga Serial-HOWTO e vjetër nga Greg Hankins)
Për këtë getty duhet të vendosni të hyra në një skedar konfigurimi dhe të shtoni një hyrje në / etc / inittab . Këtu janë disa hyrje të shembullit që duhet përdorur për terminalin tuaj që ju vendosni në skedarin e konfigurimit / etc / gettydefs .

# 38400 bps Dumb hyrja e terminalit DT38400 # B38400 CS8 CLOCAL # B38400 SANE -ISTRIP CLOCAL # @ S @ L login: # DT38400 # 19200 bps Dumb hyrja e terminalit DT19200 # B19200 CS8 CLOCAL # B19200 SANE -ISTRIP CLOCAL # @ S @L login: # DT19200 # 9600 bps Dumb Terminal hyrje DT9600 # B9600 CS8 CLOCAL # B9600 SANE -ISTRIP CLOCAL # @ S @ L login: # DT9600

Vini re se DT38400, DT19200, etj janë vetëm etiketat dhe duhet të jenë të njëjta që përdorni në / etc / inittab .

Nëse dëshironi, ju mund të bëni gjëra të interesit të shtypura getty në flamurin e identifikimit. Në shembujt e mi, unë kam emrin e sistemit dhe vijën serike të shtypur. Ju mund të shtoni gjëra të tjera: [blockquote

shade = po] @ B Aktual (vlerësohet në kohën kur @B shihet) norma bps. @D Data e tanishme, në MM / DD / YY. @L Linja serike në të cilën është bashkëngjitur getty. @S Emri i sistemit. @T Ora aktuale, në HH: MM: SS (24 orë). @U Numri i përdoruesve të regjistruar aktualisht. Kjo është një numërim i numrit të shënimeve në skedarin / etc / utmp që kanë një fushë jo-null ut_name. @ V Vlera e VERSION, siç jepet në skedarin e parazgjedhur. Për të shfaqur një karakter të vetëm '@', përdorni ose '\ @' ose '@@'.

Kur të jeni bërë editing / etc / gettydefs , ju mund të verifikoni që sintaksa është e saktë duke bërë:

linux # getty -c / etj / gettydefs

Sigurohuni që nuk ka skedarë të konfigurimit të tjerë të Getty ose të konfiguruar për portën serike që është lidhur me terminalin tuaj si ( /etc/default/{uu}getty.ttyS N ose /etc/conf.{uu}getty.ttyS N ) , pasi kjo ndoshta do të ndërhyjë në drejtimin e Getty në një terminal. Hiq skedarët e tilla kontradiktore nëse dalin.

Ndryshoni skedarin tuaj / etc / inittab për të drejtuar getty në portin serial (duke zëvendësuar informacionin e saktë për mjedisin tuaj - portin, shpejtësinë dhe llojin e terminalit të parazgjedhur):

S1: 23: Respakuar: / sbin / getty ttyS1 DT9600 vt100 INIT linux # init q

Në këtë pikë, duhet të shihni një hyrje të hyrjes në terminalin tuaj. Ju mund të keni për të goditur kthimin për të marrë vëmendjen e terminalit.

mgetty

"M" qëndron për modem. Ky program është kryesisht për modemët dhe që nga mesi i vitit 2000 do të kërkojë recompiling për ta përdorur atë për terminalet e teksteve (përveç nëse përdorni kontrollin e rrjedhës së harduerit - dhe kjo zakonisht kërkon një kabllo të bërë me dorë). Për dokumentacionin për terminalet e lidhur direkt shih seksionin "Direkt" të manualit: mgetty.texi.

Shikoni linjat e fundit të /etc/mgetty/mgetty.config për një shembull të konfigurimit të tij për një terminal. Nëse nuk thoni "toggle-dtr no" do të mendoni se keni një modem dhe hidhni (mohoni) pinin DTR në PC në një përpjekje të kotë për të rivendosur modemin jo-ekzistues. Në kontrast me gettys të tjera, mgetty nuk do të bashkëngjitni veten në një terminal derisa dikush hits ndonjë çelës të atij terminali kështu që ju do të shihni një? për terminalin në krye ose ps derisa kjo të ndodhë. Shkrimet në / var / log / mgetty / mund të tregojnë disa mesazhe paralajmëruese të cilat janë të zbatueshme vetëm për modemet të cilat ju mund të injoroni.

Ja një shembull i vijës së thjeshtë që vendosni në / etc / inittab:

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