Текстуални приклучоци на Линукс

14.1 Гети (се користи во / etc / inittab)

Вовед во Гети

За да се изврши процесот на најавување на сериски порт (и терминалот поврзан со него) кога компјутерот ќе почне (или прекинувачи се извршуваат нивоа), мора да се стави командата getty во датотеката / etc / inittab. Вклучувањето на Getty од командната линија може да предизвика проблеми (видете Ако Getty работи од командната линија: Програмите се прекинати за да видите зошто). Getty добива TTY (терминал). Секој терминал има потреба од своја сопствена команда. Исто така, има барем една getty команда за конзолата во секоја / etc / inittab датотека. Најдете го ова и ставете ги командите на Getty за вистинските терминали веднаш до него. Оваа датотека може да содржи примероци за getty линии за текстуални терминали кои се коментирани, така што сè што треба да направите е да ги комкомментирате (отстранете ги водечките #) и да смените неколку аргументи.

Аргументите што се дозволени зависи од тоа кој готи го користите:
Најдобри два гати за директно поврзани терминали се:

Најдобрите две добитници за dial-in модеми (избегнувајте за директно поврзани терминали) се:

Едноставни gettys да се користи ако не користите вистински текст-терминал. Повеќето корисници на Линукс користат еден од нив на нивниот монитор:

Вашата Линукс дистрибуција може да дојде или со ps_getty или agetty за текстуални терминали. Некои дистрибуции не нудат ниту. За жал, тие честопати само го нарекуваат "getty", па можеби ќе треба да одредите кој сте од аргументите што ги ставате во / etc / inittab се разликуваат. Дебиан користи agetty (во пакетот util-linux). RedHat и Fedora користеа ps_getty што е во: ps_getty

Како последно средство да се обидете да одредите кој добивате, можете да го проверите својот извршен код (обично во / sbin). ps_getty има / etc / gettydefs вградени во овој код. За да го пребарате, одете во / sbin и напишете:
жици grep getty
Ако Getty всушност agetty погоре ќе резултира во ништо. Меѓутоа, ако имате agetty пишување:
getty-h
треба да ги прикаже опциите [-hiLmw].

Ако немате гати сакате да проверите други дистрибуции и програмата за вонземјани да конвертирате помеѓу RPM и Debian пакетите. Изворниот код може да се преземе од Getty Software.

Ако не користите линии за контрола на модемот (на пример, ако го користите само минималниот број на 3 проводници: пренесување, примање и заедничко сигнално подрачје), треба да дозволите Getty да го знаете ова со користење на "локално" знаме. Форматот на ова зависи од тоа кој готи го користите.

Гети излегува по најава (и може да отпушти)

Откако ќе влезете ќе забележите (со користење на "врвот", "ps -ax" или "ptree") дека процесот на getty веќе не работи. Што се случи со тоа? Зошто Гети повторно се рестартира ако вашата школка е убиена? Еве зошто.

Откако ќе го напишете вашето корисничко име, Getty го зема и ја повикува програмата за најава што го кажува вашето корисничко име. Процесот за добивање се заменува со процесот на најава. Процесот на најава бара вашата лозинка, го проверува и започнува кој процес е наведен во вашата лозинка. Овој процес е често баш школка. Ако е така, баш започнува и го заменува процесот на најавување. Имајте на ум дека еден процес го заменува другото и дека баш-школка процес првично започна како гетти процес. Импликациите од ова ќе бидат објаснети подолу.

Сега, во датотеката / etc / inittab, Гати треба да се рестартира (рестартира) ако е убиен. Таа вели така на линијата која го нарекува Кетти. Но, ако баш школка (или процесот на најава) е убиен, Гетти respawns (рестартира). Зошто? Па, и процесот на најавување и баш се замена за Getty и наследуваат

* Текст терминал како-да Индекс

сигналните врски воспоставуваат нивните претходници. Всушност, ако ги набљудувате деталите, ќе забележите дека процесот на замена ќе го има истиот проект ID како и оригиналниот процес. Така bash е вид на Getty во маскирана со ист процес број за идентификација. Ако баш е убиен, тоа е исто како убиецот Кетти (иако Гетти веќе не работи). Ова резултира со гати респирација.

Кога еден се одјавува, сите процеси на тој сериски порт се убиваат, вклучувајќи ја баш-школка. Ова, исто така, може да се случи (ако е овозможено), ако на серискиот порт се испраќа сигнал за откачување со капка DCD напон од модемот. Или одјавувањето или падот на ДХД ќе резултира со отпуштање на гати. Еден може да го присили Кет да се ослободи со рачно убивање на баш (или најава) или со притискање на копчето k итн. Додека е во "врвот" или со командата "убие". Најверојатно ќе треба да го убиете со сигнал 9 (што не може да се игнорира).

Ако getty работи од командната линија: програмите се прекинуваат

Вообичаено треба да го стартувате gety од внатре / etc / inittab, а не од командната линија, или пак некои програми кои работат на терминалот може да бидат неочекувано прекинати (запрени). Еве зошто (прескокнете го следниот дел, ако зошто не е важно за вас). Ако го започнете Getty за say 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. Повторното отпуштање значи дека ако Getty (или процес кој го заменил како баш) е убиен, Getty автоматски ќе започне (respawn) повторно. / sbin / getty е командата getty. -L значи локално (игнорирајте контролни сигнали за модемот). -h (не е прикажано во примерот) овозможува контрола на протокот на хардвер (исто како и stty crtscts). 19200 е бод стапка. ttyS1 значи / dev / ttyS1 (COM2 во MS-DOS). vt102 е тип на терминал и оваа getty ќе ја постави променливата на околината TERM на оваа вредност. Не постојат конфигурациски датотеки. Напишете "init q" на командната линија по уредувањето Getty и треба да видите најава.

Автоматско откривање на проблемите со паритетот на Agetty

Програмата agetty ќе се обиде автоматски да го открие паритетот што е поставен во терминалот (без паритет). Не поддржува 8-битни податоци бајти плус 1-битен паритет. Погледнете 8-битни податоци бајти (плус паритет). Ако користите Stty за да го поставите паритетот, agetty автоматски ќе го исклучи, бидејќи првично сака битот за паритет да дојде како да е малку податочен. Ова е поради тоа што треба да го добиете последниот бит (можеби бит на паритет) кога ќе го напишете вашето име за најава, за да може автоматски да открие паритет. Така, ако користите паритет, овозможете го само внатре во текстуалниот терминал и нека agetty автоматски го детектира и го постави на компјутерот. Ако вашиот терминал поддржува добиени паритет, најава брза ќе изгледа чита додека не напишете нешто, така што Гетти може да го открие

паритет. Проблематичната пратка ќе ги одврати посетителите, итн. Од обидот да се најавите. Тоа може да биде само она што го сакате.

Постои понекогаш проблем со автоматско откривање на паритет. Ова се случува затоа што откако првпат го напишете вашето име за најава, agetty ја започнува програмата за најава за да ве потпише . За жал, програмата за најава не може да открие паритет, па ако програмата Getty не успее да ја утврди паритетот, тогаш логирањето нема да може да се одреди или. Ако првиот обид за најава не успее, најавувањето ќе ви дозволи да пробате повторно, итн. (Сите со подесување не е во ред). Конечно, по неколку неуспешни обиди за најавување (или по истекот на времето) agetty ќе започне повторно и ќе започне повторно да се логираат секвенците. Откако Getty повторно работи, може да биде во можност да го открие паритетот на вториот обид за да може сè да работи во ред.

Со погрешен паритет, програмата за најава не може правилно да го прочита она што го пишувате и не можете да се најавите. Ако вашиот терминал поддржува добиен паритет, ќе продолжите да гледате читан екран. Доколку Getty не успее да открие паритет, датотеката / etc / issue обично се фрла на екранот непосредно пред да се појави пораката, па на екранот може да се појават повеќе читани зборови.

Зошто agetty не може да открие паритет од првата буква што ја внесовте? Еве еден пример: Да претпоставиме дека детектира 8-битен бајт со бит за паритет 0 (бит од висок редослед) и со непарен број од 1 бита. Кој е паритет? Па, непарен број од 1 бита подразбира дека е непарен паритет. Но, тоа исто така може да биде само 8-битен карактер без паритет. Нема начин да се утврди кој досега. Но, досега ја елиминиравме можноста за паритет. Откривањето на паритет на тој начин продолжува со процесот на елиминација.

Ако следниот бајт кој е напишан е сличен на првиот и исто така ја елиминира можноста за дури и паритет, сеуште е невозможно да се одреди паритет. Оваа ситуација може да продолжи на неодредено време и во ретки случаи, логирањето нема да успее додека не го смените вашето име за најава. Ако agetty најде бит за паритет од 1, ќе претпостави дека ова е бит за паритет, а не висок бит од 8-битен карактер. Така претпоставува дека во вашето корисничко име не користите мета-знаци (високо бит сет) (т.е. дека вашето име е во ASCII).

Може да се влезе во "циклус за најава" на различни начини. Да претпоставиме дека внесувате само едно буква или две за вашето корисничко име, а потоа кликнете на враќање. Ако овие букви не се доволни за откривање на паритет, тогаш се најавува пред да се открие паритет. Понекогаш овој проблем се случува ако немате терминал и / или сте поврзани кога првпат започнува agetty.

Ако се заглавите во оваа "влезна циклус", излезот од него е да го притиснете копчето за враќање неколку пати додека не го добиете побарувањето за најавување на. Друг начин е да почекате една минута или така за истек на време. Тогаш прозорецот за најава за најавување на getty ќе биде ставен на екранот од програмата Getty и може да се обидете повторно да се најавите.

8-битни податоци бајти (плус паритет)

За жал, agetty не може да се открие оваа паритет. До крајот на 1999 година нема опција за оневозможување на автоматското откривање на паритетот и со тоа ќе открие неточен паритет. Резултатот е дека процесот на најавување ќе се чита и паритетот ќе биде погрешен. Така изгледа дека не е изводливо да се обиде да користи 8-битни податоци бајти со паритет.

getty (дел од getty_ps)

(Поголемиот дел од ова е од стариот Serial-HOWTO од Грег Ханкинс)
За оваа гати треба да се стават записи во конфигурациска датотека и да се додаде запис во / etc / inittab . Еве неколку примери за користење за вашиот терминал што ќе го ставите во конфигурациската датотека / etc / gettydefs .

# 38400 bps Глуен терминал влез DT38400 # B38400 CS8 CLOCAL # B38400 SANE -ISTRIP CLOCAL # @ S @ L логин: # DT38400 # 19200 bps Неми терминал влез DT19200 # B19200 CS8 CLOCAL # B19200 SANE -ISTRIP CLOCAL # @ S @ # DT19200 # 9600 bps Глупо терминал влез DT9600 # B9600 CS8 CLOCAL # B9600 SANE -ISTRIP CLOCAL # @ S @ L најавување: # DT9600

Забележете дека DT38400, DT19200 итн. Се само етикети и мора да бидат исти како што користите во / etc / inittab .

Ако сакате, можете да направите Getty печатење интересни работи во банерот за најава. Во моите примери, името на системот и сериската линија се отпечатени. Можете да додадете други работи: [блок

сенка = да] @B Тековната (оценета во времето кога се гледа @B) bps стапка. @D Тековниот датум, во MM / DD / YY. @L Сериската линија на која е прикачен Гетти. @S Името на системот. @T Тековното време, во HH: MM: SS (24-часовен). @U Бројот на моментално пријавени корисници. Ова е број на бројот на записи во / etc / utmp датотеката која има не-null ut_name поле. @V Вредноста на VERSION, како што е дадена во датотеката со стандардни вредности. За да се прикаже единствен знак '@', користете или '\ @' или '@@'.

Кога ќе завршите со уредување на / etc / gettydefs , можете да потврдите дека синтаксата е правилна:

linux # getty-c / etc / gettydefs

Осигурајте се дека не постои друга конфигурациска датотека getty или uugetty за серискиот порт што вашиот приклучок е поврзан, како што е ( /etc/default/{uu}getty.ttyS N или /etc/conf.{uu}getty.ttyS N ) , бидејќи ова најверојатно ќе се меша со трчање гати на терминал. Отстрани ги таквите конфликтни датотеки ако излегуваат.

Уредете ја вашата / etc / inittab датотека за да го стартувате Getty на серискиот порт (заменувајќи ги точните информации за вашата околина - порта, брзина и стандарден тип на терминал):

S1: 23: respawn: / sbin / getty ttyS1 DT9600 vt100 во тоа linux # init q

Во овој момент, треба да видите најава за најава на вашиот терминал. Можеби ќе треба да го возвратите вниманието за да го привлечете вниманието на терминалот.

mgetty

"М" е модем. Оваа програма е првенствено за модеми, а од средината на 2000 година ќе треба повторно да се користи за текстуални терминали (освен ако не користите хардверска контрола на проток - а тоа обично бара рачен кабел). За документацијата за директно поврзани терминали, видете го делот "Директно" од прирачникот: mgetty.texi.

Погледнете ги последните линии на /etc/mgetty/mgetty.config за пример за конфигурирање за терминал. Освен ако не кажете "switch-dtr no", ќе помислите дека имате модем и капка (негирајте) DTR иглата на компјутерот во залуден обид да го ресетирате непостоечкиот модем. За разлика од другите gettys, mgetty нема да се закачи на терминал додека некој не посети било кое копче на тој терминал, па ќе видите? за терминалот во врвот или пс додека ова не се случи. Логовите во / var / log / mgetty / може да покажат неколку предупредувачки пораки кои се применуваат само за модеми кои може да ги игнорирате.

Еве еден пример за едноставната линија што ја ставате во / etc / inittab:

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