Jakiego typu terminala używam?


51

Przetestowałem to zarówno z Ubuntu 12.04, jak i Debian 7. Kiedy to robię

echo $TERM

dostaję

xterm

Ale jeśli użyję menu rozwijanego „help”> „about”, to powie gnome terminal 3.4.1.1.

Czy to oznacza, że ​​używam tylko terminala gnome? A może po prostu Xterm? A może gnome-terminal jest przedłużeniem Xtermu? Jestem zmieszany.

Odpowiedzi:


49

Do czego służy $TERM?

$TERMZmienna jest do wykorzystania przez aplikacje, aby skorzystać z możliwości tego terminala.

Na przykład, jeśli program chce wyświetlać kolorowy tekst, musi najpierw dowiedzieć się, czy terminal, którego używasz, obsługuje kolorowy tekst, a następnie, jeśli tak, jak zrobić kolorowy tekst.

Działa to tak, że system utrzymuje bibliotekę znanych terminali i ich możliwości. W większości systemów jest to dostępne /usr/share/terminfo(istnieje również termcap, ale jego spuścizna nie jest już używana).

Powiedzmy, że masz program, który chce wyświetlać czerwony tekst. Zasadniczo wywołuje bibliotekę terminfo, która mówi „ podaj mi sekwencję bajtów, którą muszę wysłać na czerwony tekst dla terminala xterm ”. Następnie pobiera te bajty i drukuje je.
Możesz tego spróbować samodzielnie tput setf 4; echo hi. Spowoduje to uzyskanie setfmożliwości terminfo i przekazanie jej parametru określającego żądany 4kolor.


Dlaczego terminal gnome polega na sobie:

Powiedzmy teraz, że masz nowy błyszczący emulator terminala, który właśnie został wydany, a systemowa biblioteka terminfo nie ma jeszcze dla niego definicji. Gdy aplikacja przejdzie w celu sprawdzenia, jak coś zrobić, zakończy się niepowodzeniem, ponieważ terminal nie jest znany.

Sposób, w jaki omijasz ten terminal, polega na kłamaniu na temat tego, kto to jest. Więc twój terminal gnomów mówi „ Jestem Xterm ”.

Xterm jest bardzo podstawowym terminalem, który istnieje od początku X11, a zatem większość emulatorów terminali obsługuje to, co obsługuje. Tak więc, mówiąc, że terminal gnome mówi, że jest to xterm, bardziej prawdopodobne jest, że będzie miał definicję w bibliotece terminfo.

Wadą tego typu terminala jest to, że terminal może obsługiwać znacznie więcej niż Xterm (na przykład wiele nowych terminali obsługuje 256 kolorów, podczas gdy starsze terminale obsługują tylko 16). Masz więc kompromis, zyskujesz więcej funkcji lub masz większą kompatybilność. Większość terminali zdecyduje się na większą kompatybilność, a tym samym reklamuje się jako xterm.

Jeśli chcesz to zmienić, wiele terminali oferuje pewien sposób konfiguracji zachowania. Ale możesz też po prostu zrobić export TERM=gnome-terminal.


4
Polecanie komuś eksportu $ TERM naprawdę wygląda jak wcieranie soli w otwartą ranę ...
jasonwryan

1
Tak. Zgaduję, że twórcy gnome-terminal lewej $TERMustawiony xtermza dobry powód
mulllhausen

4
@mulllhausen Ten powód został dobrze wyjaśniony w mojej odpowiedzi ...
Patrick,

27

TERMZmienna wskazuje na terminalu typu , nie terminal aplikacji . TERMma określony cel: mówi aplikacjom działającym w tym terminalu, w jaki sposób ma on działać z terminalem.

Aplikacje współdziałają z terminalami, pisząc sekwencje specjalne - sekwencje znaków, które zawierają znaki niedrukowalne i mają takie efekty, jak przesuwanie kursora, usuwanie części ekranu, zmiana bieżącego koloru itp. W dawnych czasach różne marki fizycznych terminali miały różne zestawy sekwencji ucieczki. Dlatego system operacyjny utrzymuje bazę danych typów terminali i ich cech. Tradycyjna baza danych to termcap („MOŻLIWOŚCI TERMINALNE”); wiele nowoczesnych systemów i aplikacji przeszło na terminfo . Obie bazy danych są indeksowane według nazwy typu terminala, a aplikacje sprawdzają je przy użyciu nazwy typu terminala ze TERMzmiennych środowiskowych.

