Текстови терминали на Linux

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 проводника: предаване, приемане и обща сигнална почва), трябва да позволите на Гети да знаете това с помощта на "локално" знаме. Форматът на това зависи от това, което използвате.

Getty излиза след влизане (и може да respawn)

След като влезете, ще забележите (чрез "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 (който не може да бъде пренебрегнат).

Ако getty стартира от командния ред: Програмите се прекратяват

Обикновено трябва да стартирате getty от / etc / inittab, а не от командния ред, или някои програми, които се изпълняват на терминала, могат неочаквано да бъдат прекратени (спряно). Ето защо (преминете към следващия раздел, ако причината не е важна за вас). Ако започнете getty за say ttyS1 от командния ред на друг терминал, кажете tty1, тогава той ще има tty1 като "контролен терминал", въпреки че действителният терминал, на който работи, е ttyS1. По този начин има погрешен контролен терминал. Но ако това е стартирано вътре в inittab файла, то ще има ttyS1 като контролен терминал (правилен).

Въпреки че контролният терминал е грешен, входът в ttyS1 работи добре (тъй като ти даде ttyS1 като аргумент за getty). Стандартният вход и изход са настроени на ttyS1, въпреки че контролния терминал остава tty11. Други програми, изпълнявани на ttyS1, могат да наследят този стандартен вход / изход (който е свързан с ttyS1) и всичко е наред. Но някои програми могат да направят грешката да се опитат да четат от своя контролен терминал (tty1), което е грешно. Сега tty1 може да мисли, че тези програми се изпълняват на фона от tty1, така че опитът да се прочете от tty1 (трябва да е ttyS1) води до спиране на процеса, който се опитва да прочете. (Процесът на заден план не може да се чете от контролния терминал.). Възможно е да видите съобщение като: " [1] + спряно " на екрана. В този момент сте залепнали, тъй като не можете да взаимодействате с процес, който се опитва да комуникира с вас чрез грешния терминал. Разбира се, за да избягате от това, можете да отидете на друг терминал и да убивате процеса и т.н.

agetty (може да се нарече getty)

Примерна линия в / etc / inittab:

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

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

Програмата " agetty " ще се опита да открие автоматично паритета в терминала (без паритет). Той не поддържа 8-битови бита данни плюс 1-битов паритет. Вижте 8-битови байтове данни (плюс паритет). Ако използвате stty, за да зададете паритет, agetty автоматично ще го деактивира, тъй като първоначално иска parity бита да дойде, като че ли бит за данни. Това е така, защото трябва да вземете последния бит (вероятно бит за паритет), докато въвеждате името на входното си име, така че да може автоматично да открива паритет. По този начин, ако използвате parity, го активирайте само в текстовия терминал и нека agetty го открият автоматично и го зададат на компютъра. Ако вашият терминал поддържа получения паритет, прозореца за вход ще изглежда объркан, докато не въведете нещо, така че

паритет. Повреденият подсказки ще попречи на посетителите и т.н. да се опитат да влязат. Това може да е точно това, което искате.

Понякога има проблем с автоматично откриване на паритет. Това се случва, защото след като въведете първо потребителското си име, agetty стартира програмата за вход , за да приключи с влизането ви в системата. За съжаление програмата за вход не може да открие паритети, така че ако програмата getty не успее да определи паритет, тогава входът няма да може да определи това също. Ако първият опит за вход не успее, входът ще ви позволи да опитате отново и т.н. (всички с грешен паритет). В крайна сметка, след редица неуспешни опити за влизане (или след изчакване) agetty ще стартира отново и ще стартира последователностите за вход отново. Веднъж, когато Гети отново работи, може да е в състояние да открие паритет на втория опит, така че всичко може да работи добре.

При грешен паритет програмата за вход не може да прочете правилно това, което въвеждате, и не можете да влезете. Ако терминалът ви поддържа получения паритет, ще продължите да виждате изкривен екран. Ако getty не успее да открие параметър, файлът / etc / issue обикновено се изхвърля на екрана точно преди подканата, така че на екрана могат да се появят по-изкривени думи.

Защо не може да открие паритет чрез първото въведено писмо? Ето един пример: Да предположим, че открива 8-битов байт с неговия бит на паритета 0 (бит от висок клас) и с нечетен брой от 1 бита. Какъв е паритетът? Е, нечетното число от 1 бита означава, че това е странен паритет. Но може да бъде само 8-битов герой без паритет. Няма начин досега да се определи кое. Но досега сме премахнали възможността за равнопоставеност. По този начин откриването на паритет се извършва чрез процес на елиминиране.

Ако следващият байт, написан, е подобен на първия и освен това елиминира възможността за равенство, все още е невъзможно да се определи паритет. Тази ситуация може да продължи безкрайно и в редки случаи влизането в системата ще се провали, докато не промените името си за вход. Ако agetty намери parity bit от 1, то ще приеме, че това е бит на паритета, а не bit на висок ред на 8-битов характер. По този начин се предполага, че не използвате мета-символи (висок битов набор) във вашето потребителско име (т.е. че вашето име е в ASCII).

Човек може да влезе в "входна линия" по различни начини. Да предположим, че въвеждате само едно или две букви за входното си име и след това натиснете връщане. Ако тези букви не са достатъчни за откриване на паритет, входът се изпълнява, преди да бъде открит паритет. Понякога този проблем се случва, ако нямате терминал включен и / или свързан, когато първо се стартира agetty.

Ако се забиете в тази "линия за вход", изход от нея е да натиснете бутона за връщане няколко пъти, докато получите командата getty за вход. Друг начин е просто да изчакате около минута за изчакване. После ще се появи на екрана програмата getty и ще се опитате отново да влезете.

8-битови байтове данни (плюс паритет)

За съжаление, agetty не може да открие този паритет. Към края на 1999 г. няма възможност за деактивиране на автоматичното откриване на паритет и по този начин ще открие неправилен паритет. Резултатът е, че процесът на вход ще бъде повреден и паритетът ще бъде погрешен. По този начин изглежда невъзможно да се опитат да използват 8-битови байтове данни с паритет.

getty (част от getty_ps)

(Повечето от тях са от стария сериен-HOWTO от Грег Ханкинс)
За този getty трябва да въведете записи в конфигурационния файл и да добавите запис в / etc / inittab . Ето някои примерни записи, които да използвате за терминала, който сте поставили в конфигурационния файл / etc / gettydefs .

# 38400 bps Вход за D-терминал DT38400 # B38400 CS8 CLOCAL # B38400 SANE -ISTRIP CLOCAL # @ S @ Вход за влизане: # DT38400 # 19200 bps Запис на терминал DT19200 # B19200 CS8 CLOCAL # B19200 SANE -ISTRIP CLOCAL # @ S @ # DT19200 # 9600 bps Вход за терминали DT9600 # B9600 CS8 CLOCAL # B9600 SANE -ISTRIP CLOCAL # @ S @ Вход за влизане: # DT9600

Имайте предвид, че DT38400, DT19200 и т.н. са само етикети и трябва да са същите, които използвате в / etc / inittab .

Ако искате, можете да направите графичен печат интересни неща в банера за вход. В моите примери имам името на системата и отпечатаната серийна линия. Можете да добавите други неща: [blockquote

сянка = Да] @B Токът (оценен по времето, когато @B се вижда) скорост на bps. @ D Текуща дата, в ММ / ДД / ГГ. @ L Серийната линия, към която е приложен getty. @S Името на системата. @T Текущо време, в HH: MM: SS (24 часа). @U Броят на потребителите, които са влезли в момента. Това е броя на вписванията в / etc / utmp файла, които имат поле, което не е нула ut_name. @V Стойността на VERSION, както е дадено във файла с настройки по подразбиране. За да покажете единичен знак "@", използвайте "\ @" или "@@".

Когато приключите с редактирането на / etc / gettydefs , можете да проверите дали синтаксисът е правилен, като:

linux # getty -c / etc / gettydefs

Уверете се, че за серийния порт, към който е свързан терминалът ви, няма друг конфиг файл за getty или uugetty ( /etc/default/{uu}getty.ttySN или /etc/conf.{uu}getty.ttyS N ) , тъй като това вероятно ще пречи на пускането на getty на терминал. Премахнете тези несъвместими файлове, ако излязат.

Редактирайте файла / etc / inittab, за да стартирате getty на серийния порт (замествайки правилната информация за вашата среда - порт, скорост и типов терминал по подразбиране):

S1: 23: respawn: / sbin / getty ttyS1 DT9600 vt100 в него linux # init q

В този момент трябва да видите подкана за влизане в терминала. Може да се наложи да се върнете, за да обърнете внимание на терминала.

mgetty

"M" означава модем. Тази програма е предимно за модеми и от средата на 2000 г. тя ще изисква прекомпилиране да се използва за текстови терминали (освен ако не използвате хардуер за контрол на потока - и това обикновено изисква ръчно изработен кабел). За документацията за директно свързаните терминали вижте секцията "Директен" на ръководството: mgetty.texi.

Погледнете последните редове на /etc/mgetty/mgetty.config за пример за конфигурирането му за терминал. Освен ако не кажете "toggle-dtr no", той ще мисли, че имате модем и пуснете (заглушавате) щифта DTR на компютъра в суетен опит за нулиране на несъществуващия модем. За разлика от други gettys, mgetty няма да се прикрепи към терминал, докато някой не удари някакъв ключ на този терминал, така че ще видите? за терминала в горната част или ps, докато това не се случи. Днешрките в / var / log / mgetty / може да показват няколко предупредителни съобщения, които са приложими само за модеми, които може да пренебрегнете.

Ето един пример за простата линия, която поставяте в / etc / inittab:

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