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 +F1 untuk beralih ke jendela TTY konsol dan echo $TERM
nilainya diatur ke linux
.
Motivasi saya untuk bertanya adalah bahwa di dalam ~/.bashrc
my saya file variabel digunakan untuk menentukan apakah shell warna disediakan atau hanya monokrom kuno yang bagus.
# 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 Terminal Gnome jika saya mengetik
export TERM=xterm-color
source /.bashrc
kedua cangkang berubah ke mode warna (sesuatu yang saya ingin selalu terjadi di keduanya).
Dimana default TERM
tolong atur nilainya dan di mana tempat terbaik untuk mengubah defaultnya, jika memungkinkan? Tampaknya tidak ada apa pun di GUI terminal emulator untuk memilih atau menyetel nilai TERM default.
Saya memang mempertimbangkan untuk menambahkan baris export TERM=xterm-color
ke bagian atas ~/.bashrc
saya file tapi 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 yang Diterima:
Di banyak tempat, tergantung
Pada terminal virtual dan terminal nyata, TERM
variabel lingkungan diatur oleh program yang berantai ke login
, dan diwarisi sepanjang jalan ke shell interaktif yang dijalankan setelah seseorang masuk. Di mana tepatnya, hal ini terjadi bervariasi dari satu sistem ke sistem lainnya, dan sesuai dengan jenis terminalnya.
terminal nyata
Terminal nyata, serial, dapat bervariasi dalam jenis, sesuai dengan apa yang ada di ujung kabel yang lain. Jadi secara konvensional getty
program dipanggil dengan argumen yang menentukan tipe terminal, atau diteruskan TERM
program dari data konfigurasi layanan manajer layanan.
- Di van Smoorenburg
init
sistem, orang dapat melihat ini di/etc/inittab
entri, yang akan membaca sesuatu di sepanjang barisS0:3:respawn:/sbin/agetty ttyS0 9600 vt100-nav
Argumen terakhir untuk
agetty
di baris itu,vt100-nav
, adalah tipe terminal yang disetel untuk/dev/ttyS0
. Jadi/etc/inittab
adalah tempat untuk mengubah jenis terminal untuk terminal nyata pada sistem seperti itu. - Pada sistem systemd, dulu dapat melihat ini di
/usr/lib/systemd/system/[email protected]
file unit (/lib/systemd/system/[email protected]
pada sistem yang tidak digabungkan), yang biasa membacaEnvironment=TERM=vt100
menyetel
TERM
variabel di lingkungan diteruskan keagetty
. - Pada BSD,
init
mengambil jenis terminal dari bidang ketiga dari setiap entri terminal di/etc/ttys
database, dan setTERM
dari lingkungan yang menjalankangetty
dengan. Jadi/etc/ttys
adalah tempat seseorang mengubah tipe terminal untuk terminal nyata pada BSD.
variabilitas systemd
[email protected]
file unit layanan, atau file drop-in yang berlaku padanya, adalah tempat untuk mengubah jenis terminal untuk terminal nyata pada sistem systemd. Perhatikan bahwa perubahan seperti itu berlaku untuk semua layanan login terminal yang menggunakan templat unit layanan ini. (Untuk mengubahnya hanya untuk masing-masing terminal, kita harus membuat template secara manual, atau menambahkan drop-in yang hanya berlaku untuk instantiasi.)
systemd memiliki setidaknya empat mekanisme selama masa pakainya untuk mengambil nilai TERM
variabel lingkungan. Pada saat pertama kali menulis jawaban ini, seperti yang dapat dilihat, ada Environment=TERM=something
baris dalam file unit layanan template. Di lain waktu, jenis linux
dan vt102
terprogram ke dalam getty
dan serial-getty
file unit layanan masing-masing. Baru-baru ini, variabel lingkungan telah diwarisi dari proses #1, yang telah mengaturnya dengan berbagai cara.
Mulai tahun 2020, cara systemd memutuskan jenis terminal apa yang akan ditentukan dalam TERM
layanan variabel lingkungan cukup kompleks, dan tidak didokumentasikan sama sekali. Cara mengubahnya tetap pada file konfigurasi drop-in dengan Environment=TERM=something
. Tapi dari mana nilai default berasal cukup bervariasi. Tunduk pada beberapa aturan yang cukup rumit untuk menjelaskan yang melibatkan TTYPath=
pengaturan unit layanan individual, ini dapat berupa salah satu dari tiga nilai:linux
. bawaan , sebuah vt220
. bawaan (tidak lagi vt102
), atau nilai TERM
variabel lingkungan yang diwarisi proses #1, biasanya dari pemuat kernel/bootstrap.
(Ironisnya, getttyent()
mekanisme masih ada di pustaka GNU C, dan systemd dapat menggunakan kembali /etc/ttys
mekanisme.)
terminal virtual kernel
Terminal virtual kernel, seperti yang telah Anda catat, memiliki tipe yang 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, jenis itu cocok dengan linux
dari database terminfo. (Emulasi terminal kernel FreeBSD sejak versi 9 telah teken
. Sebelum versi 9 adalah cons25
OpenBSD adalah pccon
.)
- Pada sistem yang menggunakan
mingetty
atauvc-get-tty
(dari paket nosh) program “tahu” bahwa ia hanya dapat berbicara dengan terminal virtual, dan mereka memasangkan tipe terminal virtual “yang dikenal” yang sesuai dengan sistem operasi tempat program dikompilasi. - Pada sistem systemd, dulu dapat melihat ini di
/usr/lib/systemd/system/[email protected]
file unit (/lib/systemd/system/[email protected]
pada sistem yang tidak digabungkan), yang berbunyiEnvironment=TERM=linux
menyetel
TERM
variabel di lingkungan diteruskan keagetty
.
Untuk terminal virtual kernel, satu tidak mengubah jenis terminal. Program emulator terminal di kernel tidak berubah. Itu salah untuk mengubah jenis. Secara khusus, ini akan mengacaukan pengenalan urutan CSI kunci kursor/editing. linux
Urutan CSI yang dikirim oleh emulator terminal kernel Linux berbeda dengan xterm
atau vt100
Urutan CSI yang dikirim oleh program emulator terminal GUI dalam mode DEC VT. (Faktanya, mereka sangat istimewa dan non-standar, dan berbeda baik untuk semua terminal nyata yang saya tahu, dan hampir semua emulator terminal perangkat lunak lain selain dari yang dibangun ke dalam Linux.)
Emulator terminal GUI
Emulator terminal GUI Anda adalah salah satu dari banyak program, dari demon SSH hingga screen
, yang menggunakan terminal semu. Jenis terminal tergantung dari program emulator terminal apa yang berjalan di sisi master terminal semu, dan bagaimana konfigurasinya. Kebanyakan emulator terminal GUI akan memulai program di sisi slave dengan TERM
variabel yang nilainya cocok dengan emulasi terminalnya di sisi master. Program seperti server SSH akan mencoba untuk "melewati" jenis terminal yang ada di ujung klien koneksi. Biasanya ada beberapa menu atau opsi konfigurasi untuk dipilih di antara emulasi terminal.
Tangan yang mencengkeram
Cara yang tepat untuk mendeteksi kemampuan warna adalah tidak untuk memasang daftar tipe terminal dalam skrip Anda. Ada banyak sekali jenis terminal yang mendukung warna.
Cara yang benar adalah dengan melihat apa yang termcap/terminfo katakan tentang jenis terminal Anda.
colour=0 if tput Co > /dev/null 2>&1 then test "`tput Co`" -gt 2 && colour=1 elif tput colors > /dev/null 2>&1 then test "`tput colors`" -gt 2 && colour=1 fi
Bacaan lebih lanjut
- Jonathan de Boyne Pollard (2018).
TERM
. Panduan nosh . Perangkat Lunak.