Jenis terminal apa yang saya gunakan?

51

Saya telah menguji ini dengan Ubuntu 12.04 dan Debian 7. Ketika saya melakukannya

echo $TERM

saya mendapat

xterm

Tetapi jika saya menggunakan menu dropdown "help"> "about" maka katanya gnome terminal 3.4.1.1.

Apakah ini berarti saya hanya menggunakan terminal gnome? Atau hanya xterm? Atau gnome-terminal merupakan perpanjangan dari xterm? Saya bingung.

mulllhausen
sumber

Jawaban:

49

Untuk apa $TERM?

The $TERMvariabel untuk digunakan oleh aplikasi untuk mengambil keuntungan dari kemampuan terminal itu.

Misalnya, jika suatu program ingin menampilkan teks berwarna, ia harus terlebih dahulu mencari tahu apakah terminal yang Anda gunakan mendukung teks berwarna, dan jika ya, bagaimana melakukan teks berwarna.

Cara kerjanya adalah sistem menyimpan perpustakaan dari terminal yang diketahui dan kemampuannya. Pada kebanyakan sistem ini ada /usr/share/terminfo(ada juga termcap, tapi warisannya tidak banyak digunakan lagi).

Jadi katakanlah Anda memiliki program yang ingin menampilkan teks merah. Ini pada dasarnya membuat panggilan ke perpustakaan terminfo yang mengatakan " beri saya urutan byte yang saya harus kirim untuk teks merah untuk terminal xterm ". Kemudian hanya mengambil byte dan mencetaknya.
Anda dapat mencobanya sendiri dengan melakukan tput setf 4; echo hi. Ini akan mendapatkan setfkemampuan terminfo dan memberikannya parameter 4, yang merupakan warna yang Anda inginkan.


Mengapa terminal gnome terletak pada dirinya sendiri:

Sekarang katakanlah Anda memiliki emulator terminal mengkilap baru yang baru saja dirilis, dan pustaka terminfo sistem belum memiliki definisi untuk itu. Ketika aplikasi Anda pergi untuk mencari cara melakukan sesuatu, itu akan gagal karena terminal tidak diketahui.

Cara terminal Anda menyiasatinya adalah dengan berbohong tentang siapa itu. Jadi terminal gnome Anda mengatakan " I'm xterm ".

Xterm adalah terminal yang sangat dasar yang telah ada sejak awal X11, dan dengan demikian sebagian besar terminal emulator mendukung apa yang didukungnya. Jadi dengan terminal gnome mengatakan itu adalah xterm, itu lebih mungkin untuk memiliki definisi di perpustakaan terminfo.

Kelemahan dari berbohong tentang jenis terminal Anda adalah bahwa terminal mungkin sebenarnya mendukung lebih banyak daripada xterm (misalnya, banyak terminal baru mendukung 256 warna, sedangkan terminal lama hanya mendukung 16). Jadi Anda memiliki tradeoff, dapatkan lebih banyak fitur, atau lebih banyak kompatibilitas. Sebagian besar terminal akan memilih lebih banyak kompatibilitas, dan karenanya memilih untuk mengiklankan diri mereka sebagai xterm.

Jika Anda ingin mengesampingkan ini, banyak terminal akan menawarkan beberapa cara untuk mengkonfigurasi perilaku. Tapi Anda juga bisa melakukannya export TERM=gnome-terminal.

Patrick
sumber
4
Merekomendasikan seseorang mengekspor $ ISTILAH benar-benar seperti menggosok garam ke luka terbuka ...
jasonwryan
1
ya. Saya menduga bahwa pengembang gnome-terminal berangkat $TERMke xtermuntuk alasan yang baik
mulllhausen
4
@ullullhausen Alasan itu dijelaskan dengan baik dalam jawaban saya ...
Patrick
27

The TERMvariabel lingkungan menunjukkan terminal tipe , bukan terminal aplikasi . TERMmemiliki tujuan tertentu: ia memberi tahu aplikasi yang berjalan di terminal itu bagaimana berinteraksi dengan terminal.

Aplikasi berinteraksi dengan terminal dengan menulis urutan melarikan diri - urutan karakter yang mencakup karakter yang tidak dapat dicetak dan memiliki efek seperti memindahkan kursor, menghapus bagian layar, mengubah warna saat ini, dll. Di masa lalu, berbagai merek terminal fisik memiliki perbedaan set urutan pelarian. Oleh karena itu sistem operasi memelihara basis data jenis terminal dan karakteristiknya. Basis data tradisional adalah termcap ("TERMinal CAPabilities"); banyak sistem dan aplikasi modern telah beralih ke terminfo . Kedua database diindeks dengan nama tipe terminal, dan aplikasi meminta mereka menggunakan nama tipe terminal dari TERMvariabel lingkungan.

