Konsola linuksowa

Uproszczona struktura jądra Linuksa: podsystem VT
Konsola bufora ramki pokazująca uruchamianie Knoppiksa . Obecność grafiki pingwina wskazuje, że jest to konsola bufora ramki, a nie konsola trybu tekstowego.

Konsola Linux jest wewnętrzną konsolą systemową jądra Linux . Konsola systemowa to urządzenie odbierające wszystkie komunikaty i ostrzeżenia jądra oraz umożliwiające logowanie w trybie pojedynczego użytkownika. Konsola Linuksa umożliwia jądru i innym procesom wysyłanie danych wyjściowych do użytkownika oraz odbieranie danych wejściowych od użytkownika. Użytkownik zazwyczaj wprowadza tekst za pomocą klawiatury komputera i odczytuje tekst wyjściowy na monitorze komputera . Jądro Linuksa obsługuje konsole wirtualne – konsole, które są logicznie oddzielne, ale które mają dostęp do tej samej fizycznej klawiatury i wyświetlacza. Konsola Linux (i wirtualne konsole Linux) są implementowane przez podsystem VT jądra Linux i nie polegają na żadnym przestrzeni użytkownika . Kontrastuje to z emulatorem terminala , który jest procesem w przestrzeni użytkownika, który emuluje terminal i jest zwykle używany w środowisku wyświetlania graficznego.

Konsola Linuksa była jedną z pierwszych funkcji jądra i została pierwotnie napisana przez Linusa Torvaldsa w 1991 roku (patrz historia Linuksa ). Istnieją dwie główne implementacje: bufor ramki i tryb tekstowy . Implementacja bufora ramki jest domyślna we współczesnych dystrybucjach Linuksa i wraz z ustawieniem trybu jądra zapewnia obsługę sprzętu wyświetlającego i funkcji na poziomie jądra, takich jak wyświetlanie grafiki podczas uruchamiania systemu. Starsza implementacja trybu tekstowego była używana w systemach kompatybilnych z komputerami PC Karty graficzne CGA , EGA , MDA i VGA . Architektury inne niż x86 wykorzystywały tryb bufora ramki, ponieważ ich karty graficzne nie implementowały trybu tekstowego. Konsola Linuksa używa bitmapy o stałym rozmiarze , czcionki o stałej szerokości , zwykle domyślnie 8x16 pikseli na znak.

Konsola Linux jest opcjonalną funkcją jądra i większość wbudowanych systemów Linux jej nie obsługuje. Systemy te zazwyczaj zapewniają alternatywny interfejs użytkownika (np. oparty na sieci) lub natychmiast uruchamiają graficzny interfejs użytkownika i wykorzystują go jako podstawowy sposób interakcji z użytkownikiem. Inne implementacje konsoli Linux obejmują brajlowską obsługującą odświeżalne monitory brajlowskie oraz konsolę portu szeregowego .

Zamiar

Konsola Linuksa umożliwia jądru i innym procesom wysyłanie komunikatów tekstowych do użytkownika oraz otrzymywanie tekstowych danych wejściowych od użytkownika. W Linuksie kilka urządzeń może służyć jako konsola systemowa: terminal wirtualny, port szeregowy, port szeregowy USB, VGA w trybie tekstowym, bufor ramki. Niektóre nowoczesne systemy oparte na Linuksie mają przestarzały tryb tekstowy wejścia i wyjścia oparty na jądrze i zamiast tego pokazują graficzne logo lub pasek postępu podczas uruchamiania systemu, po którym następuje natychmiastowe uruchomienie graficznego interfejsu użytkownika (np. X.Org Server na dystrybucje na komputery stacjonarne lub SurfaceFlinger na Androida).

