7.26. Wirtualne konsole w Linuksie

Możemy ich mieć wiele - najprawdopodobniej do 255. Konsole te oznaczane są symbolem ttyX, gdzie X jest identyfikatorem konsoli (terminala) - liczbą naturalną (np. tty1, tty2, tty3 itd.). Reprezentowane są przez urządzenia znakowe w katalogu /dev (np. /dev/tty1) o numerze MAJOR=4 i MINOR=0...255. Bezpośredni dostęp przez kombinację klawiszy ALT-<klawisz funkcyjny> możemy mieć do początkowych 24-ch terminali (tty1 - tty24). Terminale tty1-tty12 osiągamy poprzez wciśnięcie lewego klawisza ALT i klawisza funkcyjnego Fn, co powinno nas przełączyć na terminal ttyn (np. po naciśnięciu ALT-F6, przełączamy się na terminal tty6). Kolejnych 12 terminali jest osiągalnych przez prawy ALT-Fn, co przełącza nas na terminal tty{n+12} (np. prawy ALT-F2 przełącza nas na terminal tty14). Innym sposobem przełączania terminali jest użycie kombinacji ALT-<strzałka>. Po naciśnięciu prawej strzałki przełączamy się na kolejną konsolę, natomiast po naciśnięciu lewej przechodzimy na poprzedni terminal. Wszystkie te operacje są przeprowadzane modulo ilość terminali.

Przykład: załóżmy, że pracujemy w standardowym 3-cim runlevelu bez iksów. Niech aktualnym terminalem będzie tty3. Wtedy pięciokrotne naciśnięcie ALT-<prawa strzałka> przełączy nas kolejno na terminale tty4, tty5, tty6, tty1, tty2. Wówczas pięciokrotne naciśniecie lewej strzałki przeniesie nas kolejno na terminal tty1, tty6, tty5, tty4, tty3 (z powrotem do punktu wyjścia). Ten sam rezultat moglibyśmy osiągnąć naciskając jeszcze jeden raz ALT-<prawa strzałka>

Powyższe skróty (ALT-<klawisz funkcyjny> ALT-<strzałka> nie działają niestety pod iksami, w iksach mają one inne znaczenie. Do przełączenia konsoli, gdy aktywne są iksy, używamy kombinacji lewy ALT-CTRL-<klawisz funkcyjny> o działaniu odpowiadającym kombinacji lewy ALT-<klawisz funkcyjny> w konsolach tekstowych. Uwaga: kombinacja ALT-CTRL-<strzałka> nie może być używana w ten sposób. Dostęp do konsoli o dużych numerach (np. tty25, tty26) jest tylko przez ALT-<strzałka>. Problem z przełączaniem konsoli pojawia się, gdy mamy równocześnie wiele sesji iksów. Wprawdzie taka sytuacja nie zdarza się w praktyce nigdy (iksy + KDE to grubo ponad 20 MB ramu), ale niespójność systemu dostępu do odpowiednich terminali jest trochę irytująca.

Każdy terminal, zanim może być użyty, musi być otwarty. Służą to tego programy z rodziny getty. Sam getty (/sbin/getty) jest dosyć mocnym programem i może być używany do otwierana konsol wirtualnych jak i innych terminali (np. połączonych portem szeregowym). Dlatego używa się przeważnie jego uproszczonych, wyspecjalizowanych klonów: mingetty do otwierania konsol wirtualnych, mgetty do modemów i innych. mingetty jest uruchamiany przez inita. W standardowym RedHacie init uruchamia mingetty'a sześciokrotnie. Fragment pliku /etc/inittab:

1:2345:respawn:/sbin/mingetty tty1
2:2345:respawn:/sbin/mingetty tty2
3:2345:respawn:/sbin/mingetty tty3
4:2345:respawn:/sbin/mingetty tty4
5:2345:respawn:/sbin/mingetty tty5
6:2345:respawn:/sbin/mingetty tty6
Jeżeli mamy potrzebę użycia większej ilości terminali (konsol), to należy dopisać odpowiednie wywołania mingetty'a, np.:
11:2345:respawn:/sbin/mingetty tty11
12:2345:respawn:/sbin/mingetty tty12

Uwaga! Niektóre dystrybucje nie mają urządzeń specjalnych w katalogu /dev/ reprezentujących wyższe numery terminali (tty13-tty24), nie mówiąc już o terminalach o jeszcze wyższych identyfikatorach. Tak jest w RedHacie. Należy wówczas (tylko gdy jest taka potrzeba, czyli nieczęsto) dodać te urządzenia ręcznie, np. komendą mknod:

	mknod /dev/tty12 c 4 12
	mknod /dev/tty13 c 4 13
	mknod /dev/tty14 c 4 14
Dopiero wtedy wrzucamy konfigurację do inittaba i możemy się cieszyć prawym ALT-Fn.

Terminale otwierane są również przez iksy (X-serwer jest związany z jakimś określonym terminalem). Iksy wchodzą nam na pierwszy wolny terminal (z wyjątkiem "zarezerwowanego" tty1) : w przypadku standardowych dystrybucji 6-cio terminalowych jest to terminal siódmy (tty7). Tak jest w przypadku uruchamiania Linuksa w runlevelu 5-tym, jak i w przypadku ręcznego uruchamiania iksów komendą startkde, startx itp. Teoretycznie, gdyby żaden z terminali nie był inicjowany przez inita, iksy pakowałyby się na terminal drugi (tty2). W przypadku, gdy wszystkie dostępne terminale są już zajęte (otwarte przez konsolowego mingetty'a lub otwarte przez inne sesje iksów) X-server wyjdzie z błędem "Could not open /dev/ttyXX". Wtedy należy użyć komendy mknod do stworzenia urządzenia wirtualnego /dev/ttyXX. Iksy dobrze się czują również na wysokich numerach terminali (np. tty30), dostęp jednak do nich jest trochę utrudniony (wielokrotne ALT-<strzałka>).

7.26.1. "Naprawianie" terminali wirtualnych

Czasami terminal zostaje "zepsuty" (np. przez próbę wyświetlenia pliku binarnego za pomocą komendy cat). "Zepsucie" objawia się zwykle poprzez niezrozumiałe znaki na terminalu (lub brak wyświetlania czegokolwiek). Spowodowane jest zmianą pewnych parametrów terminala. Naprawienie polega na wpisaniu komendy:

stty sane
lub
reset
(działanie obu komend jest w tym przypadku identyczne). W trakcie wpisywania komendy nie należy zwracać uwagi na to, że znaki komendy nie są wyświetlane lub wyglądają niezrozumiale (i tak powinna przynieść skutek). Jeżeli jednak nie pomoże, może to oznaczać, że terminal został zablokowany. Zablokowanie to następuje zazwyczaj po naciśnięciu CTRL-S i łatwo je zrobić przypadkowo. Żeby odblokować terminal, należy zwykle nacisnąć CTRL-Q.