Linuxda matn terminali

14.1 Getty (/ etc / inittab da ishlatiladi)

Getty-ga kirish

Kompyuter ishga tushirilganda (yoki ish darajasini o'zgartirganda) ketma-ket portda (va unga ulangan terminali) login jarayonini bajarish uchun /etc / inittab fayliga getty buyrug'i qo'yish kerak. Buytiyani buyruq satridan ishga tushirishda muammolarga olib kelishi mumkin (qarang, agar buyruq satrida Getty ishlatilsa: Dasturlar nega to'xtab qolganini ko'rish uchun to'xtatiladi). Getty, TTY (terminal) ketadi. Har bir terminal o'z buytli buyrug'iga muhtoj. / Etc / inittab faylida konsol uchun kamida bitta getty buyrug'i mavjud. Buni toping va yonidagi haqiqiy terminallar uchun getty buyruqlar qo'ying. Ushbu faylda matnli terminallar uchun getty qatorlari bo'lishi mumkin, shuning uchun siz bajaradigan barcha narsalar ularni qoldirib (ularni olib tashlash #) olib tashlash va bir necha argumentlarni o'zgartirish.

Ruxsat etilgan argumentlar siz foydalanadigan qanday bog'liq:
To'g'ridan-to'g'ri bog'langan terminallar uchun ikkita eng yaxshi:

Dial-in modemlari uchun eng yaxshi ikki qurilma (to'g'ridan-to'g'ri ulangan terminallardan qochish) quyidagilar:

Haqiqiy matn terminali foydalanmasangiz, ulardan foydalanish oson. Aksariyat Linux foydalanuvchilari monitörlerinde ulardan birini foydalanadi:

Sizning Linux tarqatishingiz matnli terminallar uchun ps_getty yoki agetty bilan birga keladi. Ba'zi dağılımlar na besleniyor. Afsuski, odatda ularni "getty" deb atashadi, shuning uchun siz / etc / inittab-dan keyin qo'ygan dalillaringizdan keyin qaysi birini tanlagan bo'lsangiz kerak. Debian agetty-dan foydalanadi (util-linux paketida). RedHat va Fedora ps_getty ishlatishdi: ps_getty

Qaysi getty ni aniqlashga harakat qilish uchun oxirgi chora sifatida, uning bajariladigan kodini (odatda / sbin) tekshirishingiz mumkin. ps_getty, bu kodni ichiga / etc / gettydefs ko'milgan. Uni izlash uchun / sbin ga kiring va yozing:
satrlari getty | grep getty
Getty aslida agetty bo'lsa, yuqorida hech narsa bo'lmaydi. Biroq, agetty yozsangiz:
Getty -h
variantlari [-hiLmw] ko'rsatishi kerak.

Agar sizda Getty ega bo'lmasangiz, boshqa tarqatish va RPM va Debian paketlari o'rtasida aylantirish uchun begona dasturni tekshirib ko'ring. Resurs kodi Getty Software'dan yuklab olinishi mumkin.