Podczas uruchamiania jądra konsola jest często używana do wyświetlania dziennika rozruchu jądra. Dziennik rozruchu zawiera informacje o wykrytym sprzęcie oraz aktualizacje stanu procedury rozruchu. W tym momencie jądro jest jedynym uruchomionym oprogramowaniem, a zatem logowanie przez przestrzeń użytkownika (np. syslog ) nie jest możliwe, więc konsola zapewnia dogodne miejsce do wyprowadzania tych informacji. Gdy jądro zakończy ładowanie, uruchamia init (również wysyłając dane wyjściowe do konsoli), który obsługuje ładowanie reszty systemu, w tym uruchamianie demonów działających w tle .

Po zakończeniu procesu rozruchu , konsola będzie używana do multipleksowania wielu terminali wirtualnych (dostępnych po naciśnięciu Ctrl-Alt-F1, Ctrl-Alt-F2 itd., Ctrl-Alt-Strzałka w lewo, Ctrl-Alt-Strzałka w prawo lub chvt ). Na każdym wirtualnym terminalu uruchamiany jest proces getty , który z kolei uruchamia /bin/login w celu uwierzytelnienia użytkownika. Po uwierzytelnieniu zostanie uruchomiona powłoka poleceń . Wirtualne terminale, podobnie jak konsola, są obsługiwane na poziomie jądra Linuksa.

Konsola Linuksa implementuje typ terminala „linux”, a sekwencje ucieczki, których używa, znajdują się na stronie podręcznika console_codes .

Wirtualne konsole

Wirtualne konsole umożliwiają przechowywanie wielu buforów tekstowych, umożliwiając jednoczesne uruchamianie różnych programów konsolowych, ale interakcję z użytkownikiem w różnych kontekstach. Z punktu widzenia użytkownika tworzy to iluzję kilku niezależnych konsol.

Każda konsola wirtualna może mieć własny zestaw znaków i układ klawiatury. Linux 2.6 wprowadził możliwość załadowania innej czcionki dla każdej wirtualnej konsoli (wersje jądra starsze niż 2.6 zmieniają czcionkę tylko na żądanie).

Konsola trybu tekstowego

trybu tekstowego jest używana w systemach opartych na komputerach PC ze starszą kartą graficzną CGA/EGA/MDA/VGA, która implementuje tekstowe tryby wideo. W trybie tekstowym jądro wysyła tablicę znaków 2D do karty graficznej, a karta graficzna konwertuje te znaki na piksele do wyświetlenia.

Czcionka, zestaw znaków i układ klawiatury

Bufor tekstowy jest częścią pamięci VGA, która opisuje zawartość ekranu tekstowego w kategoriach punktów kodowych i atrybutów znaków. Punkty kodowe w buforze tekstu i czcionce generalnie nie są tym samym, co kodowanie używane w semantyce terminala tekstowego do umieszczania znaków na ekranie. Zestaw glifów na ekranie jest określany przez bieżącą czcionkę . Ekran tekstowy jest obsługiwany przez console.c i consolemap.c . Istnieje narzędzie do zmiany czcionek i kodowania terminali o nazwie consolechars .

Jądro Linuksa ( sterownik keyboard.c ) prawie całkowicie obsługuje wprowadzanie z klawiatury ( układy klawiatury ), ale pozostaje trochę niespójne, ponieważ źle współdziała z różnymi zestawami znaków. Układy są ładowane przez loadkeys .

Te dwa narzędzia i odpowiadające im pliki danych są spakowane w Linux Console Tools http://lct.sourceforge.net/ dostarczane z wieloma dystrybucjami Linuksa .

Już w 1994 roku Markus Kuhn i Andries Brouwer rozpoczęli starania o internacjonalizację Linuksa na poziomie jądra .

Tryby tekstowe

Konsola Linuksa może obsługiwać każdy tryb tekstowy w stylu VGA, ale samo jądro ma bardzo ograniczone możliwości ustawienia tych trybów. SVGATextMode pomaga włączyć bardziej złożone tryby tekstowe niż standardowe tryby EGA i VGA. Jest w pełni kompatybilny z Narzędziami Konsoli, ale ma pewne konflikty z dosemu , SVGAlib i display .

