Linux-дегі мәтін терминалдары

14.1 Getty (/ etc / inittab ішінде пайдаланылады)

Getty-ке кіріспе

Компьютер іске қосылған кезде (немесе іске қосу деңгейлерін қосқанда) сериялық портқа (және оған жалғанған терминалға) жүйеге кіру процесін орындау үшін getty пәрменін / etc / inittab файлына қою керек. Пәрмен жолынан getty іске қосу проблемаларды тудыруы мүмкін (егер getty пәрмен жолынан іске қосылса: Бағдарламалар неге екенін көру үшін тоқтатылады). Getty GTT TTY (терминал) барады. Әрбір терминалға getty командасы қажет. Әрбір / etc / inittab файлында консоль үшін кемінде бір getty пәрмені бар. Оны табыңыз да, жанында орналасқан нақты терминалдарға getty пәрмендерін қойыңыз. Бұл файлда мәтіндік терминалдар үшін getty жолдарының болуы мүмкін, олар сізге түсініктеме беруі керек, сондықтан сізге бәрін жасау керек (оларды алып тастау #) және бірнеше аргументтерді өзгерту.

Рұқсат етілген аргументтер сіз қайсы пайдаланатындығыңызға байланысты:
Тікелей жалғанған терминалдарға арналған ең жақсы екі нәрсе:

Терминалы бар модемдер үшін ең жақсы екі нұсқа бар (тікелей жалғанған терминалдардан аулақ болыңыз):

Нақты мәтіндік терминалды пайдаланбасаңыз, қарапайым Gettys. Көптеген Linux пайдаланушылары олардың біреуін мониторда пайдаланады:

Linux дистрибутиві немесе мәтіндік терминалдар үшін ps_getty немесе agetty болуы мүмкін. Кейбір үлестірулер де жеткізілмейді. Өкінішке орай, олар көбінесе оны «getty» деп атайды, сондықтан сіз / etc / inittab ішінде әр түрлі дәлелдерден кейін сіз қайсыңыздың бар екенін анықтауыңыз қажет болуы мүмкін. Debian адаптацияны пайдаланады (util-linux пакетінде). RedHat және Fedora ps_getty пайдаланған ps_getty

Сізге қандай жетістіктеріңізді анықтауға тырысатын соңғы шара ретінде, оның орындалатын кодын (әдетте / sbin) тексере аласыз. ps_getty осы кодқа енген / etc / gettydefs бар. Оны іздеу үшін / sbin өтіңіз және теріңіз:
strings getty | grep getty
Егер getty шын мәнінде болса, жоғарыда ештеңе болмайды. Алайда, сізде агрегатты теру:
getty -h
опцияларды көрсету керек [-hiLmw].

Егер сізге қажет болмаса, RPM және Debian пакеттері арасында айырбастау үшін басқа да дистрибутивтерді және бөтен бағдарламаны тексергіңіз келеді. Бастапқы код Getty Software-дан жүктелуі мүмкін.

Егер сіз модемді басқару сызықтарын пайдаланбасаңыз (мысалы, сіз тек 3 өткізгіштің ең аз санын пайдалансаңыз: беру, қабылдау және жалпы сигнал алаңы) оны «жергілікті» жалауша арқылы білуге ​​рұқсат етіңіз. Мұның форматы Сіз пайдаланатын қайсысына байланысты.

Кіруден кейін Getty шығу (және жауап беруі мүмкін)

Жүйеге кіргеннен кейін, getty процесі енді жұмыс істемейтінін байқайсыз («top», «ps -ax», немесе «ptree» арқылы). Онымен не болды? Қабықшаңызды өлтірген жағдайда неге getty қайтадан қайта іске қосылады? Міне, сондықтан.

Пайдаланушы атын енгізгеннен кейін getty оны қабылдайды және пайдаланушы атын көрсететін кіру бағдарламасын шақырады. Getty процесі кіру процесі арқылы ауыстырылады. Кіру процесі парольді сұрайды, тексереді және құпия сөз файлында қандай да бір процедура көрсетіле бастайды. Бұл процесс көбінесе бэш қабығы болып табылады. Егер солай болса, бас басталады және кіру процесін ауыстырады. Бір процестің екіншісін ауыстыратынын және bash қабы процесі бастапқыда getty процесі ретінде басталғанын ескеріңіз. Осының салдары төменде түсіндіріледі.

Енді / etc / inittab файлында, getty, егер өлтірілсе, жауап беруі тиіс (қайта іске қосу). Бұл жерде getty деп аталатын желіде де айтылады. Бірақ егер Bash қабығы (немесе кіру процесі) өлтірілсе, getty respawns (қайта іске қосылады). Неліктен? Енді кіру процесі және bash - getty және мұраға ауыстыру

* Мәтіндік терминалдың қалай индексі

олардың алдындағы сигналдық байланыстар орнатылады. Шын мәнісінде, бөлшектерді байқасаңыз, ауыстыру процесі бастапқы процесс ретінде бірдей процесс идентификаторына ие болатынын көресіз. Осылайша, Bash - бұл бірдей процесс идентификаторымен жасырынып алу. Егер өлтірілсе, ол қаза тапқан сияқты (тіпті getty жұмыс істемесе де). Бұл нәтижені алып тастауға әкеледі.

Бір жүйеден шыққан кезде, осы сериялық порттағы барлық процестер өлтіріледі, соның ішінде bash қабығы. Бұл да мүмкін (егер қосылған болса) модем арқылы DCD кернеуінің тамшысы арқылы дәйекті сигнал жіберіледі. DCD-дегі шығу немесе түсірілу Getty-тің жауап беруіне әкеледі. Біреуді «жоғарғы» немесе «өлтірген» командасымен басқанда, немесе к кілтін басу арқылы bash (немесе логин) қолмен өлтіріп, жауап беруге мәжбүрлеуге болады. Сіз оны 9 сигналымен (оны елемеуге болмайды) өлтіру қажет болуы мүмкін.

Егер getty команда жолынан іске қосылса: Бағдарламалар тоқтайды

Сіз әдетте командалық жолдан емес, / etc / inittab ішінен getty іске қосуыңыз керек немесе терминалда жұмыс істейтін кейбір бағдарламалар күтпеген түрде тоқтатылуы (тоқтатылуы) мүмкін. Міне, сондықтан (неге сіз үшін маңызды емес болса, келесі бөлімге өтіңіз). Егер сіз ttyS1-ді басқа терминалдың командалық жолынан алуды бастасаңыз, tty1 деп айтыңыз, сонда ол «tty1» өзінің «басқару терминалы» болады, бірақ ол іске қосылған терминал ttyS1 болып табылады. Осылайша, қате бақылау терминалы бар. Бірақ inittab файлында басталса, онда ttyS1 басқару терминалы ретінде (дұрыс) болады.

Басқару терминалы дұрыс емес болса да, ttyS1-те логин жақсы жұмыс істейді (ttyS1-ді getty-ге дәлел ретінде келтіргендіктен). Стандартты енгізу және шығару ttyS1-ге тең болса, басқару терминалы tty11 болып қалады. TtyS1-дегі басқа бағдарламалар, осы стандартты енгізу / шығуды (ол ttyS1-ке қосылған) иеленуі мүмкін және барлығы жақсы. Бірақ кейбір бағдарламалар өздерінің басқару терминалынан (tty1) дұрыс емес қателерді оқи алады. Енді tty1 осы бағдарламалар фонда tty1 арқылы іске қосылады деп ойлауы мүмкін, сондықтан tty1-ден оқуға әрекеттену (ол ttyS1 болуы керек) оқу үрдісін тоқтатуға әкеледі. (Өңдеу үрдісі оның басқару терминалынан оқуға рұқсат етілмейді). Хабарлама экранда көрінуі мүмкін: « [1] + Stopped ». Осы сәтте сіз өзіңізбен қате терминал арқылы байланысуға тырысатын процесспен өзара әрекеттесе алмайсыз. Әрине, осыдан қашып кету үшін басқа терминалға барып, процесін өлтіруге болады.

agetty (getty болуы мүмкін)

/ Etc / inittab ішіндегі мысал сызығы:

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

S1 - ttyS1-ден. 23 дегеніміз, getty 2 немесе 3 деңгейлеріне кіру кезінде іске қосылатынын білдіреді. Respawn - егер getty (немесе bash сияқты оны ауыстырған процесс) жойылса, getty автоматты түрде қайта іске қосылады. / sbin / getty - getty командасы. -L жергілікті білдіреді (модемді басқару сигналдарын елемеу). -h (мысалда көрсетілмеген) аппараттық ағындарды басқаруға мүмкіндік береді (сияқты stty ktscts). 19200 - бұл багының жылдамдығы. ttyS1 білдіреді / dev / ttyS1 (COM2 MS-DOS). vt102 терминал түрі болып табылады және бұл getty бұл мәнге TERM айнымалы мәнін орнатады. Конфигурациялық файлдар жоқ. Пәрмен жолында «init q» деп жазыңыз, содан кейін «getty» сөзін енгізіп көріңіз.

Agitty & parity проблемаларын автоматты анықтау

Агтет бағдарламасы терминал ішіндегі паритетті анықтауды автоматты түрде анықтауға тырысады (оның ішінде теңдесі жоқ). Ол 8 биттік деректер байттарын және 1-биттік паритетті қолдамайды. 8-биттік деректер байтын (плюс теңдік) қараңыз. Егер сіз теңсіздікті орнату үшін stty функциясын қолдансаңыз , agetty автоматты түрде оны орнатады , себебі бастапқыда паритеттің биті деректер биті секілді келуін қалайды. Өйткені, паритетті автоматты түрде анықтай алатындай логин атыңызды енгізгенде, ол соңғы бит (мүмкін паритеттік бит) алу керек. Осылайша, егер сіз паритетті пайдалансаңыз, оны тек мәтіндік терминал ішінде қосыңыз және оны автоматты түрде анықтап, оны компьютерге орнатыңыз. Егер сіздің терминалыңыз қолдаушы паритетті қолдаса, login сұрауы getty анықтай алатындай етіп тергенше бұзылады

теңдік. Бүлінген анықтама келушілерді және т.б. кіруге тырысады. Бұл қалаған нәрсе болуы мүмкін.

Кейде паритетті автоматты анықтауға қатысты проблема бар. Бұл сіздің логиніңізді бірінші рет енгізгеннен кейін, agetty сізге кіруді аяқтау үшін кіру бағдарламасын бастайды. Өкінішке орай, кіру бағдарламасы паритетті анықтай алмайды, егер getty бағдарламасы паритетті анықтай алмаса, логин анықталмайды бұл да. Егер бірінші кіру әрекеті сәтсіз болса, логин қайтадан көріңіз, және т.б. (бәрі дұрыс емес паритпен орнатылған). Ақыр соңында, кіруге (немесе күту уақытынан кейін) кіру әрекеттері сәтсіз аяқталғаннан кейін қайтадан іске қосылады және жүйеге кірулерді қайтадан бастайды. Getty қайтадан іске қосылса, екінші тәжірибедегі паритетті анықтай алады, сонда бәрі жақсы болады.

Қате паритетті болған кезде, кіру бағдарламасы сіз енгізген нәрсені дұрыс оқи алмайды және сіз кіре алмайсыз. Егер терминалыңыз алынған паритетті қолдаса, сіз бұзылған экранды көре бересіз. Егер getty паританы анықтай алмаса, / etc / issue файлы, әдетте, сұраудың алдында экранға шығарылады, сондықтан экранда көп бұзылған сөздер пайда болуы мүмкін.

Неліктен егемендіктің алғашқы әріппен паританы анықтай алмайсыз? Міне мысал: Мысалы, 8-байтты байтты 0-ден (биіктігі жоғары бит) және 1-битпен тақ санымен анықтаңыз. Бұл қандай теңдік? Ал, 1-биттің тақ саны оның тепе-теңдік екенін білдіреді. Бірақ бұл жай ғана 8-биттік сипатта болмауы мүмкін. Қайсысын анықтау мүмкін емес. Дегенмен, біз тепе-теңдік мүмкіндігін жойдық. Осылайша, паритетті анықтау, жою процесі арқылы жүзеге асырылады.

Егер келесі байт терілген болса, біріншісіне ұқсас және теңдестіру мүмкіндігін ғана жойса, паритетті анықтау мүмкін емес. Бұл жағдай белгісіз түрде жалғасуы мүмкін және сирек жағдайда кіру логинін өзгерткенше кіру сәтсіз болады. Егер агрессия 1 теңдік битін табса, бұл 8-биттік сипаттың жоғары емес биті емес, паритит биті деп есептеледі. Бұл сіздің пайдаланушы атыңыздағы мета-таңбаларды (жоғары бит жиынтығын) пайдаланбайды деп болжайды (яғни сіздің атыңыз ASCII-де болса).

Әртүрлі тәсілдермен «кіру логикасына» кіруге болады. Сіз өзіңіздің логиніңізге арналған бір немесе екі әріпті ғана жазыңыз де, содан кейін қайтарыңыз. Егер бұл әріптер паритетті анықтау үшін жеткіліксіз болса, паритеттің анықталуына дейін логин іске қосылады. Кейде бұл ақаулық алғаш рет іске қосылған кезде терминалға қосылмаған және / немесе қосылмаған жағдайда орын алады.

Егер сіз осы «логин айналымы» ішінде тұрсаңыз, шығу сценарийіне getty кіру шақыруын алғанға дейін бірнеше рет соққы беру. Тағы бір сәтте күту уақытын бір минут күтіңіз. Сонда getty кіру шақыруын getty бағдарламасы арқылы экранға шығарады және қайтадан кіруге әрекет етуіңіз мүмкін.

8 биттік деректер байттары (plus parity)

Өкінішке орай, бұл агреты бұл теңдікті таба алмайды. 1999 жылдың соңындағы жағдай бойынша оны теңдестіруді автоматты түрде анықтау мүмкіндігін өшіру мүмкіндігі жоқ, осылайша қате теңдік анықталады. Нәтиже - кіру процесінің бұзылуы және паритеттің дұрыс емес болуы. Осылайша, 8-биттік деректер байттарын паритетті қолдануға тырысу мүмкін емес.

getty (getty_ps бөлігі)

(Олардың көпшілігі Грег Ханкинстің ескі Serial-HOWTO-нан)
Бұл getty үшін конфигурациялық файлға жазбаларды қойып, / etc / inittab ішіне жазбаны қосу керек. Мұнда терминалға арналған / etc / gettydefs конфигурациялық файлын енгізген кейбір мысалдар бар .

# 38400 bps Dumb Терминалға кіру DT38400 # B38400 CS8 CLOCAL # B38400 SANE -STRIP CLOCAL # @ S @L логин: # DT38400 # 19200 bps Dumb Терминалға кіру DT19200 # B19200 CS8 CLOCAL # B19200 SANE -ISTRIP CLOCAL # @ S @L логин: # DT19200 # 9600 bps Dumb Терминалға кіру DT9600 # B9600 CS8 CLOCAL # B9600 SANE -STRIP CLOCAL # @ S @L кіру: # DT9600

Назар аударыңыз, DT38400, DT19200 және т.б. - тек жапсырмалар және / etc / inittab ішінде қолданылатын бірдей болуы керек.

Егер қаласаңыз, логин баннерінде қызықты нәрселерді басып шығаруға болады. Менің мысалдарымда менде жүйелік атау мен сериялық сызық бар. Сіз басқа нәрселерді қоса аласыз: [blockquote

көлеңке = иә] @B Ағымдағы (@B көрінген уақытта бағаланады) bps жиілігі. @D Ағымдағы күн, MM / DD / YY ішінде. @L Getty қосылатын сериялық жол. @S Жүйенің атауы. @T Ағымдағы уақыт, HH: MM: SS (24-сағаттық). @U Қазіргі уақытта тіркелген пайдаланушылар саны. Бұл нөлдік емес ut_name өрісі бар / etc / utmp файлындағы жазбалардың санының санағы. @V Әдепкі мәндер файлында көрсетілгендей VERSION мәні. Жалғыз '@' таңбасын көрсету үшін, '\ @' немесе '@@' сөзін пайдаланыңыз.

Сіз / etc / gettydefs редакторын аяқтағанда , синтаксистің дұрыс жасалатынын тексере аласыз:

linux # getty -c / etc / gettydefs

Терминалыңыздың ( /etc/default/{uu}getty.ttyS N немесе /etc/conf.{uu}getty.ttyS N ) тіркелгеніне арналған тізбекті порт үшін басқа getty немесе uugetty конфигурациялық файл болмағанын тексеріңіз , себебі бұл терминалда жұмыс істемей қалуы мүмкін. Шығатын болса, осындай қайшылықты файлдарды жойыңыз.

Serial port-те getty- ді іске қосу үшін / etc / inittab файлыңызды өңдеңіз (қоршаған ортаңыз үшін дұрыс ақпаратпен алмастырыңыз - порты, жылдамдығы және әдепкі терминал түрі):

S1: 23: respawn: / sbin / getty ttyS1 DT9600 vt100 ішінде linux # init q

Осы сәтте терминалда кіру сұрауын көруіңіз керек. Терминалдың назарын алу үшін қайтаруыңыз мүмкін.

mgetty

«M» модемді білдіреді. Бұл бағдарлама ең алдымен модемдерге арналған және 2000 жылдың ортасына қарай ол мәтіндік терминалдар үшін оны қайта пайдалануды талап етеді (егер аппараттық ағындарды басқаруды пайдаланбасаңыз және әдетте қолмен жасалған кабель қажет болса). Тікелей жалғанған терминалдарға арналған құжаттама үшін нұсқаулықтың «Тікелей» бөлімін қараңыз: mgetty.texi.

Терминалға конфигурациялаудың мысалы үшін /etc/mgetty/mgetty.config соңғы жолдарына қараңыз. Егер «toggle-dtr no» деп айтылмаған болса, сізде модем жоқ және ДТП-ны жоқ болғанда (жоққа шығармайды) бар болмаған модемді қалпына келтіруге тырысыңыз. Басқа Gettys-діктерден айырмашылығы, mgetty біреу біреуді осы терминалдың кез келген кілтіне соққанша терминалға қосылмайды. Бұл жағдай болмағанша жоғарғы немесе төменгі терминал үшін. / Var / log / mgetty / журналдары тек елемеуге болатын модемдерге қолданылатын бірнеше ескерту хабарларын көрсетеді.

/ Etc / inittab-ге енгізген қарапайым жолдың мысалы :

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