Teks-Terminal di Linux

14.1 Getty (digunakan dalam / etc / inittab)

Pengantar Getty

Agar proses login berjalan pada port serial (dan terminal terhubung dengannya) ketika komputer dinyalakan (atau switch run level), perintah getty harus dimasukkan ke file / etc / inittab. Menjalankan getty dari baris perintah dapat menyebabkan masalah (lihat Jika getty dijalankan dari baris perintah: Program berhenti untuk melihat alasannya). Getty GETs a TTY (terminal) pergi. Setiap terminal membutuhkan perintah getty sendiri. Ada juga setidaknya satu perintah getty untuk konsol di setiap file / etc / inittab. Temukan ini dan masukkan perintah getty untuk terminal yang sebenarnya di sebelahnya. File ini mungkin berisi garis getty sampel untuk terminal teks yang dikomentari sehingga yang perlu Anda lakukan adalah menghapus tanda komentar mereka (menghapus # yang terkemuka) dan mengubah beberapa argumen.

Argumen yang diizinkan bergantung pada getty mana yang Anda gunakan:
Dua gettys terbaik untuk terminal terhubung langsung adalah:

Dua gettys terbaik untuk modem dial-in (hindari terminal yang terhubung langsung) adalah:

Gettys sederhana untuk digunakan jika Anda tidak menggunakan terminal teks nyata. Sebagian besar pengguna Linux menggunakan salah satunya di monitor mereka:

Distribusi Linux Anda mungkin datang dengan ps_getty atau agetty untuk teks-terminal. Beberapa distribusi tidak menyediakan keduanya. Sayangnya, mereka sering hanya menyebutnya "getty" sehingga Anda mungkin perlu menentukan yang mana yang Anda miliki sejak argumen yang Anda masukkan setelahnya di / etc / inittab berbeda. Debian menggunakan agetty (dalam paket util-linux). RedHat dan Fedora menggunakan ps_getty yang ada di: ps_getty

Sebagai usaha terakhir untuk mencoba menentukan getty mana yang Anda miliki, Anda bisa mengecek kode executable-nya (biasanya di / sbin). ps_getty memiliki / etc / gettydefs yang disematkan dalam kode ini. Untuk mencarinya, masuk ke / sbin dan ketik:
string getty | grep getty
Jika getty sebenarnya agetty di atas tidak akan menghasilkan apa-apa. Namun jika Anda memiliki ketikan agetty:
getty-h
harus menunjukkan opsi [-hiLmw].

Jika Anda tidak memiliki getty Anda ingin memeriksa distribusi lain dan program alien untuk mengkonversi antara paket RPM dan Debian. Kode sumber dapat diunduh dari Getty Software.

Jika Anda tidak menggunakan jalur kontrol modem (misalnya jika Anda hanya menggunakan jumlah minimal 3 konduktor: mengirim, menerima, dan sinyal umum), Anda harus membiarkannya tahu ini dengan menggunakan bendera "lokal". Format ini tergantung pada getty mana yang Anda gunakan.

Getty keluar setelah login (dan dapat respawn)

Setelah Anda masuk, Anda akan melihat (dengan menggunakan "top", "ps -ax", atau "ptree") bahwa proses getty tidak lagi berjalan. Apa yang terjadi dengannya? Mengapa getty restart lagi jika shell Anda terbunuh? Inilah alasannya.

Setelah Anda mengetikkan nama pengguna Anda, getty mengambilnya dan memanggil program login yang memberitahukan nama pengguna Anda. Proses getty digantikan oleh proses login. Proses login meminta kata sandi Anda, periksa dan mulai proses apa pun yang ditentukan dalam file kata sandi Anda. Proses ini sering merupakan bash shell. Jika demikian, bash dimulai dan menggantikan proses masuk. Perhatikan bahwa satu proses menggantikan yang lain dan proses bash shell awalnya dimulai sebagai proses getty. Implikasi dari ini akan dijelaskan di bawah ini.

Sekarang di file / etc / inittab, getty seharusnya respawn (restart) jika terbunuh. Ia mengatakan demikian pada garis yang memanggil getty. Tetapi jika shell bash (atau proses login) terbunuh, getty respawns (restart). Mengapa? Nah, proses login dan bash adalah pengganti untuk getty dan inherit

* Text Terminal How-To Index

koneksi sinyal didirikan oleh pendahulu mereka. Bahkan jika Anda mengamati rincian Anda akan melihat bahwa proses penggantian akan memiliki ID proses yang sama dengan proses awal. Jadi bash adalah semacam getty yang menyamar dengan nomor ID proses yang sama. Jika bash dibunuh, sama seperti getty terbunuh (meskipun getty tidak berjalan lagi). Ini menghasilkan getty respawning.

Ketika salah satu log keluar, semua proses pada port serial tersebut terbunuh termasuk shell bash. Ini juga dapat terjadi (jika diaktifkan) jika sinyal hangup dikirim ke port serial oleh setetes tegangan DCD oleh modem. Entah logout atau drop di DCD akan menghasilkan getty respawning. Satu dapat memaksa getty untuk respawn dengan secara manual membunuh bash (atau login) baik dengan menekan kunci k, dll sementara di "atas" atau dengan "membunuh" perintah. Anda mungkin harus membunuhnya dengan sinyal 9 (yang tidak bisa diabaikan).

Jika getty dijalankan dari baris perintah: Program dihentikan

Anda biasanya harus menjalankan getty dari dalam / etc / inittab dan bukan dari baris perintah atau beberapa program yang berjalan di terminal dapat secara tidak terduga dihentikan (dihentikan). Inilah alasannya (lompat ke bagian berikutnya jika alasannya tidak penting bagi Anda). Jika Anda memulai getty untuk mengatakan ttyS1 dari baris perintah dari terminal lain, katakan tty1, maka itu akan memiliki tty1 sebagai "terminal pengendali" meskipun terminal yang sebenarnya dijalankannya adalah ttyS1. Dengan demikian ia memiliki terminal pengendali yang salah. Tetapi jika itu dimulai di dalam file inittab maka akan memiliki ttyS1 sebagai terminal pengendali (yang benar).

Meskipun terminal pengendali salah, login di ttyS1 berfungsi dengan baik (karena Anda memberi ttyS1 sebagai argumen untuk getty). Input dan output standar diatur ke ttyS1 meskipun terminal kontrol tetap tty11. Program lain yang dijalankan pada ttyS1 dapat mewarisi input / output standar ini (yang terhubung ke ttyS1) dan semuanya OK. Tetapi beberapa program mungkin membuat kesalahan dengan mencoba membaca dari terminal pengendali mereka (tty1) yang salah. Sekarang tty1 mungkin berpikir bahwa program-program ini sedang dijalankan di latar belakang oleh tty1 sehingga upaya untuk membaca dari tty1 (seharusnya ttyS1) menghasilkan menghentikan proses yang berusaha untuk membaca. (Proses latar belakang tidak diizinkan untuk membaca dari terminal pengendalnya.). Anda mungkin melihat pesan seperti: " [1] + Dihentikan " di layar. Pada titik ini Anda terjebak karena Anda tidak dapat berinteraksi dengan proses yang mencoba berkomunikasi dengan Anda melalui terminal yang salah. Tentu saja untuk melarikan diri dari ini, Anda dapat pergi ke terminal lain dan membunuh proses, dll.

agetty (boleh diberi nama getty)

Contoh baris di / etc / inittab:

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

S1 berasal dari ttyS1. 23 berarti bahwa getty dijalankan ketika memasuki run level 2 atau 3. respawn berarti jika getty (atau proses yang menggantikannya seperti bash) terbunuh, getty akan secara otomatis memulai (respawn) lagi. / sbin / getty adalah perintah getty. The -L berarti Lokal (mengabaikan sinyal kontrol modem). -h (tidak ditampilkan dalam contoh) memungkinkan kontrol aliran perangkat keras (sama dengan stty crtscts). 19200 adalah baud rate. ttyS1 artinya / dev / ttyS1 (COM2 dalam MS-DOS). vt102 adalah jenis terminal dan getty ini akan mengatur variabel lingkungan TERM ke nilai ini. Tidak ada file konfigurasi. Ketik "init q" pada baris perintah setelah mengedit getty dan Anda akan melihat prompt login.

Deteksi otomatis masalah paritas oleh Agetty

Program agetty akan berusaha mendeteksi secara otomatis paritas yang diatur di dalam terminal (termasuk tanpa paritas). Itu tidak mendukung 8-bit data byte ditambah paritas 1-bit. Lihat 8-bit data byte (plus paritas). Jika Anda menggunakan stty untuk mengatur paritas, agetty akan secara otomatis membatalkannya karena awalnya ingin bit paritas datang seolah-olah itu adalah bit data. Ini karena perlu mendapatkan bit terakhir (mungkin bit paritas) saat Anda mengetik nama login Anda sehingga dapat mendeteksi paritas secara otomatis. Jadi jika Anda menggunakan paritas, aktifkan hanya di dalam terminal teks dan biarkan agetty mendeteksinya secara otomatis dan atur di komputer. Jika terminal Anda mendukung paritas yang diterima, prompt login akan terlihat kacau sampai Anda mengetik sesuatu sehingga getty dapat mendeteksi

keseimbangan. Prompt yang kacau itu akan menghalangi pengunjung, dsb. Dari mencoba masuk. Itu bisa menjadi apa yang Anda inginkan.

Kadang-kadang ada masalah dengan deteksi otomatis paritas. Hal ini terjadi karena setelah Anda mengetikkan nama login Anda, agetty memulai program login untuk menyelesaikan proses masuk Anda. Sayangnya, program masuk tidak dapat mendeteksi paritas sehingga jika program getty gagal menentukan paritas maka login tidak akan dapat menentukan itu juga. Jika upaya login pertama gagal, login akan membiarkan Anda mencoba lagi, dll. (Semua dengan paritas salah). Akhirnya, setelah sejumlah upaya gagal untuk masuk (atau setelah timeout), agetty akan memulai lagi dan memulai urutan login lagi. Setelah getty berjalan kembali, mungkin dapat mendeteksi paritas pada percobaan kedua sehingga semuanya dapat bekerja dengan baik.

Dengan paritas yang salah, program masuk tidak dapat membaca dengan benar apa yang Anda ketik dan Anda tidak dapat masuk. Jika terminal Anda mendukung paritas yang diterima, Anda akan terus melihat layar yang kacau. Jika getty gagal mendeteksi parity file / etc / issue biasanya dibuang ke layar tepat sebelum prompt, maka kata-kata yang lebih kacau mungkin muncul di layar.

Mengapa agetty tidak dapat mendeteksi paritas dengan mengetikkan huruf pertama? Berikut ini contohnya: Misalkan mendeteksi byte 8-bit dengan bit paritas 0 (bit tingkat tinggi) dan dengan jumlah ganjil 1-bit. Paritas apakah itu? Nah, jumlah ganjil 1 bit menyiratkan bahwa itu adalah paritas ganjil. Tetapi bisa juga hanya menjadi karakter 8-bit tanpa paritas. Tidak ada cara sejauh ini untuk menentukan yang mana. Namun sejauh ini kita telah menghilangkan kemungkinan bahkan paritas. Deteksi paritas dengan demikian menghasilkan proses eliminasi.

Jika byte berikutnya diketik mirip dengan yang pertama dan juga hanya menghilangkan kemungkinan bahkan paritas, masih tidak mungkin untuk menentukan paritas. Situasi ini dapat berlanjut tanpa batas dan dalam kasus yang jarang terjadi proses masuk akan gagal sampai Anda mengubah nama login Anda. Jika agetty menemukan bit paritas 1 akan menganggap bahwa ini adalah bit paritas dan bukan bit orde tinggi dari karakter 8-bit. Dengan demikian mengasumsikan bahwa Anda tidak menggunakan meta-karakter (set bit tinggi) di nama pengguna Anda (yaitu nama Anda di ASCII).

Satu dapat masuk ke "masuk lingkaran" dengan berbagai cara. Misalkan Anda hanya mengetik satu atau dua huruf untuk nama login Anda dan kemudian tekan kembali. Jika surat-surat ini tidak cukup untuk mendeteksi paritas, maka login berjalan sebelum paritas telah terdeteksi. Kadang-kadang masalah ini terjadi jika Anda tidak memiliki terminal dan / atau terhubung saat agetty pertama dijalankan.

Jika Anda terjebak dalam "login loop" ini, Anda harus menekan tombol kembali beberapa kali hingga Anda mendapatkan prompt masuk getty. Cara lain adalah dengan hanya menunggu satu menit atau lebih untuk batas waktu. Kemudian prompt masuk getty akan diletakkan di layar oleh program getty dan Anda dapat mencoba lagi untuk masuk.

8-bit data byte (plus paritas)

Sayangnya, agetty tidak bisa mendeteksi paritas ini. Pada akhir 1999 tidak memiliki pilihan untuk menonaktifkan deteksi otomatis paritas dan dengan demikian akan mendeteksi paritas yang salah. Hasilnya adalah proses login akan kacau dan paritas akan salah. Jadi sepertinya tidak layak untuk mencoba menggunakan 8-bit byte data dengan paritas.

getty (bagian dari getty_ps)

(Sebagian besar dari ini adalah Serial-HOWTO lama oleh Greg Hankins)
Untuk ini, seseorang perlu memasukkan entri dalam file konfigurasi dan menambahkan entri di / etc / inittab . Berikut adalah beberapa contoh entri yang akan digunakan untuk terminal Anda yang Anda masukkan ke dalam file konfigurasi / etc / gettydefs .

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

Perhatikan bahwa DT38400, DT19200, dll. Hanyalah label dan harus sama dengan yang Anda gunakan di / etc / inittab .

Jika Anda mau, Anda dapat membuat cetakan menarik hal-hal menarik di spanduk login. Dalam contoh saya, saya memiliki nama sistem dan garis serial yang dicetak. Anda dapat menambahkan hal-hal lain: [blockquote

naungan = ya] @B Arus (dievaluasi pada saat @B terlihat) bps rate. @ D Tanggal saat ini, dalam MM / DD / YY. @L Baris serial yang dilampirkan. @S Nama sistem. @T Waktu saat ini, di HH: MM: SS (24 jam). @U Jumlah pengguna yang sedang masuk. Ini adalah hitungan jumlah entri dalam file / etc / utmp yang memiliki bidang ut_name non-null. @V Nilai VERSION, seperti yang diberikan dalam file default. Untuk menampilkan satu karakter '@', gunakan '\ @' atau '@@'.

Ketika Anda selesai mengedit / etc / gettydefs , Anda dapat memverifikasi bahwa sintaks sudah benar dengan melakukan:

linux # getty -c / etc / gettydefs

Pastikan tidak ada file konfigurasi getty atau uugetty lain untuk port serial yang dilink oleh terminal Anda seperti ( /etc/default/{uu}getty.ttyS N atau /etc/conf.{uu}getty.ttyS N ) , karena ini mungkin akan mengganggu menjalankan getty di terminal. Hapus file yang konflik seperti itu jika mereka keluar.

Edit file / etc / inittab Anda untuk menjalankan getty pada port serial (menggantikan informasi yang benar untuk lingkungan Anda - port, kecepatan, dan jenis terminal default):

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

Pada titik ini, Anda akan melihat prompt login di terminal Anda. Anda mungkin harus menekan kembali untuk mendapatkan perhatian terminal.

mgetty

"M" berarti modem. Program ini terutama untuk modem dan pada pertengahan tahun 2000 akan membutuhkan kompilasi ulang untuk menggunakannya untuk teks-terminal (kecuali Anda menggunakan kontrol aliran perangkat keras - dan yang biasanya membutuhkan kabel buatan tangan). Untuk dokumentasi untuk terminal terhubung langsung lihat bagian "Langsung" dari manual: mgetty.texi.

Lihatlah baris terakhir dari /etc/mgetty/mgetty.config untuk contoh konfigurasi untuk terminal. Kecuali Anda mengatakan "toggle-dtr no", Anda akan berpikir bahwa Anda memiliki modem dan menjatuhkan (meniadakan) pin DTR di PC dalam upaya sia-sia untuk me-reset modem yang tidak ada. Berbeda dengan gettys lainnya, mgetty tidak akan menempelkan dirinya sendiri ke terminal sampai seseorang menekan tombol apa saja dari terminal itu sehingga Anda akan melihat? untuk terminal di atas atau id sampai ini terjadi. Log di / var / log / mgetty / mungkin menunjukkan beberapa pesan peringatan yang hanya berlaku untuk modem yang mungkin Anda abaikan.

Berikut ini contoh baris sederhana yang Anda masukkan ke / etc / inittab:

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