Linux'ta Metin Terminalleri

14.1 Getty (/ etc / inittab içinde kullanılır)

Getty'e Giriş

Oturum açma işleminin, bilgisayar başlatıldığında (veya çalışma düzeylerini değiştirdiğinde) bir seri bağlantı noktasında (ve buna bağlı terminalde) çalıştırılması için, / etc / inittab dosyasına bir getty komutu konulmalıdır. Getty'i komut satırından çalıştırmak sorunlara neden olabilir (bkz. Getty komut satırından çalıştırılıyorsa: Programlar nedenini görmek için durur). Getty bir TTY (bir terminal) gidiyor. Her terminalin kendi getty komutuna ihtiyacı var. Ayrıca her / etc / inittab dosyasında konsol için en az bir getty komutu bulunur. Bunu bulun ve yanındaki gerçek terminaller için getty komutlarını koyun. Bu dosya, metin terminalleri için örnek getty satırları içerebilir, böylece yapmanız gereken tek şey onları rahatsız etmemek (baştaki #) kaldırmak ve birkaç argümanı değiştirmek.

İzin verilen argümanlar hangi getty kullandığınıza bağlıdır:
Doğrudan bağlı terminaller için en iyi iki gettys vardır:

Çevirmeli modemler için en iyi iki gettys (doğrudan bağlı terminallerden kaçının):

Gerçek bir metin terminali kullanmazsanız kullanılacak basit gettys. Çoğu Linux kullanıcısı bunlardan birini monitörlerinde kullanır:

Linux dağıtımınız metin terminalleri için ps_getty veya agetty ile birlikte gelebilir. Bazı dağıtımlar ne tedarik ediyor. Ne yazık ki, çoğu zaman sadece "getty" olarak adlandırırlar, böylece / etc / inittab içinde koyduğunuz argümanlardan beri hangisinin bulunduğunu belirlemeniz gerekebilir. Debian agetty'yi kullanır (util-linux paketinde). RedHat ve Fedora şu adreste bulunan ps_getty'yi kullanıyor: ps_getty

Son hangi çare olduğunu belirlemek için son çare olarak, yürütülebilir kodunu (genellikle / sbin) kontrol edebilirsiniz. ps_getty bu koda gömülü / etc / gettydefs içerir. Bunu aramak için / sbin adresine gidin ve şunu yazın:
teller getty | grep getty
Eğer getty aslında agetty ise, yukarıdaki hiçbir şeyle sonuçlanmayacaktır. Ancak agetty yazarak varsa:
getty -h
seçenekleri göstermelidir [-hiLmw].

Eğer getty'ye sahip değilseniz, diğer dağıtımları ve RPM ile Debian paketleri arasında dönüşecek yabancı programı kontrol edin. Kaynak kodu Getty Software'den indirilebilir.

Modem kontrol hatlarını kullanmıyorsanız (örneğin sadece 3 iletkenin minimum sayısını kullanıyorsanız: iletme, alma ve ortak sinyal alanı), bunu bir "yerel" bayrak kullanarak getty'ye bildirmeniz gerekir. Bunun biçimi hangi getty'yi kullandığınıza bağlıdır.

Getty giriş yaptıktan sonra çıkar (ve yeniden açılabilir)

Giriş yaptıktan sonra getty işleminin artık çalışmadığını fark edeceksiniz ("top", "ps -ax" veya "ptree" kullanarak). Ona ne oldu? Kabuğun öldürülmesi durumunda neden getty yeniden başlıyor? İşte nedeni.

Kullanıcı adınızı yazdıktan sonra, getty onu alır ve kullanıcı adınızı söyleyen giriş programını çağırır. Getty işlemi, giriş işlemiyle değiştirilir. Giriş işlemi, şifrenizi sorar, kontrol eder ve şifre dosyanızda hangi süreç belirlenirse başlar. Bu süreç genellikle bash kabuğudur. Eğer öyleyse, bash giriş sürecini başlatır ve değiştirir. Bir işlemin bir diğerinin yerini aldığını ve bash kabuğu işleminin başlangıçta getty işlemi olarak başladığını unutmayın. Bunun etkileri aşağıda açıklanacaktır.

Şimdi / etc / inittab dosyasında, getty öldürülürse yeniden (yeniden başlatma) gerekiyordu. Getty'i arama hattında öyle yazıyor. Ancak bash kabuğunun (veya giriş işleminin) öldürülmesi halinde, getty respawns (yeniden başlatır). Niye ya? Eh, hem giriş süreci hem de bash getty ve devralma için değiştirmelerdir

