Как уже было сказано, в случае настольной машины консоль - это сочетание
экрана монитора и клавиатуры (мышь пока оставим в покое). То есть некая физическая
реалия, правда? Правда, чистая правда, но - не вся правда.
Потому что одно из первых открытий, которое совершал ранее начинаюший линуксоид,
- так называемые виртуальные консоли. Помнится, меня на первой фазе знакомства
с Linux'ом они просто привели в восторг (каковой не ослабевает и по сей день).
Нынче - не то: пользователь ну очень дружественного к нему дистрибутива,
где по умолчанию устанавливается графический вход в систему, имеет шанс просто
не узнать о них...
Виртуальные консоли - это (почти) самостоятельные системы (правда, работающие
за счет одних и тех же ресурсов), в каждой из которых может быть открыт отдельный
сеанс работы пользователя (или пользователей - а даже в самой-рассамой персональной
Linux-системе их как минимум двое, включая root'а) и запущен совершенно независимый
круг задач (включая оконную истсему X), со своими собственными настройками,
наиболее для этого круга подходящими.
По умолчанию в большинстве дистрибутивов Linux активизировано шесть витруальных
консолей (во FreeBSD, например, - восемь). Переключение между ними традиционно
осуществляется комбинацией клавиш Alt+(F1-F6), клавиша PrtScr перемещает
в следующую, после текущей, виртуальную консоль. Кроме того, т.н. Win-клавиши,
без которых не обходится ни одна современная "доска", по умолчанию также
служат для навигации по виртуальным консолям, позволяя перейти, скажем, к
последней использвовшейся, и т.д. - точно не помню, потому что всегда переопределяю
их назначение.
Раз уж зашла речь о переопределении - сделаю два маленьких замечания. Во-первых,
комбинация Alt+F# для перехода между консолями не являет собой нечто предопределенное
божественным промыслом. Ибо зависит исключительно от текущей раскладки клавиатуры,
о чем подробнее будет говориться в одной из следующих заметок. Другое дело,
что во всех известных мне штатных раскладках для Linux (и FreeBSD) именно
эта комбинация задействована под навигацию по консолям (тогда как в раскладках
OpenBSD, например, используется комбинация Alt+Control+F#). Но при желании
такое положение дел можно изменить (и об этом также речь пойдет впереди)
- другой вопрос, нужно ли это делать.
Во-вторых, на некоторых мультимедийных клавиатурах и клавиатурах ноутбучного
типа, с которыми мне приходилось сталкиваться, дополнительные win-клавиши
категорически отказывались выполнять свои навигационные функции. И вообще,
следует помнить, что во всех Unix-системах, вследствие их кросс-платформенности,
гарантированно однозначно ведут себя только основные алфавитно-цифровые клавиши,
прочие же (стрелки управления курсором, клавиши на цифровом блоке, даже Delete
и Backspace) в общем случае отнюдь не обязаны выполнять привычные пользователям
связки PC-Windows обязанности.
К слову сказать - именно в этом одна из причин неувядающей популярности
текстового редактора vi (и его клонов) среди системных администраторов: в
какой бы системе своего подшефного зоопарка он ни оказался, его не оставит
чувство уверенности в том, что привычные клавиши командного режима (под которые
задействована только основная часть "доски") будут всегда вести себя совершенно
однозначно.
Однако я отвлекся, вернемся к нашим консолям. Я уже говорил, что каждая
виртуальная консоль может рассматриваться как самостоятельная, индивидуально
настроенная, система. С оговоркой - "почти". Потому что в том, что касается
пользовательских настроек программного уровня, это верно безусловно: авторизовавшись
на второй консоли от лица другого пользователя, мы получаем рабочую среду,
свойства которой описаны в его пользовательских конфигурационных файлах.
Однако что касается собственно свойств консоли - тут существуют многочисленные
ограничения.
Одни из свойств консоли (такие, как цвет шрифта и фона) действительно могут
быть настроены независимо для каждой виртуальной консоли. Однако самые важные
для пользователя характеристики - шрифт и раскладка клавиатуры, - загружаются
для всех консолей сразу. Также на все консоли распространяется и карта соответствия
(так называемая mapscreen) кодировки ввода (то есть раскладки клавиатуры)
и кодировке вывода (то есть экранного шрифта), о чем подробнее будет говориться
в заметке о русификации. Хотя (и это важно) карта соответствия не активизуется
одновременно с активизацией произвольной виртуальной консоли. Тем не менее,
настроить одну консоль на вывод русских текстов в кодировке KOI8-R, другую
- в Windows-кодировке, а третью - так вообще в Unicode, без дополнительных
ухищрений (о которых я скажу в свое время) не удастся.
Равноценны ли виртуальные консоли? Чтобы ответить на этот вопрос, придется
обратиться к истории. Во времена былинные, до рождества PC, существовали
так называемые большие машины, которые жили своей самостоятельной жизнью
в специально отведенных заповедниках, куда пользователям путь был заказан.
И общались с ними пользователи посредством так назваемых терминалов - локальных
мониторов и клавиатур, не имевших собственных вычислительных ресурсов - все
они были сосредоточны в главной машине, предоставлявший их терминалам через
последовательные линии связи (но нынешнему, COM-порты). Власть пользователей
была ограничена, каждый управлял только своими данными, и не имел (теоретически)
никакой возможности повлиять на систему в целом.
Однако имелся среди пользователей один умник, который всех напаривал (пардон,
всем управлял). Он назывался root-оператором (или просто root'ом), обладал
всевластием в масштабе данной системы и реализовывал это всевластие с собственного,
всевластного, терминала. Вот этот-то терминал всевластия и назывался консолью
в предначальном смысле этого слова.
Казалось бы, консоль - точно такой же терминал, что и любой пользовательский.
Однако root, обладая тайным знанием - своим собственным паролем, от которого
его всевластие и зависело, мог засадить в систему все хитрости свои, все
меры защиты, и все такое. В частности - запрещение авторизоваться root'ом
с любого другого терминала, кроме консоли. А для напаривания (опять пардон,
управления) пользователями он делал так, чтобы на консоль выводились все
системные сообщения (в том числе сообщения об ошибках и информация об авторизации
пользователей), почему консоль root'а и получила название системной.
Однако PC уравняла пользователей в правах не хуже дивайса полковника Кольта.
И хотя даже на персоналке в любой Unix-системе по прежнему имеется всевластный
root, в роли его обычно выступает сам пользователь настольной машины, И в
его праве предоставить самому себе возможность авторизоваться root'ом или
обычным пользователем с любой из виртуальных консолей (случай ущемления прав
в домашних многопользовательских системах не рассматриваем, это - дело семейное).
Можно организовать даже автоматический беспарольный вход в систему на любой
из активизируемых при загрузке консолей.
Другое дело, что и тут можно зарезервировать для целей управления какую-либо
одну консоль (запретив с остальных авторизацию root'ом). А также отвести
отдельную консоль для вывода системных сообщений и сообщений об ошибках.
Однако от рождения все виртуальные консоли равноправны. Несколько "равнее" других
только текущая (в данный момент) консоль - именно на нее по умолчанию выводятся
системные сообщения (если вообще вывод их не подавлен, как часто делается
на настольных машинах). Разумеется, она же служит и для отображения ввода,
если не используются специальные приемы перенаправления (но это - тема разговора
о командных оболочках).
Еще одно отличие текущей консоли от всех прочих проявляется при запуске
с нее какой-либо программы графического режима, например, Иксов (а при этом
в первую очередь запускается вполне конкретная программа - X-сервер) или
приложений, основанных на библиотеке SVGAlib (последних, правда, немного,
кроме знаменитого Doom'а это, пожалуй, только графический вьювер zgv). В
этом случае текущая консоль просто блокируется вплоть до выхода из Иксов
(или из SVGAlib-программы). А для запушенной с нее программы активизируется
новая виртуальная консоль (об активизации новых консолей - в следующем разделе),
перехватывающая на себя и ввод, и вывод, то есть становящаяся текущей. Блокируется
при этом и традиционная клавишная комбинация перехода - Alt+F#. Чтобы вернуться
в какую-либо из виртуальных консолей, свободную от Иксов, требуется уже три
пальца - Alt+Control+F# (не ради ли единообразия в OpenBSD она же используется
для навигации по виртуальным консолям вообще?).
Забегая вперед, отметим, что использующая графику программа, запущенная
из консоли с поддержкой графического режима через frame buffer (кучеряво
получилось, впредь для этого попробую использовать термин фрейм-консоль),
занимает только консоль текущую. Правда, программ таких (пока?) очень мало...
Уравнение в правах консоли и терминалов привело к тому, что ныне термины
(виртуальная) консоль и (виртуальный) терминал часто выступают в качестве
синонимов. И это, товарищи, почти правильно - хотя только для настольных
персоналок. И то, следует помнить, что если терминал на PC - всегда виртуален,
то консоль имеет и физическое вполощение - монитор и клавиатуру, физически
прикрученные к данному системному блоку. Можно сказать, что файл устройства
консоли (/dev/console) выступает в качестве реинкарнации активного в данный
момент виртуального терминала.
Кроме того, слово терминал служит для обозначения программ эмуляции текстовой
консоли с ее командной оболочкой (а в следующем разделе будет показано, что
консоль в большинстве случаев тесно сопряжена с шеллом) в графическом режиме
оконной системы X. Однако такие программы правильнее так и называть - эмуляторами
терминала (или терминальными окнами). И вообще, к Linux-консоли они отношения
не имеют, да и к Linux'у вообще - лишь косвенное, так как являют собой обычное
Иксовое приложение. Речи о них в этих заметках не будет.
В заключение - несколько номенклатурных замечаний. Как известно, все, что
существует в Unix-системе статически - суть файлы, в том числе физические
или виртуальные устройства. И консоли тут - не исключение, каждой из них
соответствует свой файл в каталоге /dev. Выше упоминалось, что физической
консоли соответствует файл /dev/console, имеющий идентификатор группы устройств,
так называемый старший (major) номер устройства, равный 5, и идентификатор
конкретного устройства, младший (minor) номер, равный 1.
Виртуальные консоли в Linux'е ранее ставились в соответствие файлам вида
/dev/tty??, где ?? соответствовал порядковому номеру устройства и мог изменяться
в пределах от 0 до 63 (почему - будет подробно рассказано в следующей заметке),
хотя в реальности их могло быть меньше. Старший номер всех их был равен 4,
младший - был идентичен номеру устройства.
В большинстве современных Linux-дистрибутивов используется так называемая
файловая система устройств (devfs), вносящая существенные коррективы в номенклатуру
последних. Согласно ей, файлы устройств виртуальных консолей сгруппированы
в каталоге /dev/vc/ (в некоторых системах имя каталога, в который монтируется
devfs, может быть иным). И именуются они просто своими номерами - /dev/vc/1,
dev/vc/2 и так далее, каковые и выступаю заодно в качестве младших номеров
устройств (старший номер остается прежним - 4).
Во всех известных мне дистрибутивах, задействующих devfs, используется также
демон devfsd, обеспечивающий обратную совместимость с файлами устройств в
старой номенклатуре (собственно, дело не только в поддержке старой номенклатуры,
но это выходит за рамки сегодняшней темы). И потому в каталоге /dev можно
обнаружить и файлы устройств виртуальных консолей типа /dev/tty??. Однако
это - лишь символические ссылки на файлы реальных устройств, в чем легко
убедиться командой
$ ls -l /dev/tty*
которая выведет список вида
lr-xr-xr-x 1 root root 4 Июн 8 2003 /dev/tty0 -> vc/0
lr-xr-xr-x 1 root root 4 Июн 8 2003 /dev/tty1 -> vc/1
lr-xr-xr-x 1 root root 5 Июн 8 2003 /dev/tty10 -> vc/10
lr-xr-xr-x 1 root root 5 Июн 8 2003 /dev/tty11 -> vc/11
и так далее.
Однако теоретически при использовании devfs наличие файлов устройств старого
образца отнюдь не обязательно и зависит от настроек демона devfsd в файле /etc/devfsd.conf.
А, например, в моей самостройной системе я вообще отказался от обратной совместимости,
и никаких tty?? в ней нету. От чего, к слову, никаких неудобств я не испытываю.
И во всех остальных заметках молчаливо подразумечается использование файловой
системы устройств.
Вот и все общие слова, которые я хотел сказать о консолях. В следующей
заметке разговор пойдет о том, сколько же их, консолей, бывает в Linux-системе.
содержание назад вперед