Ketika saya membuka jendela terminal dengan emulator Terminal GNOME di GUI desktop, variabel lingkungan TERM shell default ke nilai xterm
.
Jika saya menggunakan CTL+ ALT+ F1untuk beralih ke jendela konsol TTY dan echo $TERM
nilainya diatur ke linux
.
Motivasi saya untuk bertanya adalah bahwa di dalam ~/.bashrc
file saya variabel digunakan untuk menentukan apakah shell warna disediakan atau hanya monokrom kuno yang baik.
# set a fancy prompt (non-color, unless we know we "want" color)
case "$TERM" in
xterm-color) color_prompt=yes;;
esac
Di shell konsol dan shell emulator Gnome Terminal jika saya mengetik
export TERM=xterm-color
source /.bashrc
kedua kerang berubah menjadi mode warna (sesuatu yang saya ingin selalu terjadi di keduanya).
Di mana TERM
nilai-nilai standar bisa ditetapkan, dan di mana tempat terbaik untuk mengubah standarnya, jika memungkinkan? Tampaknya tidak ada apa pun di terminal emulator GUI untuk memilih atau mengatur nilai TERM default.
Saya memang mempertimbangkan untuk hanya menambahkan baris export TERM=xterm-color
ke bagian atas ~/.bashrc
file saya tetapi insting saya mengatakan ini bukan solusi terbaik dan pencarian Google saya belum membawa saya ke jawaban yang baik.
Saya menjalankan Ubuntu 15.04 Desktop Edition (Berbasis Debian).
Jawaban:
Di banyak tempat, tergantung
Pada terminal virtual dan terminal nyata,
TERM
variabel lingkungan diatur oleh program yang terhubunglogin
, dan diwarisi sepanjang jalan ke shell interaktif yang dijalankan setelah seseorang telah logon. Di mana, tepatnya, ini terjadi bervariasi dari satu sistem ke sistem, dan sesuai dengan jenis terminal.Jenis nyata, serial, terminal dapat bervariasi, sesuai dengan apa yang ada di ujung kabel. Jadi secara konvensional
getty
program dipanggil dengan argumen yang menentukan jenis terminal, atau melewatiTERM
program dari data konfigurasi layanan manajer layanan.init
sistem van Smoorenburg , orang dapat melihat ini dalam/etc/inittab
entri, yang akan membaca sesuatu di sepanjang baris Argumen terakhiragetty
pada baris ituvt100-nav
,, adalah tipe terminal yang ditetapkan untuk/dev/ttyS0
. Demikian/etc/inittab
juga tempat untuk mengubah jenis terminal untuk terminal nyata pada sistem tersebut./usr/lib/systemd/system/[email protected]
file unit (/lib/systemd/system/[email protected]
pada sistem yang tidak digabungkan), yang berbunyi pengaturanTERM
variabel dalam lingkungan yang dilewatkan keagetty
. File unit layanan ini adalah tempat untuk mengubah jenis terminal untuk terminal nyata pada sistem tersebut. Perhatikan bahwa ini berlaku untuk semua terminal nyata yang menggunakan templat unit layanan ini. (Untuk mengubahnya hanya terminal individu, seseorang harus secara manual instantiate template.)init
ambil tipe terminal dari bidang ketiga dari setiap entri terminal di/etc/ttys
database, dan setTERM
dari yang ada di lingkungan yang dijalankannyagetty
. Demikian/etc/ttys
juga di mana seseorang mengubah jenis terminal untuk terminal nyata pada BSD.Terminal virtual kernel, seperti yang telah Anda catat, memiliki tipe tetap. Tidak seperti NetBSD, yang dapat memvariasikan jenis terminal virtual kernel dengan cepat, Linux dan BSD lainnya memiliki satu jenis terminal tetap yang diimplementasikan dalam program emulasi terminal bawaan kernel. Di Linux, tipe itu cocok
linux
dengan basis data terminfo. (Emulasi terminal kernel FreeBSD adalahxterm
subset terbatas sejak versi 9.)mingetty
atauvc-get-tty
(dari paket nosh) program "tahu" bahwa ia hanya dapat berbicara dengan terminal virtual, dan mereka menghubungkan jenis terminal virtual "dikenal" yang sesuai dengan sistem operasi yang dikompilasi untuk program tersebut./usr/lib/systemd/system/[email protected]
file unit (/lib/systemd/system/[email protected]
pada sistem yang tidak digabungkan), yang berbunyi pengaturanTERM
variabel dalam lingkungan yang dilewatkan keagetty
.Untuk terminal virtual kernel, seseorang tidak mengubah tipe terminal. Program emulator terminal di kernel tidak berubah. Tidak benar untuk mengubah jenisnya. Secara khusus, ini akan mengacaukan pengenalan urutan CSI kursor / pengeditan. The
linux
urutan CSI dikirim oleh Linux kernel terminal emulator yang berbeda denganxterm
atauvt100
urutan CSI dikirim oleh GUI program emulator terminal dalam mode Desember VT.Emulator terminal GUI Anda adalah salah satu dari banyak program, mulai dari perintah SSH hingga
screen
, yang menggunakan pseudo-terminal. Apa tipe terminal tergantung dari program emulator terminal apa yang berjalan di sisi master terminal semu, dan bagaimana hal itu dikonfigurasikan. Kebanyakan emulator terminal GUI akan memulai program di sisi slave denganTERM
variabel yang nilainya cocok dengan emulasi terminal mereka di sisi master. Program seperti server SSH akan berusaha "melewati" jenis terminal yang ada di ujung koneksi klien. Biasanya ada beberapa menu atau opsi konfigurasi untuk memilih di antara emulasi terminal.Tangan yang mencengkeram
Cara yang tepat untuk mendeteksi kapabilitas warna bukanlah dengan memasang daftar jenis terminal di skrip Anda. Ada banyak sekali jenis terminal yang mendukung warna.
Cara yang benar adalah dengan melihat apa yang termcap / terminfo katakan tentang tipe terminal Anda.
Bacaan lebih lanjut
TERM
. Panduan nosh . Perangkat lunak.sumber
[ -x /usr/bin/tput ] && /usr/bin/tput setaf 1 >&/dev/null && color_prompt=yes
. (ncurses 5.9)tput Co
mengembalikan "kapabilitas terminfo yang tidak diketahui" di Jessie dan Xenial.tput colors
dantput setaf 1
keduanya tampaknya bekerja meskipun saya akui saya tidak mengerti mengapa .Silakan lihat /ubuntu//a/614714/398785 untuk jawaban terperinci saya tentang mengapa menurut saya
TERM=xterm-color
pendekatan yang salah dan Ubuntu.bashrc
sudah usang. Saya sarankan Anda menggunakanTERM=xterm-256color
(yang merupakan default sejak gnome-terminal 3.16, tetapi juga aman untuk digunakan dengan gnome-terminal yang lebih lama), dan sesuaikan dengan itu.bashrc
.sumber
.bashrc
sudah usang). ".Bashrc Ubuntu sudah usang."xterm-256color
menyebabkanhtop
tata letak yang berantakan seperti ini di Ubuntu 18.04.