14.1 Getty (използва се в / etc / inittab)
Въведение в Getty
За да може процесът за влизане да се стартира на сериен порт (и свързания с него терминал), когато компютърът се стартира (или превключва нивата на изпълнение), командата getty трябва да бъде поставена в / etc / inittab файла. Стартирането на getty от командния ред може да причини проблеми (вижте Ако getty се стартира от командния ред: Програмите се спират, за да видят защо). Getty получава GTA TTY (терминал). Всеки терминал се нуждае от собствена команда getty. Има поне една команда getty за конзолата във всеки файл / etc / inittab. Намерете това и поставете команди за getty за реалните терминали до него. Този файл може да съдържа примерни линии на getty за текстови терминали, които са коментирани, така че всичко, което трябва да направите, е да ги отключите (премахнете водещия #) и да промените няколко аргумента.
Аргументите, които са разрешени, зависят от кой Гети използвате:Две gettys най-добре за директно свързаните терминали са: Две gettys най-добре за dial-in модеми (избягвайте за директно свързани терминали) са: Обикновено gettys да използвате, ако не използвате истински текстов терминал. Повечето потребители на Linux използват един от тях в своя монитор: Разпространението в Линукс може да е с ps_getty или agetty за текстови терминали. Някои дистрибуции не осигуряват нито това. За съжаление, те често го наричат "getty", така че може да се наложи да определите кой от вас има, тъй като аргументите, които поставяте в / etc / inittab, се различават. Debian използва agetty (в пакета util-linux). RedHat и Fedora използват ps_getty, който е на: ps_getty Като последна възможност да се опитате да определите кой Getty имате, можете да проверите неговия изпълним код (обикновено в / sbin). ps_getty има / etc / gettydefs вграден в този код. За да го търсите, отидете на / sbin и въведете:струни grep getty Ако getty е действително agetty по-горе няма да доведе до нищо. Ако обаче сте написали agetty:getty -hтрябва да покаже опциите -hiLmw. Ако не разполагате с Getty, който искате, проверете други дистрибуции и извънземно програма за конвертиране между пакети RPM и Debian. Изходният код може да бъде изтеглен от Getty Software. Ако не използвате линии за управление на модема (например, ако използвате само минималния брой 3 проводника: предаване, приемане и обща сигнална почва), трябва да позволите на Гети да знаете това с помощта на "локално" знаме. Форматът на това зависи от това, което използвате. След като влезете, ще забележите (чрез "top", "ps -ax" или "ptree"), че процесът getty вече не се изпълнява. Какво се случи с него? Защо отново се стартира отново, ако убиеш черупката си? Ето защо. След като въведете потребителското си име, Getty го отнема и извиква програмата за влизане, като го казва потребителското ви име. Процесът getty се заменя от процеса на вход. Процесът на влизане изисква паролата ви, проверява я и започва каквото и да е процес, посочен във файла с паролата ви. Този процес често е баш черупката. Ако е така, башът започва и замества процеса на вход. Обърнете внимание, че един процес заменя друг и че процесът на bash shell първоначално е започнал като процесът getty. Последиците от това ще бъдат обяснени по-долу. Сега в / etc / inittab файла, getty трябва да respawn (restart), ако бъде убит. Тя казва така на линията, която нарича "Гети". Но ако бас черупката (или процеса на вход) е убит, Getty respawns (рестартира). Защо? Е, както входът, така и башът са заместители на getty и наследяване * Индекс на терминален терминал за текст сигналните връзки се определят от техните предшественици. Всъщност, ако спазвате детайлите, ще забележите, че процесът на замяна ще има идентификационен номер на процеса като оригиналния процес. По този начин bash е вид getty в прикриване с идентификационен номер процес. Ако баш е убит, то е точно като убийството на Гети (въпреки че Гети вече не работи). Това води до повръщане. Когато се излезе, всички процеси на този сериен порт са загинали, включително черупката. Това може да се случи (ако е активирано), ако сигнал за окачване е изпратен на серийния порт чрез падане на DCD напрежение от модема. Или излизането, или изпускането на DCD ще доведе до повторно повторение. Човек може да принуди Грей да се отдръпне, като ръчно убие баш (или вход), като натисне клавиша k и т.н., докато е в "горе" или с командата "kill". Вероятно ще трябва да го убиете със сигнал 9 (който не може да бъде пренебрегнат). Обикновено трябва да тичате отвътре / И т.н. / inittab а не от командния ред или някои програми, които се изпълняват на терминала, могат неочаквано да бъдат преустановени (спряно). Ето защо (преминете към следващия раздел, ако причината не е важна за вас). Ако започнете getty за say ttyS1 от командния ред на друг терминал, кажете tty1, тогава той ще има tty1 като "контролен терминал", въпреки че действителният терминал, на който работи, е ttyS1. По този начин има погрешен контролен терминал. Но ако това е стартирано вътре в inittab файла, то ще има ttyS1 като контролен терминал (правилен). Въпреки че контролният терминал е грешен, входът в ttyS1 работи добре (тъй като ти даде ttyS1 като аргумент за getty). Стандартният вход и изход са настроени на ttyS1, въпреки че контролния терминал остава tty11. Други програми, изпълнявани на ttyS1, могат да наследят този стандартен вход / изход (който е свързан с ttyS1) и всичко е наред. Но някои програми могат да направят грешката да се опитат да четат от своя контролен терминал (tty1), което е грешно. Сега tty1 може да мисли, че тези програми се изпълняват на фона от tty1, така че опитът да се прочете от tty1 (трябва да е ttyS1) води до спиране на процеса, който се опитва да прочете. (Процесът на заден план не може да се чете от контролния терминал.). Може да видите съобщение като: "1 + спряно"на екрана.В този момент сте залепнали, тъй като не можете да взаимодействате с процес, който се опитва да комуникира с вас чрез грешния терминал.Разбира се, за да избягате от това, можете да отидете в друг терминал и да убиете процеса и т.н. , Примерна линия в / etc / inittab:
S1 е от ttyS1. 23 означава, че getty се изпълнява при влизане в нива на изпълнение 2 или 3. respawn означава, че ако getty (или процес, който го замени като bash) е убит, Getty автоматично ще стартира (respawn) отново. / sbin / getty е командата getty. -L означава локално (игнорирайте модемните сигнали за управление). -h (не е показано в примера) позволява контрол на хардуерния поток (същото като stty crtscts). 19200 е скоростта на предаване. ttyS1 означава / dev / ttyS1 (COM2 в MS-DOS). vt102 е тип терминал и този getty ще зададе променливата TERM на тази стойност. Няма конфигурационни файлове. Напишете "init q" на командния ред след редактирането на getty и трябва да видите прозореца за влизане. Най- agetty програмата ще се опита да открие автоматично паритета в терминала (без паритет). Той не поддържа 8-битови бита данни плюс 1-битов паритет. Вижте 8-битови байтове данни (плюс паритет). Ако използвате stty да зададете паритет, agetty ще го деактивира автоматично, тъй като първоначално иска битът на паритета да дойде, сякаш е бит за данни. Това е така, защото трябва да вземете последния бит (вероятно бит за паритет), докато въвеждате името на входното си име, така че да може автоматично да открива паритет. По този начин, ако използвате паритет, го активирайте само в текстовия терминал и го пуснете agetty да го открие автоматично и да го зададе на компютъра. Ако вашият терминал поддържа получения паритет, прозореца за вход ще изглежда объркан, докато не въведете нещо, така че паритет. Повреденият подсказки ще попречи на посетителите и т.н. да се опитат да влязат. Това може да е точно това, което искате. Понякога има проблем с автоматично откриване на паритет. Това се случва, защото след като въведете първо потребителското си име, agetty стартира Влизам програма, за да приключите да влезете в. За съжаление, Влизам програмата не може да открива паритет, така че ако Гети Програмата не успя да определи паритета тогава Влизам няма да може да го определи. Ако първият опит за вход не успее, Влизам ще ви позволи да опитате отново и т.н. (всички с грешен паритет). В крайна сметка, след редица неуспешни опити за влизане (или след изчакване) agetty ще стартира отново и ще стартира последователностите за вход. Веднъж, когато Гети отново работи, може да е в състояние да открие паритет на втория опит, така че всичко може да работи добре. С погрешен паритет, Влизам програмата не може да прочете правилно това, което въвеждате, и не можете да влезете. Ако терминалът ви поддържа получения паритет, ще продължите да виждате изкривен екран. Ако getty не успее да открие параметър, файлът / etc / issue обикновено се изхвърля на екрана точно преди подканата, така че на екрана могат да се появят по-изкривени думи. Защо не може да открие паритет чрез първото въведено писмо? Ето един пример: Да предположим, че открива 8-битов байт с неговия бит на паритета 0 (бит от висок клас) и с нечетен брой от 1 бита. Какъв е паритетът? Е, нечетното число от 1 бита означава, че това е странен паритет. Но може да бъде само 8-битов герой без паритет. Няма начин досега да се определи кое. Но досега сме премахнали възможността за равнопоставеност. По този начин откриването на паритет се извършва чрез процес на елиминиране. Ако следващият байт, написан, е подобен на първия и освен това елиминира възможността за равенство, все още е невъзможно да се определи паритет. Тази ситуация може да продължи безкрайно и в редки случаи влизането в системата ще се провали, докато не промените името си за вход. Ако agetty намери parity bit от 1, то ще приеме, че това е бит на паритета, а не bit на висок ред на 8-битов характер. По този начин се предполага, че не използвате мета-символи (висок битов набор) във вашето потребителско име (т.е. че вашето име е в ASCII). Човек може да влезе в "входна линия" по различни начини. Да предположим, че въвеждате само едно или две букви за входното си име и след това натиснете връщане. Ако тези букви не са достатъчни за откриване на паритет, входът се изпълнява, преди да бъде открит паритет. Понякога този проблем се случва, ако нямате терминал включен и / или свързан, когато първо се стартира agetty. Ако се забиете в тази "линия за вход", изход от нея е да натиснете бутона за връщане няколко пъти, докато получите командата getty за вход. Друг начин е просто да изчакате около минута за изчакване. После ще се появи на екрана програмата getty и ще се опитате отново да влезете. За съжаление, agetty не може да открие този паритет.Към края на 1999 г. няма възможност за деактивиране на автоматичното откриване на паритет и по този начин ще открие неправилен паритет. Резултатът е, че процесът на вход ще бъде повреден и паритетът ще бъде погрешен. По този начин изглежда невъзможно да се опитат да използват 8-битови байтове данни с паритет. (Повечето от тях са от стария сериен-HOWTO от Грег Ханкинс)За тази getty трябва да въведете записи в конфигурационния файл и да добавите запис / И т.н. / inittab, Ето някои примерни записи, които да използвате за терминала, които сте поставили в конфигурационния файл / и т.н. / gettydefs.
Имайте предвид, че DT38400, DT19200 и т.н. са само етикети и трябва да бъдат същите, които използвате / И т.н. / inittab. Ако искате, можете да направите Гети отпечатайте интересни неща в банера за вход. В моите примери имам името на системата и отпечатаната серийна линия. Можете да добавите други неща: blockquote сянка = Да
Когато приключите с редактирането / и т.н. / gettydefs, можете да проверите дали синтаксисът е правилен, като:
Уверете се, че няма друго Гети или uugetty конфигурационен файл за серийния порт, към който е свързан терминалът ви като/etc/default/{uu}getty.ttySN или /etc/conf.{uu}getty.ttySN), тъй като това вероятно ще пречи на работата Гети на терминал. Премахнете тези несъвместими файлове, ако излязат. Редактирайте вашето / И т.н. / inittab файл, който да се изпълнява Гети на серийния порт (замествайки правилната информация за околната среда - порт, скорост и типа терминал по подразбиране):
В този момент трябва да видите подкана за влизане в терминала. Може да се наложи да се върнете, за да обърнете внимание на терминала. "M" означава модем. Тази програма е предимно за модеми и от средата на 2000 г. тя ще изисква прекомпилиране да се използва за текстови терминали (освен ако не използвате хардуер за контрол на потока - и това обикновено изисква ръчно изработен кабел). За документацията за директно свързани терминали вижте раздела "Директен" на ръководството: mgetty.texi. Вижте последните редове на /etc/mgetty/mgetty.config за пример за конфигурирането му за терминал. Освен ако не кажете "toggle-dtr no", той ще мисли, че имате модем и пуснете (заглушавате) щифта DTR на компютъра в суетен опит за нулиране на несъществуващия модем. За разлика от други gettys, mgetty няма да се прикрепи към терминал, докато някой не удари някакъв ключ на този терминал, така че ще видите? за терминала в връх или к.с. докато това не се случи. Входните данни се показват / Var / дневник / mgetty / може да покаже няколко предупредителни съобщения, които са приложими само за модеми, които можете да пренебрегнете. Ето един пример за простата линия, в която поставяте / И т.н. / inittab:
Getty излиза след влизане (и може да respawn)
Ако getty стартира от командния ред: Програмите се прекратяват
agetty (може да се нарече getty)
S1: 23: respawn: / sbin / getty -L 19200 ttyS1 vt102
Автоматичното откриване на проблемите с паритета на Айгети
8-битови байтове данни (плюс паритет)
getty (част от getty_ps)
mgetty