Text-Terminals sa Linux

14.1 Getty (ginamit sa / etc / inittab)

Panimula sa Getty

Upang magkaroon ng isang proseso sa pag-login ay tumatakbo sa isang serial port (at ang terminal na nakakonekta dito) kapag ang computer ay nagsisimula (o lumipat sa antas ng run) ang isang getty command ay dapat ilagay sa / etc / inittab file. Ang pagpapatakbo ng getty mula sa command line ay maaaring maging sanhi ng mga problema (tingnan kung tumakbo ang getty mula sa command line: Ang mga programa ay tumigil upang makita kung bakit). Getty GETS isang TTY (isang terminal) pagpunta. Ang bawat terminal ay nangangailangan ng sariling command na getty. Mayroon ding hindi bababa sa isang command na getty para sa console sa bawat / etc / inittab na file. Hanapin ito at ilagay ang mga command na getty para sa mga tunay na terminal sa tabi nito. Maaaring maglaman ang file na ito ng mga sample na getty line para sa mga terminal ng teksto na nagkomento upang ang lahat ng kailangan mong gawin ay i-uncomment ang mga ito (alisin ang nangungunang #) at baguhin ang ilang mga argumento.

Ang mga argumento na pinahihintulutan ay depende sa kung saan ginagamit mo ang:
Ang dalawang pinakamahusay na makuha para sa mga direktang nakakonekta na mga terminal ay:

Ang pinakamahusay na dalawang gettys para sa dial-in na mga modem (maiwasan para sa direktang konektado terminal) ay:

Simple gettys na gagamitin kung hindi ka gumagamit ng isang real text-terminal. Karamihan sa mga gumagamit ng Linux ay gumagamit ng isa sa mga ito sa kanilang monitor:

Ang iyong pamamahagi ng Linux ay maaaring may alinman sa ps_getty o agetty para sa mga text-terminal. Ang ilang mga distribusyon ay hindi makukuha. Sa kasamaang palad, sila ay madalas na tumawag ito "getty" kaya maaaring kailangan mong matukoy kung alin ang mayroon ka dahil ang mga argumento na iyong inilagay pagkatapos nito sa / etc / inittab ay naiiba. Ginagamit ng Debian ang agetty (sa pakete ng util-linux). Gumamit ng RedHat at Fedora ang ps_getty na nasa: ps_getty

Bilang isang huling paraan upang subukan upang matukoy kung aling getty mo, maaari mong suriin ang code na maipapatupad nito (karaniwan ay sa / sbin). ps_getty ay may / etc / gettydefs na naka-embed sa code na ito. Upang hanapin ito, pumunta sa / sbin at i-type:
mga string getty | grep getty
Kung ang getty ay talagang agetty sa itaas ay magreresulta sa wala. Subalit kung mayroon kang agetty type:
getty -h
dapat ipakita ang mga pagpipilian [-mLmw].

Kung wala kang getty na gusto mong suriin ang iba pang mga distribusyon at ang programa ng dayuhan upang i-convert sa pagitan ng mga pakete ng RPM at Debian. Maaaring ma-download ang source code mula sa Getty Software.

Kung hindi ka gumagamit ng modem control lines (halimbawa kung gagamitin mo lang ang minimum na bilang ng 3 konduktor: ipadala, tumanggap, at karaniwang signal ground) dapat mong ipaalam sa getty ito sa pamamagitan ng paggamit ng isang "lokal" na bandila. Ang format ng mga ito ay depende sa kung saan getty ginagamit mo.

Getty paglabas pagkatapos ng pag-login (at maaaring respawn)

Pagkatapos mong mag-log in mapapansin mo (sa pamamagitan ng paggamit ng "top", "ps -ax", o "ptree") na ang proseso ng getty ay hindi na tumatakbo. Ano ang nangyari dito? Bakit muling i-restart ang getty kung patayin ang iyong shell? Narito kung bakit.

Matapos mong i-type ang iyong pangalan ng user, kumuha ito ng getty at tumawag sa programang pag-login na nagsasabi sa iyong pangalan ng iyong user. Ang proseso ng getty ay pinalitan ng proseso ng pag-login. Ang proseso ng pag-login ay nagtatanong para sa iyong password, tinatantya ito at nagsisimula sa anumang proseso na tinukoy sa iyong file ng password. Ang prosesong ito ay madalas na ang bash shell. Kung gayon, nagsisimula ang bash at pinapalitan ang proseso ng pag-login. Tandaan na ang isang proseso ay pumapalit sa isa pang at na ang proseso ng bash shell ay orihinal na nagsimula bilang proseso ng getty. Ang mga implikasyon nito ay ipapaliwanag sa ibaba.

Ngayon sa / etc / inittab na file, ang getty ay dapat na respawn (i-restart) kung papatayin. Sinasabi nito kaya sa linya na tumatawag sa getty. Ngunit kung ang bash shell (o ang proseso ng pag-login) ay papatayin, ang respetado ng getty (restart). Bakit? Buweno, kapwa ang proseso ng pag-login at bash ay mga kapalit para sa getty at magmana

* Text Terminal How-To Index

ang koneksyon ng signal ay itinatag ng kanilang mga predecessors. Sa katunayan kung sinusunod mo ang mga detalye mapapansin mo na ang kapalit na proseso ay magkakaroon ng parehong proseso ng ID bilang orihinal na proseso. Kaya bash ay uri ng getty sa magkaila na may parehong numero ng ID ng proseso. Kung bash ay namatay ito ay tulad ng getty ay namatay (kahit na getty ay hindi tumatakbo anymore). Nagreresulta ito sa respite ng getty.

Kapag ang isang mag-log out, ang lahat ng mga proseso sa serial na iyon ay pinatay kasama ang bash shell. Ito ay maaaring mangyari (kung pinagana) kung ang isang hangup signal ay ipinadala sa serial port sa pamamagitan ng isang drop ng DCD boltahe ng modem. Ang alinman sa logout o drop sa DCD ay magreresulta sa getty respawning. Maaaring pilitin ng isa ang getty upang respawn sa pamamagitan ng mano-mano na pagpatay ng bash (o pag-login) alinman sa pamamagitan ng pagpindot sa k key, atbp habang nasa "itaas" o sa "pumatay" na utos. Malamang na kailangan mong patayin ito gamit ang signal 9 (na hindi maaaring balewalain).

Kung tumakbo ang getty mula sa command line: Ang mga programa ay tumigil

Dapat kang magpatakbo ng normal getty mula sa loob / etc / inittab at hindi mula sa command line o iba pang mga programa na tumatakbo sa terminal ay maaaring hindi inaasahan na suspindihin (tumigil). Narito kung bakit (lumaktaw sa susunod na seksyon kung bakit hindi mahalaga sa iyo). Kung nagsimula ka ng getty para sabihin sayty mula sa command line ng ibang terminal, sabihin tty1, pagkatapos ay magkakaroon ito ng tty1 bilang "controlling terminal" nito kahit na ang aktwal na terminal na pinapatakbo nito ay ttyS1. Kaya may mali ang pagkontrol ng terminal. Ngunit kung ito ay nagsimula sa loob ng file na inittab pagkatapos ay magkakaroon ito ng ttyS1 bilang ang pagkontrol ng terminal (tama).

Kahit na ang pagkontrol ng terminal ay mali, ang pag-login sa ttyS1 ay gumagana ng maayos (dahil binigyan mo ang ttyS1 bilang argumento sa getty). Ang karaniwang input at output ay naka-set sa ttyS1 kahit na ang pagkontrol ng terminal ay nananatiling tty11. Ang iba pang mga program na tumatakbo sa ttyS1 ay maaaring magmana sa pamantayang input / output na ito (na konektado sa ttyS1) at lahat ay OK. Subalit ang ilang mga programa ay maaaring gumawa ng mga pagkakamali ng sinusubukan na basahin mula sa kanilang pagkontrol terminal (tty1) na mali. Ngayon tty1 maaaring isipin na ang mga program na ito ay pinapatakbo sa background sa pamamagitan ng tty1 kaya isang pagtatangka upang basahin mula sa tty1 (dapat ito ay ttyS1) mga resulta sa pagtigil sa proseso na sinubukang basahin. (Ang isang proseso sa background ay hindi pinapayagan na basahin mula sa pagkontrol ng terminal nito.). Maaari mong makita ang isang mensahe tulad ng: " [1] + Huminto " sa screen. Sa puntong ito ikaw ay natigil dahil hindi ka maaaring makipag-ugnayan sa isang proseso na nagsisikap na makipag-usap sa iyo sa pamamagitan ng maling terminal. Siyempre upang makatakas mula sa ito maaari kang pumunta sa isa pang terminal at patayin ang proseso, atbp.

agetty (maaaring pinangalanang getty)

Isang linya ng halimbawa sa / etc / inittab:

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

Ang S1 ay mula sa ttyS1. Nangangahulugan na ang getty ay tumatakbo sa pagpasok ng antas ng run 2 o 3. respawn ay nangangahulugan na kung ang getty (o isang proseso na pinalitan ito tulad ng bash) ay papatayin, ang getty ay awtomatikong magsisimula (respawn) muli. / sbin / getty ang getty command. Ang -L ay nangangahulugang Lokal (huwag pansinin ang mga signal ng modem control). -h (hindi ipinapakita sa halimbawa) ay nagbibigay-daan sa hardware flow control (katulad ng stty crtscts). Ang 19200 ay ang baud rate. Ang ttyS1 ay nangangahulugang / dev / ttyS1 (COM2 sa MS-DOS). vt102 ay ang uri ng terminal at ito getty ay itatakda ang kapaligiran variable TERM sa halagang ito. Walang mga configuration file. I-type ang "init q" sa command line pagkatapos mag-edit ng getty at dapat mong makita ang isang prompt ng pag-login.

Auto-detection ng Agetty & # 39; s ng mga problema sa pagkakapare-pareho

Susubukan ng agetty program na awtomatikong tuklasin ang pagkakapare-set sa loob ng terminal (kabilang ang walang parity). Hindi nito sinusuportahan ang 8-bit na byte ng data plus 1-bit parity. Tingnan ang 8-bit na byte ng data (plus parity). Kung gumamit ka ng stty upang itakda ang pagkakapare-pareho, ang mga ito ay awtomatikong i-unset ito dahil ito sa una ay nais ang parity bit na dumating sa pamamagitan ng bilang kung ito ay isang bit ng data. Ito ay dahil kailangan nito upang makuha ang huling bit (posibleng isang pagkakapareho bit) habang nagta-type ka ng iyong pangalan sa pag-login upang maaari itong auto-detect parity. Kaya kung gumamit ka ng pagkakapare-pareho, paganahin lamang ito sa loob ng text-terminal at hayaan ang auto detect ito at i-set ito sa computer. Kung ang iyong terminal ay sumusuporta sa natanggap na pagkakapare-pareho, ang prompt ng pag-login ay magiging malabo hanggang sa mag-type ka ng isang bagay upang matuklasan ng getty ang

pagkakapare-pareho. Ang garbled prompt ay humadlang sa mga bisita, atbp mula sa sinusubukang mag-login. Iyon ay maaaring maging kung ano ang gusto mo.

Kung minsan ay may problema sa pagkakita ng pagkapantay-pantay ng auto. Ito ay nangyayari dahil pagkatapos mo munang i-type ang iyong pangalan sa pag-login, sinisimulan ng agetty ang program sa pag- login upang tapusin ang pag-log in mo. Sa kasamaang palad, ang program sa pag- login ay hindi makukumpara ng pagkakapare-pareho kaya kung ang program na getty ay hindi matukoy ang parity at pagkatapos ay hindi ma- login ang login ito ay alinman. Kung nabigo ang unang pag-login sa pagtatangka, ang pag- login ay magbibigay-daan sa iyo na subukan muli, atbp (lahat ay may pagkakapare-set na mali). Sa kalaunan, pagkatapos ng maraming mga nabigong pagtatangka na mag-login (o pagkatapos ng isang timeout) ay muling magsisimula muli at simulan muli ang mga pagkakasunod-sunod ng pag-login. Sa sandaling tumakbo muli ang getty, maaari itong makita ang pagkakapare-pareho sa ikalawang pagsubok upang lahat ng bagay ay maaaring magtrabaho OK.

Sa maling pagkakapare-pareho, ang programa sa pag- login ay hindi maayos na mabasa kung ano ang iyong nai-type at hindi ka makapag-log in. Kung ang iyong terminal ay sumusuporta sa natanggap na pagkakapare-pareho, patuloy kang makakakita ng malabo na screen. Kung hindi natuklasan ng getty ang pagkakapare-pareho ang isang / etc / file na isyu ay kadalasang dumped sa screen bago ang bago ang prompt, kaya mas malabo salita ay maaaring lumitaw sa screen.

Bakit hindi ma-detect ang pagkakapare-pareho sa pamamagitan ng unang titik na na-type? Narito ang isang halimbawa: Ipagpalagay na nakikita nito ang isang 8-bit na byte na may parity bit 0 (high-order bit) at may isang kakaibang bilang ng 1-bits. Ano ang pagkakapare-pareho? Well, ang kakaibang bilang ng 1 bits ay nagpapahiwatig na ito ay kakaiba pagkakapareho. Ngunit maaari rin itong maging isang 8-bit character na walang parity. Walang paraan sa ngayon upang matukoy kung aling. Ngunit sa ngayon nawala namin ang posibilidad ng kahit pagkakapantay-pantay. Ang pagtukoy ng pagkakapantay kaya ay nalikom sa pamamagitan ng isang proseso ng pag-aalis.

Kung ang nai-type na susunod na byte ay katulad ng una at tanging tinatanggal lamang ang posibilidad ng kahit parity, imposible pa rin upang matukoy ang pagkakapare-pareho. Ang sitwasyong ito ay maaaring magpatuloy nang walang katiyakan at sa mga bihirang mga kaso ang pag-login ay mabibigo hanggang sa baguhin mo ang iyong login-name. Kung nahahanap ng agetty ang isang parity bit ng 1 ito ay ipalagay na ito ay isang parity bit at hindi isang mataas na-order bit ng isang 8-bit na character. Ipinapalagay nito na hindi ka gumagamit ng mga meta-character (high bit set) sa iyong username (ibig sabihin na ang iyong pangalan ay nasa ASCII).

Ang isa ay maaaring makapasok sa isang "login loop" sa iba't ibang paraan. Ipagpalagay na nag-type ka lamang ng isang titik o dalawa para sa iyong pangalan sa pag-login at pagkatapos ay pindutin ang pagbalik. Kung ang mga titik na ito ay hindi sapat para sa pagkakapareho ng pagkakapare-pareho, pagkatapos ay mag-login ay tumatakbo bago ang parity ay napansin. Minsan ang problemang ito ay mangyayari kung wala kang terminal sa at / o konektado kapag nagsimula ang agetty.

Kung natigil ka sa "loop sa pag-log in" isang paraan ng ito ay upang pindutin ang return key nang maraming beses hanggang makuha mo ang getty login prompt. Ang isa pang paraan ay maghintay lamang ng isang minuto o kaya para sa isang timeout. Pagkatapos ay ang prompt na login login ay ilalagay sa screen ng program ng getty at maaari mong subukang muli upang mag-log in.

8-bit na byte ng data (plus parity)

Sa kasamaang palad, hindi nakikita ng agetty ang parity na ito. Tulad ng huli 1999 walang pagpipilian para sa hindi pagpapagana ng auto-detection ng pagkakapare-pareho at sa gayon ay makikitang hindi tama ang pagkakapare-pareho. Ang resulta ay ang proseso ng pag-login ay malabo at magkapantay ang pagkakapare-pareho. Kaya hindi ito magagawa upang subukang gumamit ng 8-bit na byte ng data na may pagkakapare-pareho.

getty (bahagi ng getty_ps)

(Karamihan sa mga ito ay mula sa lumang Serial-HOWTO ni Greg Hankins)
Para sa isang getty isa ay kailangang pareho ilagay ang mga entry sa isang configuration file at magdagdag ng isang entry sa / etc / inittab . Narito ang ilang mga halimbawa ng mga entry na gagamitin para sa iyong terminal na inilagay mo sa configuration file / etc / gettydefs .

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

Tandaan na ang DT38400, DT19200, atbp ay mga etiketa lamang at dapat na pareho ang ginagamit mo sa / etc / inittab .

Kung gusto mo, maaari kang gumawa ng getty print na mga kagiliw-giliw na bagay sa banner sa pag-login. Sa aking mga halimbawa, mayroon akong pangalan ng system at ang serial line na nakalimbag. Maaari kang magdagdag ng iba pang mga bagay: [blockquote

lilim = oo] @ B Ang kasalukuyang (sinusuri sa oras na ang @ B ay nakita) bps rate. @ D Ang kasalukuyang petsa, sa MM / DD / YY. @ L Ang serial line kung saan naka-attach ang getty. @S Ang pangalan ng system. @ T Ang kasalukuyang oras, sa HH: MM: SS (24 na oras). @ U Ang bilang ng kasalukuyang naka-sign-on na mga gumagamit. Ito ay bilang ng bilang ng mga entry sa / etc / utmp na file na mayroong isang di-null na patlang ng ut_name. @ V Ang halaga ng VERSION, tulad ng ibinigay sa default na file. Upang ipakita ang isang character na '@', gamitin ang alinman sa '\ @' o '@@'.

Kapag tapos ka na sa pag-edit / etc / gettydefs , maaari mong i-verify na tama ang syntax sa pamamagitan ng paggawa:

linux # getty -c / etc / gettydefs

Tiyaking walang ibang getty o uugetty config file para sa serial port na naka-attach sa iyong terminal tulad ng ( /etc/default/{uu}getty.ttyS N o /etc/conf.{uu}getty.ttyS N ) , dahil malamang na ito ay makagambala sa pagpapatakbo ng getty sa isang terminal. Alisin ang mga magkakasalungat na file kung lumabas sila.

I-edit ang iyong / etc / inittab file upang patakbuhin ang getty sa serial port (substituting sa tamang impormasyon para sa iyong kapaligiran - port, bilis, at default na uri ng terminal):

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

Sa puntong ito, dapat mong makita ang isang prompt sa pag-login sa iyong terminal. Maaaring kailanganin mong maibalik ang pagbalik upang makuha ang pansin ng terminal.

mgetty

Ang "m" ay kumakatawan sa modem. Ang program na ito ay para lamang sa mga modem at sa kalagitnaan ng 2000 ay kakailanganin itong muling magamit upang magamit ito para sa mga text-terminal (maliban kung gumamit ka ng kontrol ng daloy ng hardware - at kadalasan ay nangangailangan ng isang cable na ginawa ng kamay). Para sa dokumentasyon para sa mga direktang nakakonekta na mga terminal tingnan ang seksyon ng "Direktang" ng manu-manong: mgetty.texi.

Tingnan ang huling mga linya ng /etc/mgetty/mgetty.config para sa isang halimbawa ng pag-configure nito para sa isang terminal. Maliban kung sabihin mong "toggle-dtr no" ito ay mag-iisip na mayroon kang isang modem at drop (kontrahin) ang DTR pin sa PC sa isang walang saysay na pagtatangka upang i-reset ang di-umiiral na modem. Sa kaibahan sa iba pang mga gettys, ang mgetty ay hindi ilakip ang sarili sa isang terminal hanggang sa may isang tao na pindutin ang anumang key ng terminal na iyon upang makakakita ka ng isang? para sa terminal sa itaas o PS hanggang sa mangyari ito. Ang mga log sa / var / log / mgetty / ay maaaring magpakita ng ilang mga babalang mensahe na naaangkop lamang sa mga modem na maaari mong huwag pansinin.

Narito ang isang halimbawa ng simpleng linya na iyong inilagay sa / etc / inittab:

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