Terminal-Teks di Linux

14.1 Getty (digunakan dalam / etc / inittab)

Pengenalan kepada Getty

Untuk mempunyai proses masuk dijalankan pada port bersiri (dan terminal yang disambungkan kepadanya) apabila komputer dimulakan (atau beralih tahap larian) perintah getty mesti dimasukkan ke dalam fail / etc / inittab. Running getty dari baris arahan boleh menyebabkan masalah (lihat Jika getty berjalan dari baris arahan: Program berhenti untuk melihat mengapa). Getty Mendapatkan TTY (terminal) pergi. Setiap terminal memerlukan perintah gettynya sendiri. Terdapat juga sekurang-kurangnya satu perintah getty untuk konsol dalam setiap fail / etc / inittab. Cari ini dan letakkan arahan getty untuk terminal sebenar di sebelahnya. Fail ini mungkin mengandungi garisan sampel getty untuk terminal teks yang dikomentari supaya semua yang anda perlu lakukan adalah untuk mengosongkannya (alihkan # utama) dan ubah beberapa argumen.

Argumen-argumen yang dibenarkan bergantung kepada yang digunakan oleh anda:
Dua terbaik untuk terminal yang disambungkan secara langsung adalah:

Dua terbaik untuk modem dail dalam (mengelakkan untuk terminal yang disambungkan secara langsung) adalah:

Gettys mudah untuk digunakan jika anda tidak menggunakan terminal teks sebenar. Kebanyakan pengguna Linux menggunakan salah satu daripada ini di monitor mereka:

Pengedaran Linux anda mungkin datang dengan sama ada ps_getty atau agetty untuk terminal teks. Beberapa pengedaran tidak membekalkan. Malangnya, mereka sering menyebutnya "getty" jadi anda mungkin perlu menentukan mana yang anda miliki kerana hujah-hujah yang anda masukkan selepas itu dalam / etc / inittab berbeza. Debian menggunakan agetty (dalam pakej util-linux). RedHat dan Fedora menggunakan ps_getty yang berada di: ps_getty

Sebagai usaha terakhir untuk cuba menentukan yang anda ada, anda mungkin menyemak kod yang boleh dieksekusi (biasanya dalam / sbin). ps_getty mempunyai / etc / gettydefs tertanam dalam kod ini. Untuk mencarinya, pergi ke / sbin dan ketik:
tali getty | grep getty
Jika getty sebenarnya agetty di atas akan mengakibatkan apa-apa. Bagaimanapun, jika anda mempunyai menaip agetty:
getty -h
harus menunjukkan pilihan [-hiLmw].

Sekiranya anda tidak mempunyai getty yang anda mahu menyemak pengedaran lain dan program alien untuk menukar pakej RPM dan Debian. Kod sumber boleh dimuat turun dari Perisian Getty.

Sekiranya anda tidak menggunakan talian kawalan modem (contohnya jika anda hanya menggunakan nombor minimum 3 konduktor: menghantar, menerima, dan isyarat biasa) anda harus membiarkan getty tahu ini dengan menggunakan bendera "setempat". Format ini bergantung kepada yang digunakan oleh anda.

Keluar Getty selepas login (dan boleh respawn)

Selepas anda masuk, anda akan melihat (dengan menggunakan "atas", "ps -ax", atau "ptree") bahawa proses getty tidak lagi berjalan. Apa yang berlaku dengannya? Mengapa getty bermula semula jika shell anda dibunuh? Inilah sebabnya.

Selepas anda menaip nama pengguna anda, getty memakannya dan memanggil program login memberitahu nama pengguna anda. Proses getty digantikan dengan proses log masuk. Proses log masuk meminta kata laluan anda, cek dan mulakan apa proses yang ditentukan dalam fail kata laluan anda. Proses ini selalunya shell bash. Jika ya, bash bermula dan menggantikan proses log masuk. Perhatikan bahawa satu proses menggantikan satu lagi dan proses bash shell asalnya bermula sebagai proses getty. Implikasi ini akan dijelaskan di bawah.

Sekarang dalam fail / etc / inittab, getty sepatutnya respawn (mulakan semula) jika dibunuh. Ia mengatakan demikian pada baris yang memanggil getty. Tetapi jika shell bash (atau proses login) dibunuh, getty respawns (restart). Mengapa? Nah, proses log masuk dan bash adalah pengganti untuk getty dan mewarisi

* Indeks Teks Bagaimana Untuk Indeks

sambungan isyarat yang ditubuhkan oleh pendahulunya. Malah jika anda melihat butiran yang anda akan perhatikan bahawa proses penggantian akan mempunyai ID proses yang sama seperti proses asal. Oleh itu, bash adalah jenis getty yang menyamar dengan nombor ID proses yang sama. Sekiranya bash terbunuh ia sama seperti getty terbunuh (walaupun getty tidak berjalan lagi). Ini mengakibatkan respawning getty.

Apabila seseorang log keluar, semua proses pada port bersiri itu terbunuh termasuk shell bash. Ini juga mungkin berlaku (jika diaktifkan) jika isyarat hangup dihantar ke port siri dengan seting voltan DCD oleh modem. Sama ada logout atau drop in DCD akan menyebabkan respitning getty. Seseorang boleh memaksa getty untuk memberi respon dengan secara manual membunuh bash (atau log masuk) sama ada dengan memukul kekunci k, dan lain-lain semasa berada di "atas" atau dengan "membunuh" arahan. Anda mungkin perlu membunuhnya dengan isyarat 9 (yang tidak boleh diabaikan).

Jika getty berjalan dari baris arahan: Program akan berhenti

Anda biasanya perlu menjalankan getty dari dalam / etc / inittab dan bukan dari baris perintah atau sebaliknya beberapa program yang berjalan di terminal mungkin secara tidak dijangka digantung (dihentikan). Inilah sebabnya (langkau ke bahagian seterusnya jika mengapa tidak penting kepada anda). Jika anda mula getty untuk mengatakan ttyS1 dari baris arahan terminal lain, katakan tty1, maka ia akan mempunyai tty1 sebagai "terminal kawalan "nya walaupun terminal sebenarnya berjalan pada ttyS1. Oleh itu ia mempunyai terminal kawalan yang salah. Tetapi jika ia bermula di dalam fail inittab maka ia akan mempunyai ttyS1 sebagai terminal kawalan (betul).

Walaupun terminal kawalan salah, log masuk di ttyS1 berfungsi dengan baik (kerana anda memberikan ttyS1 sebagai hujah untuk getty). Input dan output standard ditetapkan kepada ttyS1 walaupun terminal kawalan tetap tty11. Program lain yang dijalankan di ttyS1 mungkin mewarisi input / output standard ini (yang disambungkan ke ttyS1) dan semuanya adalah OK. Tetapi sesetengah program mungkin membuat kesilapan cuba membaca dari terminal kawalan mereka (tty1) yang salah. Sekarang tty1 mungkin berfikir bahawa program-program ini sedang dijalankan di latar belakang oleh tty1 sehingga percubaan untuk membaca dari tty1 (sepatutnya ttyS1) menyebabkan berhenti proses yang cuba dibaca. (Proses latar belakang tidak dibenarkan membaca dari terminal kawalannya.). Anda mungkin melihat mesej seperti: " [1] + Berhenti " di skrin. Pada ketika ini anda terjebak kerana anda tidak dapat berinteraksi dengan proses yang cuba berkomunikasi dengan anda melalui terminal yang salah. Sudah tentu untuk melepaskan diri dari ini, anda boleh pergi ke terminal lain dan membunuh proses itu, dsb.

agetty (boleh dinamakan getty)

Baris contoh dalam / etc / inittab:

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

S1 adalah dari ttyS1. 23 bermakna getty dijalankan semasa memasukkan run level 2 atau 3. respawn bermakna bahawa jika getty (atau proses yang menggantikannya seperti bash) terbunuh, getty akan secara automatik bermula (respawn) lagi. / sbin / getty ialah perintah getty. The -L bermaksud Local (mengabaikan isyarat kawalan modem). -h (tidak ditunjukkan dalam contoh) membolehkan kawalan aliran perkakasan (sama seperti crtscts stty). 19200 adalah kadar baud. ttyS1 bermaksud / dev / ttyS1 (COM2 dalam MS-DOS). vt102 adalah jenis terminal dan getty ini akan menetapkan variabel alam sekitar TERM kepada nilai ini. Tiada fail konfigurasi. Taip "init q" pada baris arahan selepas mengedit getty dan anda harus melihat log masuk.

Agetty & # 39; s auto-pengesanan masalah pariti

Program agetty akan cuba untuk mengesan secara automatik set pariti di dalam terminal (termasuk pariti tidak). Ia tidak menyokong bait data 8-bit ditambah pariti 1-bit. Lihat bait data 8 bit (tambah pariti). Jika anda menggunakan stty untuk menetapkan pariti, agetty akan secara automatik menyatukannya kerana ia pada mulanya mahu sedikit pariti datang melalui seolah-olah ia adalah sedikit data. Ini kerana ia perlu mendapatkan bit terakhir (mungkin sedikit pariti) semasa anda menaip nama log masuk anda supaya ia dapat mengesan pariti secara automatik. Oleh itu jika anda menggunakan pariti, aktifkannya di dalam terminal teks dan biarkan agetty auto-mengesannya dan tetapkannya di komputer. Sekiranya terminal anda menyokong pariti yang diterima, permintaan log masuk akan kelihatan kacau sehingga anda menaip sesuatu supaya getty dapat mengesannya

pariti. Gesaan yang tidak jelas akan menghalang pengunjung, dan lain-lain daripada cuba masuk. Itu boleh jadi apa yang anda mahukan.

Kadang kala terdapat masalah dengan pengesanan automatik pariti. Ini terjadi kerana selepas anda mula menaip nama login anda, agetty memulakan program login untuk menyelesaikan log masuk anda. Malangnya, program login tidak dapat mengesan paritas jadi jika program getty gagal menentukan paritas maka login tidak akan dapat menentukan sama ada. Sekiranya percubaan masuk pertama gagal, log masuk akan membolehkan anda mencuba lagi, dan lain-lain (semua dengan pariti yang ditetapkan salah). Akhirnya, selepas beberapa percubaan gagal untuk log masuk (atau selepas tamat tempoh) agetty akan bermula sekali lagi dan memulakan urutan log masuk sekali lagi. Apabila getty berlari lagi, ia mungkin dapat mengesan pariti pada cubaan kedua supaya semuanya boleh berfungsi OK.

Dengan pariti yang salah, program log masuk tidak boleh membaca dengan tepat apa yang anda taip dan anda tidak dapat log masuk. Jika terminal anda menyokong pariti yang diterima, anda akan terus melihat skrin yang kacau. Jika getty tidak dapat mengesan pariti fail / etc / issue biasanya dibuang ke skrin sebelum sebelum prompt, jadi kata-kata yang lebih lantang muncul di skrin.

Mengapa tidak dapat mengesan pariti dengan huruf pertama yang ditaip? Berikut adalah contoh: Katakan ia mengesan bait 8-bit dengan bit pariti 0 (bit pesanan tinggi) dan dengan nombor ganjil 1-bits. Apa pariti apa? Nah, bilangan ganjil 1 bit menunjukkan bahawa ia adalah pariti ganjil. Tetapi ia juga boleh menjadi watak 8-bit tanpa pariti. Tidak ada cara untuk menentukan sejauh mana. Tetapi setakat ini kita telah menghapuskan kemungkinan pariti walaupun. Pengesanan pariti seterusnya diteruskan dengan proses penghapusan.

Jika byte seterusnya ditaip serupa dengan yang pertama dan juga hanya menghapus kemungkinan kemungkinan pariti, masih mustahil untuk menentukan pariti. Keadaan ini boleh terus berlarutan dan dalam kes yang jarang berlaku, login akan gagal sehingga anda menukar nama login anda. Jika agetty mendapati sedikit pariti 1, ia akan mengandaikan bahawa ini adalah sedikit pariti dan bukan bit pesanan tinggi aksara 8-bit. Oleh itu, anda menganggap bahawa anda tidak menggunakan aksara meta (set bit tinggi) di nama pengguna anda (iaitu nama anda dalam ASCII).

Orang mungkin masuk ke dalam "log masuk" dalam pelbagai cara. Katakan anda hanya menaip huruf tunggal atau dua untuk nama log masuk anda dan kemudian tekan kembali. Jika huruf-huruf ini tidak mencukupi untuk pengesanan pariti, maka login berjalan sebelum paritas telah dikesan. Kadang-kadang masalah ini berlaku jika anda tidak mempunyai terminal di atas dan / atau disambungkan ketika agetty pertama kali dimulai.

Sekiranya anda terjebak dalam "log masuk" ini jalan keluarnya adalah untuk memukul kunci kembali beberapa kali sehingga anda mendapatkan log masuk getty. Satu lagi cara ialah hanya menunggu satu minit atau lebih untuk masa tamat. Kemudian permintaan log masuk getty akan diletakkan pada skrin oleh program getty dan anda boleh cuba lagi untuk log masuk.

8 bit data bait (tambah pariti)

Malangnya, agetty tidak dapat mengesan pariti ini. Sehingga akhir tahun 1999 ia tidak mempunyai pilihan untuk melumpuhkan pengesanan automatik pariti dan dengan itu akan mengesan pariti yang salah. Hasilnya ialah proses log masuk akan rosak dan pariti akan ditetapkan salah. Oleh itu, ia tidak sesuai untuk cuba menggunakan 8 bit data bytes dengan pariti.

getty (sebahagian daripada getty_ps)

(Kebanyakannya adalah dari Serial-HOWTO lama oleh Greg Hankins)
Untuk ini kita perlu memasukkan kedua-dua entri dalam fail konfigurasi dan menambah entri dalam / etc / inittab . Berikut adalah beberapa penyertaan contoh untuk digunakan untuk terminal anda yang anda masukkan ke dalam fail konfigurasi / etc / gettydefs .

# 38400 bps Dumb Terminal entry DT38400 # B38400 CS8 CLOCAL # B38400 SANE -ISTRIP CLOCAL # @ S @L login: # DT38400 # 19200 bps Dumb Terminal entry DT19200 # B19200 CS8 CLOCAL # B19200 SANE -ISTRIP CLOCAL # @ S @L login: # DT19200 # 9600 bps Kemasukan Dumb Terminal DT9600 # B9600 CS8 CLOCAL # B9600 SANE -ISTRIP CLOCAL # @ S @L login: # DT9600

Perhatikan bahawa DT38400, DT19200, dan lain-lain hanya label dan mesti sama dengan yang anda gunakan dalam / etc / inittab .

Sekiranya anda mahu, anda boleh membuat cetakan getty yang menarik dalam banner log masuk. Dalam contoh saya, saya mempunyai nama sistem dan baris bersiri dicetak. Anda boleh menambah perkara lain: [blockquote

teduh = ya] @B Semasa (dinilai pada masa @B dilihat) kadar bps. @D Tarikh semasa, dalam MM / DD / YY. @L Baris siri yang getty dilampirkan. @S Nama sistem. @ T Masa semasa, dalam HH: MM: SS (24 jam). @U Bilangan pengguna yang dilog masuk sekarang. Ini adalah bilangan bilangan penyertaan dalam fail / etc / utmp yang mempunyai medan ut_name yang tidak sah. @V Nilai VERSION, seperti yang diberikan dalam fail lalai. Untuk memaparkan watak '@' tunggal, gunakan '@ @' atau '@@'.

Apabila anda selesai mengedit / etc / gettydefs , anda boleh mengesahkan bahawa sintaks adalah betul dengan melakukan:

linux # getty -c / etc / gettydefs

Pastikan tiada fail konfigurasi getty atau uugetty lain untuk port bersiri yang terminal anda dilampirkan seperti ( /etc/default/{uu}getty.ttyS N atau /etc/conf.{uu}getty.ttyS N ) , kerana ini mungkin akan mengganggu menjalankan getty pada terminal. Keluarkan fail yang bercanggah itu jika mereka keluar.

Edit fail / etc / inittab anda untuk menjalankan getty pada port siri (menggantikan maklumat yang betul untuk persekitaran anda - pelabuhan, kelajuan, dan jenis terminal lalai):

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

Pada ketika ini, anda perlu melihat log masuk pada terminal anda. Anda mungkin perlu memukul kembali untuk mendapatkan perhatian terminal.

mgetty

"M" bermaksud modem. Program ini terutamanya untuk modem dan pada pertengahan tahun 2000 ia memerlukan pengumpulan semula untuk menggunakannya untuk terminal teks (kecuali jika anda menggunakan kawalan aliran perkakasan - dan yang biasanya memerlukan kabel buatan tangan). Untuk dokumentasi untuk terminal yang disambungkan secara langsung lihat bahagian "Langsung" manual: mgetty.texi.

Lihat garis akhir /etc/mgetty/mgetty.config untuk contoh mengkonfigurasinya untuk terminal. Kecuali anda mengatakan "toggle-dtr no" ia akan berfikir bahawa anda mempunyai modem dan drop (menafikan) PIN DTR di PC dalam usaha sia-sia untuk menetapkan semula modem yang tidak wujud. Berbeza dengan gettys lain, mgetty tidak akan melampirkan dirinya ke terminal sehingga seseorang memukul mana-mana kunci terminal itu sehingga anda akan melihatnya? untuk terminal di atas atau ps sehingga ini berlaku. Log dalam / var / log / mgetty / mungkin menunjukkan beberapa mesej amaran yang hanya berkaitan dengan modem yang anda boleh abaikan.

Berikut adalah contoh garis mudah yang anda masukkan dalam / etc / inittab:

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