На текущий момент времени многопользовательские системы с настоящими физическими терминалами, подключенными посредством интерфейса RS232 и его драйвера ttyS(4) к большой ЭВМ,-— экзотическая редкость. На персональных ЭВМ для взаимодействия с пользователем имеются .стандартные клавиатура, видеоадаптер и монитор, формирующие так называемую W: [консоль], которая используется драйвером виртуальных терминалов для эмуляции нескольких физических терминалов.
Узнать имя текущего терминала (а точнее — имя специального файла устройства терминального драйвера), на котором выполнен вход в систему, позволяет команда tty(1), а список всех терминальных входов пользователей команды users(1), who(1) и w(1).
Утилиты tty, users, who и w
flnn@ubuntu:~$ tty ↵
/dev/tty1
finn@ubuntu:~$ users ↵
bubblegum flnn iceking jake jake marceline
finn@ubuntu:~$ who ↵
Iceking tty4 2015-03-27 10:46
bubblegum tty5 2015-03-27 10:46
marceline tty3 2015-03-27 10:47
finn tty1 2015-03-27 10:46
jake tty7 2015-03-24 23:46
jake pts/3 2015-03-27 10:47 (:0.0)
finn@ubuntu:~$ w ↵
10:47:52 up 2 days, 11:02, 9 users, load average: 0,05, 0,18, 0,27
USER TTY FROM LOGIN IDLE JCPU PCPU WHAT
Iceklng tty4 10:46 1:20 0.05s 0.00s -sh
bubblegu tty5 10:46 1:04 0.04s 0.00s -sh
marcelin tty3 10:47 32.00s 0.06s 0.06s -sh
finn tty1 10:46 1:04 0.50s 0.44s w
jake tty7 Tue23 2days 25:36 2.88s gnome-session
jake pts/3 :0.0 10:47 0.00s 0.21s 0.00s -bash
Драйвер виртуального терминала позволяет переключаться между эмулируемыми терминалами при помощи сочетания клавиш Ctrl + F1, …, Ctrl + F12 (первые двенадцать терминалов из 63 возможных), Alt + ← в для переключения на предыдущий, Alt + → для переключения на следующий виртуальный терминал. При переключении из графического виртуального терминала на другой виртуальный терминал необходимо добавлять к сочетанию еще и клавишу Ctrl, т. к. сочетания с клавишей Alt востребованы самим графическим интерфейсом, например Alt + F4 закрывает активное окно. Таким образом, для переключения из графического на третий виртуальный терминал используется сочетание Alt + Ctrl + F3. Также, драйвер виртуальных терминалов позволяет листать буфер вывода виртуального терминала при помощи сочетаний Ctrl +PgUp и Ctrl +PgDn (к сожалению, после переключения терминалов буфер пропадает).
Как и любым другим, драйвером виртуальных терминалов можно управлять при помощи специально предназначенных команд, например, программа chvt(1) позволяет переключаться на заданный терминал по его номеру, а команда программы setfont(l) — загружать шрифты, формирующие начертания алфавитно-цифровых знаков.
Псевдотерминалы
При работе в оконной системе X Window System используются графические терминалы, тогда как для командного интерфейса требуется алфавитно-цифровой терминал. В этом случае он эмулируется при помощи драйвера псевдотерминала pty(4) (pseudo tty) и приложения-посредника— эмулятора терминала (например, xtern или gnone-terminal), который связывает действительный обмен d графическом окне с мультиплексором псевдотерминалов ptmx(4) (pseudoterminal multiplexer), а тот, в свою очередь, присоединен драйвером к подчиненному псевдотерминалу pts(4) (pseudoterminal slave) командного интерфейса.
Таким образом, командный интерпретатор и запускаемые им программы работают с воображаемом псевдотерминалом так, как будто окно графического приложения является настоящим физическим дисплеем и настоящей физической клавиатурой настоящего терминала. В примере вышеприведенного листинга пользователь finn зарегистрирован в системе на первом виртуальном терминале tty1, а пользователь jake зарегистрирован на седьмом (графическом) виртуальном терминале tty7 в оконной системе и работает с командным интерфейсом на третьем псевдотерминале pts/3 в окне эмулятора терминала.
Аналогично, при подключении удаленного алфавитно-цифрового терминала посредством протоколов удаленного доступа (например, SSH) приложение-посредник (например, демон сетевой службы sshd) связывает действительный обмен в сетевом соединении с мультиплексором псевдотерминалов.
Нужно заметить, что на этапе входа пользователя в систему посредством алфавитно-цифрового терминала последовательно запускаются: обработчик терминалов, обработчик аутентификации и авторизации пользователей, а затем командный интерпретатор, например bash(1). Именно getty(1) предъявляет пользователю заставку операционной системы и приглашение к вводу имени пользователя, a login(1) — приглашение к вводу пароля, сообщение о последнем успешном входе и сообщение дня.
Аналогичные процессы происходят при любом входе пользователя в систему, например через псевдотерминалы «графического» или «сетевого» доступа. В любом случае после аутентификации и авторизации основной программой (и первой в сеансе пользователя), интерпретирующей вводимые пользователем команды, является командный интерпретатор.