* Metin Terminali Nasıl Yapılır Dizini

Sinyal bağlantıları selefleri tarafından kurulur. Aslında, detayları gözlemlerseniz, değiştirme işleminin orijinal işlemle aynı işlem kimliğine sahip olacağını fark edeceksiniz. Böylece bash, aynı işlem ID numarasıyla gizlenmiş bir çeşit getty'dir. Eğer bash öldürülürse, getty'nin öldürüldüğü gibi (getty artık çalışmıyor olsa da). Bu getty respawning ile sonuçlanır.

Biri çıktığında, bu seri bağlantı noktasındaki tüm işlemler bash kabuğu dahil olmak üzere öldürülür. Bu, modem tarafından bir DCD voltajı düşüşü ile seri bağlantı noktasına bir asıl sinyali gönderilirse (etkinleştirilmişse) de meydana gelebilir. DCD'de çıkış veya bırakma, getty respawning ile sonuçlanacaktır. Birisi, "üst" veya "öldür" komutundayken k tuşuna vb. Basarak bash'ı (veya giriş) manuel olarak öldürerek yeniden büyümeye zorlayabilir. Muhtemelen 9 no'lu sinyale (göz ardı edilemez) öldürmeniz gerekecektir.

Getty komut satırından çalışırsa: Programlar durur

Normalde getty'yi komut satırından değil / etc / inittab içinden çalıştırmalısınız veya terminalde çalışan bazı programlar beklenmedik şekilde askıya alınabilir (durdurulabilir). İşte nedeni (neden sizin için önemli değilse, sonraki bölüme geçin). Başka bir terminalin komut satırından ttyS1 için getty başlatırsanız, tty1 deyin, o zaman çalıştığı gerçek terminal ttyS1 olsa bile, "kontrol terminali" olarak tty1 olacaktır. Böylece yanlış kontrol terminali var. Ama eğer inittab dosyasında başlatılırsa, o zaman kontrol terminali olarak ttyS1 olacaktır (doğru).

Kontrol terminali yanlış olsa da, ttyS1'de oturum açma gayet iyi çalışıyor (ttyS1'i getty'ye bir argüman olarak verdiğiniz için). Kontrol terminali tty11 kalsa bile standart giriş ve çıkış ttyS1'e ayarlanmıştır. TtyS1'de çalıştırılan diğer programlar bu standart giriş / çıkışı (ttyS1'e bağlı) alabilir ve her şey yolunda olabilir. Ancak bazı programlar, yanlış olan kontrol terminallerinden (tty1) okumaya çalışırken hata yapabilirler. Şimdi tty1, bu programların tty1 tarafından arka planda çalıştırıldığını düşünebilir, bu nedenle tty1'den okumaya yönelik bir girişim (ttyS1 olmalıdır), okumaya çalışılan süreci durdurma ile sonuçlanır. (Bir arka plan sürecinin kontrol terminalinden okunmasına izin verilmez.). Ekranda " [1] + Durdu " gibi bir mesaj görebilirsiniz. Bu noktada, yanlış terminal aracılığıyla sizinle iletişim kurmaya çalışan bir süreçle etkileşimde bulunamayacağınız için takıldınız. Tabii ki bundan kurtulmak için başka bir terminale gidebilir ve süreci öldürebilirsin.

agetty (getty ismini verilebilir)

/ Etc / inittab dosyasındaki örnek bir satır:

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

S1 ttyS1'den. 23, getty'nin run level 2 veya 3'e girdikten sonra çalıştırıldığı anlamına gelir. Respawn, getty (veya bash gibi yer değiştiren bir süreç) öldürülürse, getty otomatik olarak yeniden başlatılır (yeniden respawn) demektir. / sbin / getty getty komutudur. -L Yerel anlamına gelir (modem kontrol sinyallerini dikkate almayın). -h (örnekte gösterilmemiştir) donanım akış kontrolünü (stty crtscts ile aynı) sağlar. 19200 baud hızıdır. ttyS1, / dev / ttyS1 (MS-DOS'ta COM2) anlamına gelir. vt102 terminalin tipi ve bu getty, bu değere çevre değişkenini TERM ayarlayacaktır. Yapılandırma dosyası yok. Getty düzenledikten sonra komut satırında "init q" yazın ve bir giriş istemi görmelisiniz.

Agetty'nin parite sorunlarının otomatik algılanması

