TERM ortam değişkeni varsayılanı nereden ayarlanır?


26

Masaüstü GUI’de GNOME Terminal emülatörüne sahip bir terminal penceresi açtığımda, TERM çevre değişkeni varsayılan değer olarak belirlenir xterm.

Ben kullanırsanız CTL+ ALT+ F1bir konsol TTY penceresine anahtara ve echo $TERMdeğer olarak ayarlanır linux.

Sormak için motivasyonum, dosyamda ~/.bashrcbir renk kabuğunun sağlanıp sağlanmadığını ya da sadece eski moda tek renkli olup olmadığını belirlemek için bir değişken kullanılmasıdır.

# set a fancy prompt (non-color, unless we know we "want" color)
case "$TERM" in
    xterm-color) color_prompt=yes;;
esac

İsterseniz hem konsol kabuğunda hem de Gnome Terminal emülatörü kabuğunda

export TERM=xterm-color
source /.bashrc

her iki kabuk da renkli moda geçer (her zaman ikisinde de olmak istediğim bir şey).

Varsayılan TERMdeğerler lütfen nerede belirlenir ve varsayılan ayarların değiştirilebileceği en iyi yer neresidir ? Terminal emülatörü GUI'sinde, varsayılan TERM değerini seçmek veya ayarlamak için hiçbir şey yok gibi görünüyor.

Satırı dosyamın başına eklemeyi export TERM=xterm-colordüşündüm ~/.bashrcama içgüdülerim bunun en iyi çözüm olmadığını ve Google aramalarımın henüz beni iyi bir cevaba yol açmadığını söylüyor.

Ubuntu 15.04 Desktop Edition (Debian Based) kullanıyorum.


Yanıtlar:


17

Bağımlı olarak birçok yerde

Sanal terminallerde ve gerçek terminallerde, TERMortam değişkeni, zincirleme yapılan program tarafından ayarlanır loginve bir kez oturum açtığında yürütülen etkileşimli kabuk boyunca kalıtımsal olarak alınır. Tam olarak, bunun gerçekleştiği yer sistemden sisteme ve terminal türüne göre değişir.

Gerçek, seri, terminaller, kablonun diğer ucunda bulunanlara göre çeşit olarak değişebilir. Bu yüzden geleneksel olarak, gettyprogram, terminal tipini belirten bir argüman ile çağrılır veya TERMprogram bir servis yöneticisinin servis konfigürasyon verilerinden geçirilir .

  • Van Smoorenburg initsistemlerinde, /etc/inittabgirişler arasında bir şey okuyacak olan bir kişi görülebilir .

    S0: 3: yeniden doğdu: / sbin / agetty tty00 9600 vt100-nav
    Bu agettysatırdaki son argüman vt100-nav, için belirlenen terminal türüdür /dev/ttyS0. Öyleyse /etc/inittab, bu tür sistemlerdeki gerçek terminaller için terminal türünü değiştirin.
  • Systemd sistemlerinde , bunu okuyan /usr/lib/systemd/system/serial-getty@.servicebirim dosyasında ( /lib/systemd/system/serial-getty@.servicebirleştirilmemiş sistemlerde) görülebilir

    Çevre = SÜRE = vt100
    TERMortamdaki değişkeni ayarlamaya geçti agetty. Bu servis birimi dosyası, bu tür sistemlerdeki gerçek terminallerin terminal tipini değiştirmektedir. Bunun , bu servis birimi şablonunu kullanan tüm gerçek terminaller için geçerli olduğunu unutmayın . (Yalnızca bireysel terminallerde değiştirmek için, şablonun el ile başlatılması gerekir.)
  • BSD'lerde, initterminal türünü her bir terminalin /etc/ttysveri tabanındaki girişinin üçüncü alanından alır ve TERMbununla çalıştığı ortamda ayarlar getty. Yani /etc/ttysBSD'lerdeki gerçek terminaller için terminal tipi değiştiriliyor.

Çekirdek sanal terminalleri, belirttiğiniz gibi, sabit bir türe sahiptir. Hareket halindeyken çekirdek sanal terminal türünü değiştirebilen NetBSD'den farklı olarak, Linux ve diğer BSD'ler, çekirdeğin yerleşik terminal emülasyon programında uygulanan tek bir sabit terminal türüne sahiptir. Linux'ta, bu tür linuxterminfo veritabanından eşleşir . (FreeBSD'nin çekirdek terminal öykünmesi xterm9. sürümden beri sınırlı bir alt kümedir.)

  • Program kullanan mingettyveya vc-get-tty(no paketinden) sistemlerde, program yalnızca sanal bir terminalle konuşabileceğini "bilir" ve programın derlendiği işletim sistemine uygun "bilinen" sanal terminal türlerini sabitlediler.
  • Systemd sistemlerinde , bunu okuyan /usr/lib/systemd/system/getty@.servicebirim dosyasında ( /lib/systemd/system/getty@.servicebirleştirilmemiş sistemlerde) görülebilir

    Çevre = SÜRESİ = linux
    TERMortamdaki değişkeni ayarlamaya geçti agetty.