Agar siz modemni boshqarish chiziqlarini ishlatmasangiz (masalan, agar siz faqat 3 ta o'tkazgichning minimal sonini ishlatsangiz: transmit, qabul qilish va umumiy signallar maydoni) buni "mahalliy" bayroq yordamida bilib olishingiz kerak. Buning shakli qaysi sizning foydalanadiganingizga bog'liq.

Kirishdan keyin Getty exits (va javob berishi mumkin)

Siz kirganingizdan so'ng ("top", "ps -ax" yoki "ptree" yordamida) getty jarayoni endi ishlamayotganligini sezasiz. Bunga nima bo'ldi? Agar qobiq o'ldirilsa, nima uchun getty qayta ishga tushadi? Mana nima uchun.

Foydalanuvchi nomini kiritganingizdan so'ng, getty uni qabul qiladi va sizning foydalanuvchi ismingizni aytib unga kirish dasturini chaqiradi. Getty jarayoni kirish jarayoni bilan almashtiriladi. Kirish jarayoni sizning parolingizni so'raydi, uni tekshiradi va parol dosyaningizda qanday jarayonlar ko'rsatilganligini boshlaydi. Ushbu jarayon tez-tez bash qobig'i hisoblanadi. Agar shunday bo'lsa, bosh boshlash va kirish jarayonining o'rnini bosadi. Bir jarayon boshqasini o'rnini egallaydi va bosh qobig'i jarayoni dastlabki jarayon sifatida boshlanganini unutmang. Buning oqibatlari quyida keltirilgan.

Endi / etc / inittab faylida, getty, agar o'ldirilgan bo'lsa, javob qaytarishi kerak (qayta ishga tushirish). Bu esa, Getty'yi chaqiradigan yo'nalishda shunday deydi. Ammo agar bash shell (yoki kirish jarayoni) o'ldirilsa, getty respain (qayta boshlanadi). Nima uchun? Xo'sh, kirish jarayoni ham, bosh ham getty va meros olish uchun o'zgartiradi

* Matn terminali qanday amalga oshiriladi?

ularning oldingi tomonlari tomonidan belgilanadigan signal aloqalari. Haqiqatdan ham detallarga rioya qilsangiz, o'zgarish jarayoni asl jarayoni bilan bir xil jarayon identifikatoriga ega bo'ladi. Shunday qilib, bosh - xuddi shu identifikatsiyalashtirilgan identifikatsiya raqami bilan niqobga olishning o'ziga xos turi. Bash o'ldirilsa, u xuddi qotil o'ldirilgandek (xuddi getty endi ishlamasa ham). Bu esa, Getty respawningga olib keladi.

Agar tizimdan chiqadigan bo'lsa, u ketma-ket portdagi barcha jarayonlar, jumladan, bosh qobig'i ham o'ldiriladi. Modem tomonidan DCD kuchlanishining bir tomchi tomonidan ketma-ket portga ulanuvchi signal yuborilsa, bu ham (agar yoqilgan bo'lsa) bo'lishi mumkin. DCD-da chiqish yoki tomosha qilish getty respawningga olib keladi. Agar "yuqori" yoki "o'ldirish" buyrug'i bilan "k" tugmachasini bosib, yoki bashni (yoki login) qo'l bilan o'ldirish orqali qabul qilishni majburlash mumkin. Ehtimol, 9-belgisi bilan uni o'ldirishingiz kerak bo'ladi (buni e'tiborsiz qoldirib bo'lmaydi).

Getty buyruq satridan ishga tushirilsa: Dasturlar to'xtatiladi

Odatda, buyruq satırından emas, balki / etc / inittab ichidan getty qilish kerak yoki terminalda ishlaydigan ba'zi dastur kutilmagan tarzda to'xtatilgan bo'lishi mumkin. Shuning uchun (nima uchun siz uchun muhim bo'lmasa keyingi bo'limga o'ting). Agar boshqa terminalning buyruq satridan ttyS1 deb aytishni boshlasangiz, "tty1" deb ayting, keyin u "tty1" ishi bilan ishlaydigan bo'lsa-da, uni "boshqarish terminali" sifatida tty1 bo'ladi. Shunday qilib, noto'g'ri boshqaruv terminali mavjud. Ammo inittab faylida ishga tushirilsa, u holda ttyS1 boshqaruv terminali (to'g'ri) bo'ladi.

Tekshirish terminali noto'g'ri bo'lsa ham, ttyS1 da kirish yaxshi ishlaydi (ttyS1ni gettyga argument sifatida berganingiz uchun). Standart kirish va chiqish ttyS1ga o'rnatiladi, ammo nazorat terminalida tty11 qoladi. TtyS1 da ishlaydigan boshqa dasturlar ushbu standart kirish / chiqishga (u ttyS1 ga ulangan) ega bo'lishi mumkin va hamma narsa yaxshi. Ammo ayrim dasturlar o'zlarining nazorat terminalidan (tty1) noto'g'ri bo'lganini o'qish xatosini keltirib chiqarishi mumkin. Keling, tty1 ushbu dasturlarni fonda 1-taymda ishlayotgan deb o'ylashlari mumkin, shuning uchun tty1 dan o'qish kerak (u ttyS1 bo'lishi kerak) o'qishga harakat qilgan jarayonni to'xtatishga olib keladi. (Foniy jarayon nazorat terminalidan o'qishga ruxsat etilmaydi). Xabarni quyidagi kabi ko'rishingiz mumkin: " [1] + To'xtatildi " ekranda. Siz bu erda noto'g'ri terminali orqali siz bilan aloqa o'rnatishga harakat qilayotgan jarayon bilan aloqa o'rnatolmaysiz. Albatta, undan qochish uchun boshqa terminalga borib, jarayonni o'ldirishingiz mumkin.