Agetty programı, terminal içinde ayarlanan parite (parite dahil olmaksızın) otomatik olarak tespit etmeye çalışacaktır. 8 bit veri baytını artı 1 bitlik parite desteklemiyor. 8 bit veri baytına (artı parite) bakın. Parite ayarlamak için stty'yi kullanırsanız, agetty otomatik olarak onu böler. Bu , başlangıçta parite bitinin bir veri biti gibi geçmesini ister. Bunun nedeni, giriş adınızı yazarken son parçayı (muhtemelen bir parite biti) alması ve parite otomatik olarak algılanmasıdır. Böylece parite kullanırsanız, sadece metin terminali içinde etkinleştirin ve agetty'nin bunu otomatik olarak algılamasına ve bilgisayarda ayarlamasına izin verin. Terminaliniz alınan pariteyi destekliyorsa, siz bir şey yazana kadar giriş istemi arayacaktır.

paritesi. Bozuk istemi ziyaretçileri, vb. Giriş yapmaya çalışmasını engeller. İstediğin şey bu olabilir.

Parite otomatik algılama ile ilgili bazen bir sorun var. Bu, oturum açma adınızı ilk kez girdikten sonra, agetty oturum açma işlemini bitirmek için oturum açma programını başlatır. Maalesef, giriş programı parsayı algılayamaz, böylece getty programı parite belirleyemediyse, oturum açma belirleyemez ya. İlk giriş denemesi başarısız olursa, giriş tekrar denemenize izin verir, vb. (Tümü parite yanlış ayarlanmış). Sonuç olarak, birtakım başarısız girişimlerden sonra (ya da bir zaman aşımından sonra) agetty tekrar başlayacak ve giriş dizilerini baştan başlayacaktır. Getty yeniden çalıştığında, ikinci denemede parite tespit edilebilir, böylece her şey daha sonra işe yarayabilir.

Yanlış eşitlikle, oturum açma programı yazdığınız şeyi doğru olarak okuyamıyor ve oturum açamıyorsunuz. Terminaliniz destekli eşlik almayı destekliyorsa, bozuk bir ekran görmeye devam edeceksiniz. Getty parite tespitinde başarısız olursa, / etc / issue dosyası genellikle komut isteminden hemen önce ekrana dökülür ve ekranda daha fazla bozuk sözcük görünebilir.

Neden agetty yazılan ilk harfle parite tespit edemiyor? İşte bir örnek: Parite biti 0 (yüksek sıralı bit) ve tek sayı 1 bite sahip 8 bitlik bir bayt olduğunu varsayalım. Parite nedir? Eh, 1 bit tek sayı, bu garip parite ima eder. Ama aynı zamanda sadece parite olmayan 8-bitlik bir karakter olabilir. Hangisini belirlemek için henüz bir yol yok. Ama şimdiye kadar eşitlik olasılığını ortadan kaldırdık. Parite tespiti böylece bir eleme süreci ile devam eder.

Eğer yazılan bir sonraki bayt ilki diğerine benziyorsa ve sadece eşitlik olasılığını da ortadan kaldırırsa, parite tespit etmek hala imkansızdır. Bu durum süresiz olarak devam edebilir ve nadir durumlarda oturum açma adınızı değiştirene kadar oturum başarısız olur. Eğer agetty 1'lik bir parite buluyorsa, bunun bir parite biti olduğunu ve 8-bitlik bir karakterin yüksek mertebeli bir bit olduğunu varsaymayacaktır. Böylece, kullanıcı adınızda meta-karakterler (yüksek bit kümesi) kullanmadığınız varsayılır (yani adınız ASCII'de).

Biri çeşitli yollarla bir "giriş döngüsü" içine girebilir. Giriş adınız için sadece tek bir harf veya iki tane yazdığınızı ve geri dönüşün olduğunu varsayalım. Eğer bu harfler parite tespiti için yeterli değilse, o zaman parite tespit edilmeden önce giriş çalışır. Bazen bu sorun, agetty ilk açıldığında terminalin açık ve / veya bağlı olmaması durumunda gerçekleşir.

Eğer bu "giriş döngüsünde" takılırsanız, getty oturum açma komutunu alana kadar birkaç kez geri dönüş tuşuna basmak yeterli olacaktır. Bir başka yol ise bir mola için bir dakika kadar beklemektir. Ardından getty programı ile getty giriş talebi ekrana getirilecek ve tekrar giriş yapmayı deneyebilirsiniz.

8 bit veri baytları (artı parite)