Obecnie większość terminali używa standardowego zestawu sekwencji specjalnych z kilkoma wspólnymi zestawami rozszerzeń, więc nie zobaczysz wielu różnych wartości TERM. Większość emulatorów terminali GUI jest zgodnych z Xterm , tradycyjnym terminalem X (który jest nadal używany i obsługiwany).

Emulatory terminali, które różnią się od xterm, mogą dodawać własne wpisy do bazy danych terminali pod własną nazwą. Nie działa to jednak dobrze ze zdalnymi powłokami. Program działający na komputerze A, ale wyświetlany na komputerze B, na przykład ponieważ został uruchomiony za pośrednictwem ssh z B do A, musi wysłać zapytanie do bazy danych terminali na komputerze A. Metody zdalnego logowania, takie jak ssh, przenoszą TERMzmienną środowiskową, ale jest to pomocne tylko wtedy, gdy baza terminali B ma również wpis dla wartości użytkownika na A. Dlatego wiele emulatorów terminali trzyma się tego, TERM=xtermco jest powszechnie znane.

Różnice między terminalami w dużej mierze nie wynikają ze sposobu interakcji aplikacji z nimi, ale ze sposobu, w jaki terminale wchodzą w interakcję z użytkownikiem i pasują do jego środowiska. Na przykład Gnome Terminal wygląda dobrze na Gnome i zapewnia zakładki i inne drobiazgi; Konsole wygląda dobrze w KDE i zapewnia zakładki i inne dodatki; urxvt ma małe zapotrzebowanie na pamięć; Console2 działa w systemie Windows; screen i tmux zapewniają sesje, które można podłączyć do różnych terminali nadrzędnych; i tak dalej. Ponieważ żadna z tych funkcji nie ma znaczenia dla aplikacji działających w terminalu, większość emulatorów terminali używa TERM=xterm.

Aby dowiedzieć się, na którym terminalu działa powłoka, spójrz na element nadrzędny powłoki:

ps -p$PPID

ps -p$PPIDWydaje się, że bieganie nie mówi mi, z którego terminala korzystam. A przynajmniej nie w sposób, który rozumiem. Czy masz przykładowy wynik / odpowiedź?
user3731622,

@ użytkownik Dane wyjściowe to zbiór liczb i tajemniczych skrótów, po których następuje wiersz poleceń. W większości przypadków wierszem poleceń jest ten, który uruchomił emulator terminala, w którym działa powłoka.
Gilles 'SO - przestań być zły'

12

Zmienna środowiskowa TERM nie oznacza używanego terminala.

Cytując gnu.org :

Zmienna środowiskowa TERM zawiera identyfikator możliwości okna tekstowego. Szczegółową listę tych możliwości można uzyskać, używając polecenia> „infocmp”, używając jako odniesienia „man 5 terminfo”.

Podczas tworzenia tekstu z osadzonymi dyrektywami kolorów msgcat patrzy na zmienną TERM. Obecnie okna tekstowe zwykle obsługują co najmniej 8 kolorów. Często jednak okno tekstowe obsługuje 16 lub więcej kolorów, mimo że zmienna TERM jest ustawiona na identyfikator oznaczający tylko 8 obsługiwanych kolorów. W takich przypadkach warto ustawić inną wartość zmiennej TERM:

xterm jest w większości przypadków zbudowany z obsługą 16 kolorów. Można go również zbudować z obsługą 88 lub 256 kolorów (ale nie obu). Możesz spróbować ustawić TERM na xterm-16color, xterm-88color lub xterm-256color. rxvt

rxvt jest często budowany z obsługą 16 kolorów. Możesz spróbować ustawić TERM na rxvt-16color. konsole

konsola też jest często budowana z obsługą 16 kolorów. Możesz spróbować ustawić TERM na konsole-16color lub xterm-16color.

Po ustawieniu TERM możesz to zweryfikować, wywołując „msgcat --color = test” i sprawdzając, czy wydruk wygląda na rozsądną mapę kolorów. Zmienna środowiskowa TERM zawiera identyfikator możliwości okna tekstowego. Szczegółową listę tych możliwości można uzyskać za pomocą polecenia „infocmp”, używając jako odniesienia „man 5 terminfo”.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.