Protokol / standar apa yang digunakan oleh terminal?


25

Saya bertanya-tanya bagaimana "GUI" dari aplikasi baris perintah dikomunikasikan melalui jaringan. Sebagian besar waktu, itu cukup sederhana (teks / input biasa) tetapi kadang-kadang lebih kompleks (bakat).

Apakah ini didefinisikan oleh semacam standar sehingga siapa pun dapat menulis terminal mereka sendiri dan bahwa semua implementasi terminal berperilaku dengan cara yang sama (warna, posisi, dll.)?

Jawaban:


46

Program konsol biasanya menggunakan kutukan atau salah satu penggantinya¹ ​​untuk membangun jenis antarmuka pengguna teks yang Anda bicarakan.

Pustaka - pustaka ini menggunakan salah satu dari dua database, yang disebut termcapdan terminfo.² Pangkalan data ini berisi peta yang memberi tahu pustaka kode apa yang harus dikirim untuk mendapatkan tindakan yang diinginkan dengan sejumlah besar jenis terminal yang beragam. Sebagian besar jenis terminal yang Anda temukan didefinisikan dalam basis data ini tidak bertahan masa terminal nyata , dan sekarang hanya kepentingan sejarah.

Terminal ANSI

Emulator terminal Unix modern³ menggunakan protokol ANSI X3.64 atau salah satu varian selanjutnya:

  • ANSI X3.64 : Suatu standar untuk mengendalikan "terminal kaca" - berbeda dengan teletipe - didasarkan pada urutan karakter khusus yang ditafsirkan oleh terminal jarak jauh. Misalnya, jika kotak Unix ingin memberi tahu terminal yang kompatibel dengan ANSI X3.64 untuk memindahkan kursor ke sudut kiri atas layar, ia mengirim karakterESC [ 1 ; 1 H. Dua karakter pertama memberitahu terminal untuk mengharapkan urutan kontrol, 1 adalah baris dan kolom, danHmerupakan perintah yang berarti "pindahkan kursor" .⁴

    Trivia: banyak PC BBS yang menggunakan kode ANSI juga. ( Masih , sebenarnya.)

  • DEC VT100 : Terminal kaca kompatibel ANSI pertama yang sangat populer adalah VT100 Digital Equipment Corporation. Dengan membuktikan standar de jure ANSI di pasar, ia menetapkan standar de facto yang masih penting hingga saat ini.

    Kadang-kadang Anda melihat ini disebut protokol VT102, yang kemudian menjadi versi VT100 yang dikurangi biaya - dan karenanya lebih populer - plus semua opsi ekspansi yang tersedia bawaan.

    Protokol terminal DEC adalah seri yang kompatibel dengan mundur, memanjang dari model yang kompatibel dengan ANSI pertama yang diperkenalkan pada 1978 (VT100) hingga melalui model seri VT500 yang diproduksi oleh Boundless Technologies setelah mereka membeli bisnis terminal dari DEC pada 1995. (Boundless adalah sekarang keluar dari bisnis, tetapi terminal mereka masih muncul di pasar bekas dari waktu ke waktu.)

  • xterm : Semacam amalgam dari ANSI dan VT-standar apa pun. Setiap kali Anda menggunakan emulator terminal GUI sepertixtermatau salah satu turunannya, Anda biasanya juga menggunakanxtermprotokol terminal, biasanya yang lebih modernxterm-coloratauxterm-color256variannya.

  • Linux : Konsol Linux juga menggunakan varian lanjutan dari protokol terminal ANSI, dengan semangat yang sama denganxtermprotokol. Sebagian besar ekstensi berkaitan dengan perbedaan antara PC dan terminal kaca. Sebagai contoh, keyboard IBM memiliki beberapa tombol bukan pada DEC VT-terserah. (Dan sebaliknya.)

    Beberapa sistem Unix memiliki protokol terminal konsol mereka sendiri juga. Ada scoansivarian ANSI X3.64 untuk SCO Unixes, misalnya.

Program emulator terminal tipikal adalah semacam anjing kampung, dan tidak persis meniru model terminal tunggal apa pun. Ini mungkin mendukung 96% dari semua sekuens pelarian DEC VT hingga VT320, namun juga mendukung ekstensi seperti warna ANSI (fitur VT525) dan jumlah baris dan kolom yang berubah-ubah. 4% kode yang tidak dimengerti mungkin tidak akan terlewatkan jika program Anda tidak memerlukan fitur-fitur itu, meskipun Anda telah mengatakan curses(atau apa pun) bahwa Anda ingin program menggunakannya untuk menggunakan protokol VT320. Program semacam itu mungkin mengiklankan dirinya sebagai kompatibel dengan VT320, maka, meskipun, sebenarnya tidak .⁵

Terminal Non-ANSI

Ada beberapa standar penting lain yang terkadang masih Anda temui:

  • Wyse : Salah satu produsen independen pertama terminal kaca, Wyse mulai membuat terminal pada awal 1980-an sebelum komputasi workstation mulai menggantikan minicomputer. Meskipun terminal Wyse mampu meniru VT100 dan protokol terminal populer lainnya, mereka juga memiliki kode asli mereka sendiri.

  • IBM 3270 : Meskipun ini bukan semata-mata jenis terminal "Unix", kebutuhan untuk menghubungkan sistem Unix ke mainframe IBM mengarah pada pembuatan program emulator terminal seri IBM 3270, yang masih dapat Anda temukan dalam penggunaannya. Emulator untukterminal seri IBM 5250 kemudianjuga cukup umum, paling sering digunakan hari ini untuk menghubungkan ke AS / 400 dan minicomputer System i .

  • Tektronix 4014 : Sebelum PC dan workstation memindahkan terminal kaca dan menjadikan grafik yang dipetakan sebagai fitur standar, ada terminal grafis mahal yang menggambar grafik di layar sebagai respons terhadap perintah teks yang mirip dengan urutan pelarian yang dijelaskan di atas. Mungkin yang paling populer dari ini adalah seri Tektronix 4010.

    Mereka cukup menyenangkan untuk digunakan. Anda bisa menulis program yang menggambar grafik, tetapi alih-alih menjalankannya untuk menggambar di terminal lokal Anda, Anda bisa mengarahkan hasilnya ke file:

    $ ./my4014program > my-neat-graphic
    

    Anda kemudian dapat mengirim file itu ke orang lain, dan mereka dapat catmelakukannya di terminal Tek mereka untuk melihat grafik tanpa memiliki program Anda. Bagian dari pesona adalah betapa lambatnya terminal-terminal ini dalam menggambar, sehingga Anda dapat menyaksikan grafik menumpuk selama beberapa detik.

Bekerja Dengan Emulasi Terminal Unix Hari Ini

Anda dapat mengetahui standar terminal mana yang ingin Anda cursesgunakan di perpustakaan dengan melihat TERMvariabel lingkungan:

$ echo $TERM
xterm-color

Ketika Anda sshke sistem lain, TERMvariabel dijalankan sehingga kotak Unix jauh tahu bagaimana berkomunikasi dengan terminal lokal Anda.

Karena begitu banyak dari protokol ini adalah varian ANSI X3.64, dan karena standar pengkodean karakter ASCII dan UTF-8 di mana-mana menangani begitu banyak hal lain, TERMvariabel yang salah biasanya tidak bersifat katastropik. Hal-hal yang cenderung dipecahkan adalah tombol-tombol yang diperluas seperti Home dan Page Up, Alt-apa pun kombinasi tombol, dan fitur tampilan tipografis seperti warna, huruf tebal, dll.


Catatan kaki:

  1. Paling umum, ncurses .

    Ada juga pesaing langsung ke cursesAPI, seperti S-Lang .

  2. AT&T diumumkan terminfosebagai pengganti termcapdatabase BSD , dan sebagian besar berhasil menggantikannya, tetapi masih ada program di luar sana yang masih menggunakan termcapdatabase lama . Ini adalah salah satu dari banyak perbedaan BSD vs AT&T yang masih dapat Anda temukan pada sistem modern.

    Kotak macOS saya tidak punya /etc/termcap, tetapi memang ada /usr/share/terminfo, sedangkan instalasi standar FreeBSD adalah sebaliknya, meskipun kedua OS ini sering sangat mirip di tingkat baris perintah.

  3. minicom, xterm, mintty, GNOME Terminal , Terminal.app , dll

  4. Program Unix yang ditulis dengan benar tidak memancarkan urutan pelarian ini secara langsung. Sebagai gantinya, mereka menggunakan salah satu perpustakaan yang disebutkan di atas, mengatakannya untuk "memindahkan kursor ke posisi (1,1)" atau apa pun, dan perpustakaan mengeluarkan kode kontrol terminal yang diperlukan berdasarkan pada TERMpengaturan variabel lingkungan Anda . Ini memungkinkan program untuk bekerja dengan baik tidak peduli apa pun jenis terminal yang Anda jalankan.

  5. Terminal teks lama memiliki banyak fitur aneh yang tidak banyak digunakan oleh program, sehingga banyak program emulator terminal populer tidak menerapkan fitur ini. Kelalaian umum adalah dukungan untuk grafik enamel dan mode teks lebar ganda / tinggi ganda.

    Pemelihara xtermmenulis sebuah program yang disebut vttestuntuk menguji emulator terminal VT seperti xterm. Anda dapat menjalankannya terhadap emulator terminal lain untuk mengetahui fitur mana yang tidak didukungnya.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.