Ne yazık ki, agetty bu pariteyi tespit edemez. 1999'un sonlarından itibaren paritenin otomatik algılanmasını devre dışı bırakma seçeneğine sahip değildir ve böylece yanlış parite tespit edilir. Sonuç, giriş işleminin bozuk olması ve paritenin yanlış ayarlanmasıdır. Bu nedenle, parite ile 8 bit veri baytlarını kullanmayı denemek mümkün görünmüyor.

getty (getty_ps'in bir parçası)

(Bunun çoğu Greg Hankins'in eski Seri-NASIL belgesinden)
Bu getty için hem bir yapılandırma dosyasına girişler koymanız ve / etc / inittab dosyasına bir giriş eklemeniz gerekir. Burada, terminaliniz için kullanacağınız / etc / gettydefs yapılandırma dosyasına koyduğunuz bazı örnek girdiler verilmiştir .

# 38400 bps Dumb Terminal girişi DT38400 # B38400 CS8 CLOCAL # B38400 SANE -ISTRIP CLOCAL # @ S @L girişi: # DT38400 # 19200 bps Dumb Terminal girişi DT19200 # B19200 CS8 CLOCAL # B19200 SANE -ISTRIP CLOCAL # @ S @L girişi: # DT19200 # 9600 bps Dumb Terminal girişi DT9600 # B9600 CS8 CLOCAL # B9600 SANE -ISTRIP CLOCAL # @ S @L girişi: # DT9600

DT38400, DT19200, vb. Sadece etiketlerdir ve / etc / inittab içinde kullandığınız ile aynı olmalıdır.

İsterseniz, giriş afişinde getty baskı ilginç şeyler yapabilirsiniz. Örneklerimde sistem ismim ve seri hattım var. Başka şeyler ekleyebilirsiniz: [blockquote

gölge = Evet] @B Akım (@B görülür görüldüğünde değerlendirilir) bps oranı. @D Geçerli tarih, AA / GG / YY. @L Getty'nin bağlı olduğu seri hat. @S Sistem adı. @T Şu anki saat, HH: MM: SS (24 saat). @U Şu anda oturum açmış kullanıcıların sayısı. Bu, null olmayan bir ut_name alanı olan / etc / utmp dosyasındaki girişlerin sayısıdır. @V Varsayılan dosyada verildiği gibi VERSION değeri. Tek bir '@' karakteri görüntülemek için '\ @' veya '@@' kullanın.

/ Etc / gettydefs dosyasını düzenlemeyi tamamladığınızda , söz diziminin doğru yapıldığını doğrulayabilirsiniz:

linux # getty -c / etc / gettydefs

Terminalinizin ( /etc/default/{uu}getty.ttyS N veya /etc/conf.{uu}getty.ttyS N gibi ) eklendiği seri bağlantı noktası için başka bir getty veya uugetty yapılandırma dosyası olmadığından emin olun. Bu muhtemelen bir terminalde çalışan getty ile müdahale edecektir. Çıktığında bu tür çakışan dosyaları kaldırın.

Seri bağlantı noktasında getty'yi çalıştırmak için / etc / inittab dosyanızı düzenleyin (ortamınız için doğru bilgileri kullanarak bağlantı noktası, hız ve varsayılan terminal türü):

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

Bu noktada, terminalinizde bir giriş istemi görmelisiniz. Terminalin dikkatini çekmek için geri dönmek zorunda kalabilirsiniz.

mgetty

"M" modemi gösterir. Bu program öncelikle modemler içindir ve 2000'in ortasından itibaren metin terminalleri için kullanmanız için yeniden derlemeyi gerektirir (donanım akış kontrolünü kullanmazsanız - ve genellikle el yapımı bir kablo gerektirir). Doğrudan bağlı terminaller için, kılavuzun "Doğrudan" bölümüne bakınız: mgetty.texi.

Bir terminal için yapılandırma örneği için /etc/mgetty/mgetty.config dosyasının son satırlarına bakın. Eğer "toggle-dtr no" dediğiniz sürece, bir modeminiz olduğunu ve var olmayan modemi sıfırlamak için boş bir girişimde PC'deki DTR pimini düşüreceğinizi (reddedeceğinizi) düşüneceksiniz. Diğer gettys'lerin aksine, mgetty, bir terminalin herhangi bir anahtarına ulaşana kadar kendisini bir terminale takmayacak, böylece göreceksiniz. bu gerçekleşene kadar terminalde üst veya ps için . / Var / log / mgetty / içindeki günlükler, yalnızca görmezden gelebilecek modemler için geçerli olan birkaç uyarı mesajı gösterebilir.

İşte / etc / inittab içine koyduğunuz basit bir satır örneği :

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