Obecnie nie ma obsługi różnych trybów na różnych konsolach wirtualnych.

Porównanie do Windows i DOS

Microsoft Windows (dowolnej wersji) nie posiada w pełni funkcjonalnej obsługi konsoli. Porównywalną funkcją, ale tylko dla oprogramowania aplikacyjnego, jest konsola Win32 .

Funkcja Linuks Okna DOS
Atrybuty tekstowe VGA Tak Tak Tak
Niestandardowe czcionki Możliwy Możliwy Możliwy
Zestaw znaków
maks. 512 glifów (w tekście VGA), dowolna strona kodowa lub UTF-8

223 lub 256 znaków (w zależności od metody dostępu), dowolna strona kodowa lub Unicode
Przełączanie zestawu znaków w czasie wykonywania Możliwy Niemożliwe Zależy od PV
Emulacja terminala
Tak, zgodny z ANSI ( TERM = linux)
Tak, od Windows 10 „Próg 2”
Tak, ANSI (z ANSI.SYS )
Przełączanie w czasie wykonywania między trybem tekstowym a graficznym interfejsem użytkownika Z ustawieniem trybu jądra, utrudnionym przez jakiś sprzęt (np. zastrzeżone sterowniki) Nie ma możliwości powrotu do GUI Zależne od aplikacji
Run-time zmiana liczby wierszy i kolumn Możliwy Możliwy Zależne od aplikacji
Przełączanie między aplikacjami Możliwy Możliwy
Ograniczone ( mogą zostać aktywowane niektóre programy rezydentów zakończenia i pozostania )
Niestandardowe tryby Możliwy Niemożliwe Możliwy
Obsługa myszy Tak (z gpm lub podobnym) Zależne od aplikacji Zależne od systemu i aplikacji
wciśnięty tylko klawisz AltKey -> program zauważony [ potrzebne źródło ] Niemożliwe Możliwy Możliwy
  1. a b Unicode obsługiwany od systemów opartych na Windows NT , które umożliwiają przełączanie stron kodowych i używanie Unicode, ale tylko w trybie okienkowym. Ponadto systemy NT używają własnego formatu bufora tekstu niezgodnego z VGA, co powoduje narzut w sprzętowych trybach tekstowych. Brak obsługi Unicode w wersjach systemu Windows innych niż NT
  2. a Ponieważ układ klawiatury inny niż ASCII powinien zostać ponownie załadowany z powodu wadliwej implementacji.
  3. a Ustawienia trybu jądra w najnowszych jądrach sprawiają, że jest to bardziej praktyczne w przypadku niektórych urządzeń wideo.

Konsola bufora ramki Linux

Linux framebuffer (fbdev) to graficzna warstwa abstrakcji niezależna od sprzętu, która została pierwotnie zaimplementowana, aby umożliwić jądrze Linuksa emulację konsoli tekstowej w systemach takich jak Apple Macintosh, które nie mają wyświetlacza w trybie tekstowym. Teraz oferuje przestrzeni jądra na dowolnej platformie. Jego przewagą nad (obecnie nieobsługiwanym) SVGATextMode jest niezawodność i lepsza kompatybilność sprzętowa. Pozwala to również ominąć wszelkie techniczne ograniczenia trybów tekstowych VGA .

Konsola bufora ramki Linux różni się od konsoli VGA tylko sposobem rysowania znaków. Przetwarzanie zdarzeń klawiatury i obsługa konsol wirtualnych są dokładnie takie same.

Konsola portu szeregowego Linux

Konsola szeregowa Linuksa to implementacja konsoli przez port szeregowy , włączana przez opcję CONFIG_SERIAL_CONSOLE w konfiguracji jądra. Może być stosowany w niektórych systemach wbudowanych oraz na serwerach , gdzie nie oczekuje się bezpośredniej interakcji z operatorem . Konsola szeregowa umożliwia ten sam tryb dostępu do systemu, ale zwykle z mniejszą szybkością ze względu na małą przepustowość RS-232 . Konsola szeregowa jest często używana podczas opracowywania oprogramowania dla systemów wbudowanych i czasami jest dostępna przez port debugowania .

