Saya bertanya-tanya bagaimana "GUI" aplikasi baris perintah dikomunikasikan melalui jaringan. Sebagian besar waktu, ini cukup sederhana (teks biasa / input) tetapi terkadang lebih kompleks (aptitude).
Apakah itu didefinisikan oleh semacam standar sehingga siapa pun dapat menulis terminal mereka sendiri dan bahwa semua implementasi terminal berperilaku dengan cara yang sama (warna, pemosisian, dll.)?
Jawaban yang Diterima:
Program konsol biasanya menggunakan kutukan atau salah satu penerusnya¹ untuk membangun jenis antarmuka pengguna teks yang Anda bicarakan.
Pustaka ini menggunakan salah satu dari dua database, yang disebut termcap
dan terminfo
.² Basis data ini berisi peta yang memberi tahu perpustakaan kode apa yang harus dikirim untuk mendapatkan tindakan yang diinginkan dengan sejumlah besar jenis terminal yang beragam. Sebagian besar jenis terminal yang akan Anda temukan didefinisikan dalam basis data ini tidak bertahan pada zaman terminal nyata, dan sekarang hanya memiliki kepentingan historis.
Terminal ANSI
Emulator terminal Unix modern³ menggunakan protokol ANSI X3.64 atau salah satu varian selanjutnya:
-
ANSI X3.64 :Standar untuk mengendalikan "terminal kaca" — sebagai lawan dari 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 kursornya ke sudut kiri atas layar, ia akan mengirimkan karakter
ESC
[
1
;
1
H
. Dua karakter pertama memberi tahu terminal untuk mengharapkan urutan kontrol, angka 1 adalah baris dan kolom, danH
adalah perintah yang berarti “gerakkan kursor”.⁴Trivia:banyak PC BBS menggunakan kode ANSI juga. (Masih, sebenarnya.)
-
DEC VT100 :Terminal kaca kompatibel ANSI pertama yang sangat populer adalah VT100 dari Digital Equipment Corporation. Dengan membuktikan de jure ANSI standar di pasar, itu membentuk de facto standar yang masih penting sampai sekarang.
Terkadang Anda melihat ini disebut protokol VT102, yang merupakan versi VT100 yang lebih hemat biaya — dan karena itu lebih populer — ditambah semua opsi perluasan yang tersedia di dalamnya.
Protokol terminal DEC adalah seri yang kompatibel ke belakang, terbentang dari model pertama yang kompatibel dengan ANSI yang diperkenalkan pada tahun 1978 (VT100) hingga model seri VT500 yang diproduksi oleh Boundless Technologies setelah mereka membeli bisnis terminal dari DEC pada tahun 1995. (Boundless adalah sekarang gulung tikar, tetapi terminal mereka masih muncul di pasar bekas dari waktu ke waktu.)
-
xterm :Semacam campuran ANSI dan VT-standar apa pun. Setiap kali Anda menggunakan emulator terminal GUI seperti
xterm
atau salah satu turunannya, Anda biasanya juga menggunakanxterm
protokol terminal, biasanyaxterm-color
yang lebih modern atauxterm-color256
varian. -
Linux :Konsol Linux juga menggunakan varian tambahan dari protokol terminal ANSI, dengan semangat yang sama seperti
xterm
protokol. Sebagian besar ekstensinya berkaitan dengan perbedaan antara PC dan terminal kaca. Misalnya, keyboard IBM memiliki beberapa tombol yang tidak ada pada DEC VT-apa pun. (Dan sebaliknya.)Beberapa sistem Unix juga memiliki protokol terminal konsol sendiri. Ada
scoansi
Varian ANSI X3.64 untuk SCO Unix, misalnya.
Program emulator terminal tipikal adalah semacam anjing kampung, dan tidak meniru model terminal tunggal dengan tepat. Ini mungkin mendukung 96% dari semua urutan pelepasan DEC VT melalui VT320, namun juga mendukung ekstensi seperti warna ANSI (fitur VT525) dan jumlah baris dan kolom yang berubah-ubah. 4% kode yang tidak dipahami mungkin tidak akan terlewatkan jika program Anda tidak memerlukan fitur tersebut, meskipun Anda telah memberi tahu curses
(atau apa pun) yang Anda inginkan agar program menggunakannya untuk menggunakan protokol VT320. Program semacam itu mungkin mengiklankan dirinya sebagai kompatibel dengan VT320, namun sebenarnya tidak.⁵
Terminal Non-ANSI
Ada beberapa standar penting lainnya yang terkadang masih Anda temui:
-
Wyse :Salah satu produsen terminal kaca independen paling awal, Wyse mulai membuat terminal pada awal 1980-an sebelum komputasi workstation mulai menggantikan komputer mini. Meskipun terminal Wyse mampu meniru VT100 dan protokol terminal populer lainnya, mereka juga memiliki kode asli sendiri.
-
IBM 3270 :Meskipun ini bukan tipe terminal "Unix", kebutuhan untuk menghubungkan sistem Unix ke mainframe IBM mengarah pada pembuatan program emulator terminal seri IBM 3270, yang masih dapat Anda temukan saat digunakan. Emulator untuk terminal seri IBM 5250 yang lebih baru juga cukup umum, paling sering digunakan akhir-akhir ini untuk menghubungkan ke komputer mini AS/400 dan System i.
-
Tektronix 4014 :Sebelum PC dan workstation sebagian besar menggantikan terminal kaca dan dengan demikian menjadikan grafik bitmap sebagai fitur standar, ada terminal grafik mahal yang menggambar grafik di layar sebagai tanggapan terhadap perintah teks yang serupa dengan urutan escape yang dijelaskan di atas. Mungkin yang paling populer adalah seri Tektronix 4010.
Mereka cukup menyenangkan untuk digunakan. Anda dapat menulis program yang menggambar grafik, tetapi alih-alih menjalankannya untuk menggambar di terminal lokal, Anda dapat mengarahkan outputnya ke file:
$ ./my4014program > my-neat-graphic
Anda kemudian dapat mengirim file itu ke orang lain, dan mereka dapat
cat
di terminal Tek mereka untuk melihat grafik tanpa program Anda. Bagian dari daya tariknya adalah betapa lambatnya terminal ini dalam menggambar, sehingga Anda dapat melihat grafik yang terbentuk selama beberapa detik.
Bekerja Dengan Emulasi Terminal Unix Hari Ini
Anda dapat mengetahui standar terminal mana yang Anda tanyakan kepada perpustakaan seperti curses
untuk digunakan dengan melihat TERM
variabel lingkungan:
$ echo $TERM
xterm-color
Saat Anda ssh
ke sistem lain, TERM
variabel dibawa bersama sehingga kotak Unix jarak 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 yang ada di mana-mana menangani banyak hal lain, TERM
yang salah variabel biasanya tidak membawa bencana. Hal-hal yang cenderung rusak adalah tombol tambahan seperti Beranda dan Halaman Atas, kombinasi tombol Alt-apa pun, dan fitur tampilan tipografi seperti warna, huruf tebal, dll.
Catatan Kaki:
-
Paling umum, ncurses.
Ada juga pesaing langsung untuk
curses
API, seperti S-Lang. -
AT&T mengumumkan
terminfo
sebagai penggantitermcap
BSD database, dan sebagian besar berhasil menggantikannya, tetapi masih ada program di luar sana yang masih menggunakantermcap
lama basis data. Ini adalah salah satu dari banyak perbedaan BSD vs. AT&T yang masih dapat Anda temukan di sistem modern.Kotak macOS saya tidak memiliki
/etc/termcap
, tetapi memiliki/usr/share/terminfo
, sedangkan instalasi standar FreeBSD adalah kebalikannya, meskipun kedua OS ini seringkali sangat mirip pada tingkat baris perintah. -
minicom
,xterm
,mintty
, Terminal GNOME, Terminal.app, dll. -
Program Unix yang ditulis dengan benar tidak memancarkan urutan pelarian ini secara langsung. Sebagai gantinya, mereka menggunakan salah satu perpustakaan yang disebutkan di atas, menyuruhnya untuk "memindahkan kursor ke posisi (1,1)" atau apa pun, dan perpustakaan memancarkan kode kontrol terminal yang diperlukan berdasarkan
TERM
pengaturan variabel lingkungan. Hal ini memungkinkan program untuk bekerja dengan baik apa pun jenis terminal yang Anda gunakan untuk menjalankannya. -
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 sixel dan mode teks double-width/double-height.
Pengelola
xterm
menulis sebuah program bernamavttest
untuk menguji emulator terminal VT sepertixterm
. Anda dapat menjalankannya terhadap emulator terminal lain untuk mengetahui fitur mana yang tidak mereka dukung.