Çekirdek sanal istasyon, bir etmez terminal türünü değiştirmek. Sonuçta, çekirdekteki terminal emülatör programı değişmiyor. Öyle yanlış türünü değiştirmek için. Özellikle, bu imleci / düzenleme anahtarını CSI dizilimini tanımaya mahveder. linuxLinux çekirdek terminal emülatörü tarafından gönderilen CSI dizileri farklı olan xtermya da vt100Aralık VT modunda GUI terminal emülatörü programları tarafından gönderilen CSI dizileri.

GUI terminal emülatörünüz, SSH sunucusundan screensahte terminal kullanan birçok programdan biridir . Terminal tipinin ne olduğu, sözde terminalin ana tarafında hangi terminal emülatör programının çalıştığına ve nasıl yapılandırıldığına bağlıdır. GUI terminal emülatörlerinin çoğu, programı TERMana taraftaki değeri, terminal ana emülasyonu ile eşleşen bir değişkenle başlatacaktır . SSH sunucusu gibi programlar, bağlantının istemci ucunda bulunan terminal tipini "geçmeye" çalışacaktır. Genellikle terminal emülasyonları arasından seçim yapabileceğiniz bazı menü veya yapılandırma seçenekleri vardır.

Sürükleyici el

Renk kabiliyetini tespit etmenin doğru yolu , betiğinizdeki terminal türlerinin bir listesini düzenlemek değildir . Rengi destekleyen çok sayıda terminal türü vardır.

Doğru yol termcap / terminfo'nun terminal tipiniz hakkında ne söylediğine bakmaktır.

Renk = 0
eğer tput Co> / dev / null 2> & 1
sonra
    "` tput Co` "testi -gt 2 && renk = 1
elif tput renkler> / dev / null 2> & 1
sonra
    testi "` tput renkler "" -gt 2 && renk = 1
fi

daha fazla okuma

  • Jonathan de Boyne Pollard (2018). TERM. nosh Kılavuzu . Yazılımları.

Aşağıdaki Debian jessie varsayılan .bashrc bulunmaktadır: [ -x /usr/bin/tput ] && /usr/bin/tput setaf 1 >&/dev/null && color_prompt=yes. (ncurses 5.9)
thom_nic 16:17

2
Ayrıca tput CoJessie ve Xenial'de "bilinmeyen terminfo yeteneği" döndürür. tput colorsve tput setaf 1ben anlamıyorum itiraf rağmen her iki işin görünüyor neden .
thom_nic

2

Neden yanlış bir yaklaşım ve Ubuntu'nun eski olduğunu düşündüğüm hakkındaki ayrıntılı cevabım için lütfen /ubuntu//a/614714/398785 adresine bakın . Gnome-terminal 3.16'dan beri varsayılan, ancak eski gnome-terminalleriyle kullanmak için güvenli olanı ile birlikte gitmenizi ve buna göre ayarlamanızı öneririm .TERM=xterm-color.bashrcTERM=xterm-256color.bashrc


1
Bağlantınız için +1. Küçük öneri; aşağıdaki cümle kafa karıştırıcı olabilir (ilk önce kullanmanın .bashrceski olduğunu söylediğiniz izlenimini edindim). "Ubuntu .bashrc eskidir."
IsaacS

@IacacS Nasıl geliştirileceği konusunda herhangi bir öneriniz var mı? Örneğin, "eski" yerine "modası geçmiş" bir yardım koymak mı?
egmont

1
Bu anlaşılmaktadır xterm-256colornedenlerini htoponun düzeni kadar karışıklık böyle Ubuntu 18.04 de.
Monica

@OrangeDog Hangi terminal emülatöründe? Buradaki soru ve buna cevabım benim GNOME Terminaline odaklanırken, bağladığınız sayfa Konsole'yi göstermektedir. Böcek uçbirim öykünücüsü, hemşirelerin o zaman kullanmaya başladıkları REP kaçış dizisini henüz desteklemiyor gibi gözüküyor. VTE (GNOME Terminal), Ubuntu 18.04’te ona zaten destek vermişti, olasılıkları Konsole’nin sahip olmadığı. En fazla kırılma konusundaki yorumunuzun Konsole için geçerli olduğunu ancak GNOME Terminali için geçerli olmadığını düşünüyorum.
egmont

@ egmont orijinal sorun için konuşamıyor, ancak WSL'nin terminali ile aynı sonucu alıyorum (her neyse).
Monica
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.