Postacie kontrolne

Konsola reaguje na kilka znaków sterujących :

Postać kontrolna Nazwa ASCII Opis
^ G BEL Dźwięk dzwonka
^ H BS Backspace
^ Ja HT Zakładka pozioma
^ J LF Wysuw linii
^ K VT Zakładka pionowa
^ L FF Kanał formularza
^ M CR Powrót karetki
^ N WIĘC Wycofaj się
^ O SI Wejdź
^ X MÓC Anuluj sekwencję ucieczki
^ Z POD Anuluj sekwencję ucieczki
^[ WYJŚCIE Ucieknij / rozpocznij sekwencję ucieczki
^? DEL Nic
ALT-^[ nie dotyczy Rozpocznij sekwencję poleceń
Sekwencja kontrolna Opis
^ [M Odwrotne wysunięcie wiersza
^ [D Wysuw linii
^ [E Powrót karetki i wysunięcie wiersza
^ [H Ustaw tabulator
^[7 Zapisz kursor
^[8 Przywróć kursor
^[> Przełącz klawiaturę w tryb numeryczny
^[= Przełącz klawiaturę w tryb aplikacji
^ [ok Zresetuj ustawienia terminala
^[Z Wydrukuj identyfikator terminala

Dla ^[ naciśnij klawisz Escape.

Konsola obsługuje również rozszerzone sekwencje specjalne, sekwencje trybu ANSI CSI oraz sekwencje trybu prywatnego DEC. Te rozszerzone sekwencje mogą sterować kolorami, efektami wizualnymi, takimi jak miganie, podkreślenie, intensywność i odwrócone wideo, częstotliwość i czas trwania dzwonka, interwał wygaszania ekranu VESA. Oprócz wygaszania tekstu nie ma znanego sposobu na przełączenie adaptera VGA w tryb gotowości.

Przyszłe plany

Projekty Kmscon mają na celu stworzenie nowoczesnego zamiennika przestrzeni użytkownika dla konsoli Linux. Priorytety rozwojowe obejmują obsługę z wieloma monitorami , renderowanie czcionek Unicode za pomocą Pango , obsługę klawiatury XKB i GPU OpenGL przyśpieszenie. Narzekania na obecną implementację jądra obejmują „to, że jest to interfejs użytkownika w przestrzeni jądra, kod jest źle utrzymywany, źle obsługuje klawiatury, generuje złe renderowanie czcionek, brakuje ustawiania trybu i obsługi wielu głowic, nie zawiera wielu świadomość siedzenia i ma ograniczoną obsługę podłączania podczas pracy, ograniczoną do VT102 .

Lista wpisów /dev/ związanych z konsolą

Nazwa Główny Drobny Opis
/dev/tty0 do 4 0 "bieżąca konsola"


/dev/tty1 ... /dev/tty63
do 4

1 ... 63

wirtualne konsole (sterowane klawiaturą)

/dev/ttyS0 ...
do 4
64 ...
Porty szeregowe , odpowiednie dla konsoli systemowej
/dev/vcs do 7 0
Ekran konsoli wirtualnej /dev/vcs to zawartość bieżącego ekranu wirtualnego.


/dev/vcs1 ... /dev/vcs63
do 7

1 ... 63
Tekst (tabela wskaźników znaków) wirtualnego ekranu.


/dev/vcsa1 ... /dev/vcsa63
do 7

129 ... 191

Ekran konsoli wirtualnej z atrybutami Pełny obraz wirtualnego bufora tekstowego; pierwsze 4 bajty zawierają numery wierszy, kolumn i pozycję kursora

Zobacz też