Saat ini, sebagian besar terminal menggunakan sekumpulan standar escape sequence dengan beberapa set ekstensi umum, sehingga Anda tidak akan melihat banyak nilai berbeda TERM. Kebanyakan emulator terminal GUI kompatibel dengan xterm , terminal X tradisional (yang masih digunakan dan dipelihara).

Emulator terminal yang berbeda dari xterm dapat menambahkan entri mereka sendiri ke database terminal dengan nama mereka sendiri. Namun ini tidak cocok dengan cangkang jarak jauh. Suatu program yang berjalan pada mesin A tetapi yang ditampilkan pada mesin B, misalnya karena diluncurkan melalui ssh dari B ke A, perlu menanyakan database terminal pada mesin A. Metode login jarak jauh seperti ssh membawa TERMvariabel lingkungan, tetapi ini hanya membantu ketika basis data terminal B juga memiliki entri untuk pengguna nilai pada A. Oleh karena itu banyak emulator terminal menempel TERM=xtermyang cukup banyak dikenal secara universal.

Perbedaan antara terminal pada umumnya tidak datang dari cara aplikasi berinteraksi dengan mereka, tetapi dari cara terminal berinteraksi dengan pengguna dan sesuai dengan lingkungannya. Misalnya, Terminal Gnome terlihat bagus di Gnome dan menyediakan tab dan kenyamanan lainnya; Konsole terlihat bagus di KDE dan menyediakan tab dan keramahan lainnya; urxvt memiliki kebutuhan memori yang kecil; Console2 berjalan di Windows; layar dan tmux menyediakan sesi yang dapat dilampirkan ke terminal induk yang berbeda; dan seterusnya. Karena tidak ada fitur ini yang membuat perbedaan pada aplikasi yang berjalan di terminal, kebanyakan emulator terminal menggunakan TERM=xterm.

Untuk mencari tahu terminal apa yang menjalankan shell, lihat induk dari shell:

ps -p$PPID
Gilles 'SANGAT berhenti menjadi jahat'
sumber
Menjalankan ps -p$PPIDsepertinya tidak memberi tahu saya terminal apa yang saya jalankan. Atau setidaknya tidak dengan cara yang saya mengerti. Apakah Anda memiliki contoh output / respons?
user3731622
@user Outputnya adalah sekelompok angka dan singkatan samar diikuti oleh baris perintah. Dalam sebagian besar keadaan, baris perintah adalah yang memulai emulator terminal tempat shell berjalan.
Gilles 'SANGAT berhenti menjadi jahat'
12

Variabel TERM lingkungan tidak berarti terminal yang Anda gunakan.

Mengutip gnu.org :

Variabel lingkungan JANGKA berisi pengidentifikasi untuk kemampuan jendela teks. Anda bisa mendapatkan daftar terperinci dari cababilities ini dengan menggunakan perintah> 'infocmp', menggunakan 'man 5 terminfo' sebagai referensi.

Saat memproduksi teks dengan arahan warna tertanam, msgcat melihat variabel TERM. Jendela teks hari ini biasanya mendukung setidaknya 8 warna. Namun, sering kali, jendela teks mendukung 16 warna atau lebih, meskipun variabel TERM diatur ke pengenal yang menunjukkan hanya 8 warna yang didukung. Sebaiknya setel variabel TERM ke nilai yang berbeda dalam kasus ini:

xterm dalam banyak kasus dibangun dengan dukungan untuk 16 warna. Itu juga dapat dibangun dengan dukungan untuk 88 atau 256 warna (tetapi tidak keduanya). Anda dapat mencoba mengatur TERM ke warna xterm-16color, xterm-88color, atau xterm-256color. rxvt

rxvt sering dibangun dengan dukungan untuk 16 warna. Anda dapat mencoba mengatur TERM ke rxvt-16color. konsole

konsole juga sering dibangun dengan dukungan untuk 16 warna. Anda dapat mencoba mengatur TERM ke konsole-16color atau xterm-16color.

Setelah mengatur JANGKA, Anda dapat memverifikasinya dengan menggunakan 'msgcat --color = test' dan melihat apakah outputnya terlihat seperti peta warna yang masuk akal. Variabel lingkungan JANGKA berisi pengidentifikasi untuk kemampuan jendela teks. Anda bisa mendapatkan daftar terperinci dari cababilities ini dengan menggunakan perintah 'infocmp', menggunakan 'man 5 terminfo' sebagai referensi.

mavillan
sumber