agetty ("getty" bo'lishi mumkin)

/ Etc / inittab ichida bir misol qatorni:

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

S1 ttyS1 dan olingan. 23 - "Getty" 2 yoki 3-darajali ish darajalariga kirishda ishlatilganligini anglatadi. Agar "getty" (yoki "bash" o'rnini bosadigan jarayon) o'ldirilsa, getty avtomatik ravishda (respawn) boshlanadi. / sbin / getty - getty buyrug'i. -L mahalliy ma'noga ega (modemni boshqarish signallari e'tiborga olinmaydi). -h (misolda ko'rsatilmaydi) apparat oqimini boshqarishga imkon beradi (stty kserkslari bilan bir xil). 19200 - bod tezligi. ttyS1 / dev / ttyS1 (MS-DOS da COM2) degan ma'noni anglatadi. vt102 - terminalning turi va ushbu getty bu o'zgaruvchining atrof-muhit o'zgaruvchan parametrini o'rnatadi. Konfiguratsiya fayllari yo'q. Getty-ni tahrirlashdan keyin buyruq satrida "init q" yozing va tizimga kirish so'rovini ko'rishingiz kerak.

Agitty'ning parite muammolarini avtomatik aniqlash

Agetty dasturi terminal ichidagi paritani o'rnatishni avtomatik ravishda aniqlay olishga harakat qiladi (paritani qo'shmasdan). 8-bit ma'lumotlar baytlari va 1-bit pariteyi qo'llab-quvvatlamaydi. 8-bit ma'lumot baytlarini (ortiqcha parite) ko'ring. Agar siz stty- ni parite-ni ishlatsangiz, agetty avtomatik ravishda uni o'chirib qo'yadi, chunki dastlab parite bitining ma'lumot biti kabi kelishi kerak. Buning sababi, paritani avtomatik ravishda aniqlay olishi uchun kirish nomini kiritganingizda oxirgi bitni (ehtimol parite bitini) olish kerakligi. Shunday qilib, agar siz pariteyi ishlatsangiz, uni faqat matn terminalida yoqing va agetty uni avtomatik ravishda aniqlang va uni kompyuterga qo'ying. Terminalingiz qabul qilingan paritetni qo'llab-quvvatlasa, login buyrug'i getty-ni aniqlashga imkon beradigan biror narsa yozilmaguncha buzilmaydi

tenglik. Bezovtalangan irodali mehmonlarga kirishni taqiqlaydi, va hokazo. Bu siz xohlagan narsalar bo'lishi mumkin.

Ba'zida paritani avtomatik aniqlash bilan bog'liq muammolar mavjud. Buning sababi, siz login nomingizni birinchi marta kiritganingizdan so'ng, agetty sizni tizimga kirishni tugatish uchun kirish dasturini ishga tushiradi. Afsuski, login dasturi paritetni aniqlay olmaydi, shuning uchun getty dasturi pariteyi aniqlay olmasa, kirishni aniqlay olmaydi bu ham. Agar birinchi kirish urinishlari muvaffaqiyatsiz tugilsa, login qayta urinib ko'rishga imkon beradi va hokazo (barcha paritatsiya noto'g'ri o'rnatilgan). Nihoyat, bir qancha muvaffaqiyatsiz urinishlar (yoki takrorlashdan keyin) kirish uchun qayta ishga tushirilgandan so'ng va kirish sekanslarini qaytadan boshlang. Getty qayta ishlay boshlagach, u ikkinchi sinovda paritani aniqlay oladi, shuning uchun har bir narsa keyin OK ishlaydi.

Noto'g'ri parite bilan, kirish dasturi siz yozgan narsalarni to'g'ri o'qiy olmaydi va siz tizimga kira olmaysiz. Agar terminalingiz qabul qilingan paritetni qo'llab-quvvatlasa, siz buzuq ekranni ko'rishni davom etasiz. Agar getty parite aniqlanmasa, / etc / issue faylini odatda so'rovdan oldin darhol ekranga tashlab yuboriladi, shuning uchun ekranda ko'proq buzuq so'zlar paydo bo'lishi mumkin.

Nima uchun agitty birinchi parol bilan tenglikni aniqlash mumkin emas? Misol tariqasida quyidagicha tushuntirilishi mumkin: 8bit baytni uning paritatsiya biti 0 (yuqori buyurtma bit) va 1 soniyali bitli soni bilan aniqlang. Bu qanday tenglik? Xullas, 1 bitning g'alati birligi bu g'alati paritetni anglatadi. Lekin bu faqat 8 bitli belgilar bo'lishi mumkin. Hozircha qaysi usulni aniqlab olishning usuli yo'q. Ammo hozirga qadar biz hatto tenglik imkoniyatini ham yo'q qildik. Shunday qilib, paritani aniqlash jarayoni tugatilish jarayoni bilan davom etadi.

Agar keyingi bayt yozilsa, birinchisiga o'xshash bo'lsa ham, faqat tenglik imkoniyatini bartaraf etsa, pariteyi aniqlash mumkin emas. Bu holat muddatsiz davom etishi mumkin va kamdan-kam hollarda tizimga login-ismingizni o'zgartirmaguningizcha loginizatsiya amalga oshiriladi. Agar agetty parite bitni topsa, u 8bitli belgining yuqori buyurtma biti emas, balki bu tenglik biti deb taxmin qilinadi. Bu sizning foydalanuvchi nomingizdagi meta-belgilarni (yuqori bitli to'siq) ishlatmaslikni nazarda tutadi (ya'ni, ismingiz ASCII-da).

"Kirish loopi" ga turli yo'llar bilan kirish mumkin. Sizning login nomingiz uchun faqat bir yoki ikki harfni kiriting va keyin qaytarsangiz bo'ladi. Agar bu harflar paritani aniqlash uchun yetarli bo'lmasa, parite aniqlangunga qadar login ishlaydi. Ba'zan, bu muammo, agetty birinchi ishga tushganda terminalda bo'lmasa va / yoki ulangan bo'lsa, bu bo'ladi.

Agar siz ushbu "login loopida" saqlanib qolsangiz, u holda chiqish yo'liga getty login irodasini olguncha bir necha marta urish kerak. Yana bir usul - bu vaqtni kutish uchun bir daqiqa kutish. Keyin getty kirish irodasini getty dasturi bilan ekranda ko'rinadi va qayta kirishga urinib ko'rishingiz mumkin.

8-bit ma'lumotlar baytlari (ortiqcha parite)

Afsuski, agetty bu tenglikni aniqlay olmaydi. 1999 yil oxiridan e'tiboran u avtotransportni aniqlashni o'chirib qo'yish imkoniyati yo'q va shuning uchun noto'g'ri paritani aniqlaydi. Natijada, kirish jarayoni buziladi va parite noto'g'ri o'rnatilgan bo'ladi. Shunday qilib, 8 bitli ma'lumotlar baytlarini tenglik bilan ishlatishga urinish mumkin emas.

getty (getty_psning bir qismi)

(Bularning ko'pchiligi sobiq Grek Hankins tomonidan ketma-ket HOWTO'dan olingan)
Ushbu getty uchun konfiguratsiya fayliga kiritilgan yozuvlarni kiritish va / etc / inittab-ga kiritish kerak . Sizning terminalingiz uchun / etc / gettydefs konfiguratsiya faylini kiritgan ba'zi bir misollari.

# 38400 bps Dot terminalining kiritilishi DT38400 # B38400 CS8 CLOCAL # B38400 SANE -STRIP CLOCAL # @ S @L kirish: # DT38400 # 19200 bps Dumb Terminal kirish DT19200 # B19200 CS8 CLOCKAL # B19200 SANE -STIRIP CLOCAL # @ S @L login: # DT19200 # 9600 bps Dambldagi kirish yozuvi DT9600 # B9600 CS8 CLOCAL # B9600 SANE -STREP CLOCAL # @ S @L kirish: # DT9600

DT38400, DT19200 va h.k.lar faqatgina teglar va / etc / inittab-da foydalanadigan bir xil bo'lishi kerak.

Agar xohlasangiz, login timsolida qiziqarli narsalarni chop eting. Misollarimda menda tizimning nomi va ketma-ket bosilgan chiziq bor. Boshqa narsalarni qo'shishingiz mumkin: [blockquote

shadi = yes] @B Mavjud (@b paydo bo'lgan vaqtda baholanadi) bps tezligi. @D Joriy sana MM / DD / YY da. @L Getty ulangan ketma-ketlik liniyasi. @S Tizim nomi. @T Hozirgi vaqt, soat bo'yicha: MM: SS (24 soat). @U Hozirda imzolangan foydalanuvchilar soni. Bu null-bo'lmagan ut_name maydoniga ega / etc / utmp faylidagi yozuvlarning sonini hisoblash. @V VERSION qiymati, asl qiymati faylda berilgan. '@' Belgisini ko'rsatish uchun '@ @ @' yoki '@@' dan foydalaning.

Siz / etc / gettydefsni tahrirlashni tugatganingizda , sintaksikning to'g'ri bajarilishini tasdiqlashingiz mumkin:

Linux # getty -c / etc / gettydefs

( /etc/default/{uu}getty.ttyS N yoki /etc/conf.{uu}getty.ttyS N ) kabi terminalga ulangan ketma-ket port uchun boshqa getty yoki uugetty konfiguratsiya fayli yo'qligiga ishonch hosil qiling. , chunki bu, ehtimol, terminalda ishlaydigan gettyga to'sqinlik qilishi mumkin. Bunday ziddiyatli fayllarni chiqarsa ularni olib tashlang.

Serial portidagi getty -ni ishlatish uchun / etc / inittab faylini tahrirlang (atrof-port, tezlik va standart terminal turi uchun to'g'ri ma'lumotni o'rnating):

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

Shu nuqtada, terminalda kirish uchun taklifni ko'rishingiz kerak. Terminalning diqqatini jalb qilish uchun qaytib kelishingiz mumkin.

mgetty

"M" modemni anglatadi. Ushbu dastur birinchi navbatda modemlardan iborat bo'lib, 2000 yil o'rtalaridan boshlab matn terminallari uchun foydalanish uchun qayta kompilyatsiya qilishni talab qiladi (agar siz apparat oqimini boshqarishdan foydalanmasangiz va odatda qo'lda ishlaydigan kabel kerak bo'lsa). To'g'ridan-to'g'ri ulangan terminallar uchun hujjatlar uchun qo'llanmaning "To'g'ridan-to'g'ri" qismiga qarang: mgetty.texi.

/etc/mgetty/mgetty.config ning so'nggi satrlarini terminali sozlash uchun bir misolga qarang. Agar siz "toggle-dtr no" deb nomlanmasa, sizda modem bor va DTR pinini kompyuterda mavjud bo'lmagan modemni qayta tiklashga urinib ko'ring. Boshqa gettyslardan farqli o'laroq, mgetty bir terminalni hech kimga tegmaguncha uni terminalga biriktirmaydi. Bunday holatlar sodir bo'lgunga qadar terminalda yoki plyonka uchun . / Var / log / mgetty / dagi yozuvlar faqat e'tiborga olmaydigan modemlarga tegishli bo'lgan bir necha ogohlantirish xabarlarini ko'rsatishi mumkin.

/ Etc / inittab-ga qo'ygan oddiy qatorning misoli :

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