Краткое введение в терминалы и консоль

    Тут живут драконы и нет ментейнеров (вместо эпиграфа)

    Очень сжатое боевое описание «что есть псевдо-терминал» и «консоль».

    Итак, во-первых, определимся с тем, что такое консоль: консоль это программа, которая принимает от пользователя кнопки, а от соединения с компьютером — буквы на экран и спец. команды по рисованию картинки на экране.

    Терминал — обобщённое название как программы, так и специальной железки (таких больше нет в природе). Особое исключение — когда вы запускаете путти или ещё кого-то для подключения к последовательному порту коммутатора/рутера/модема (или даже сервера), то вы выступаете (точнее компьютер с путти выступает) в роли терминала (название «терминал» — потому что терминирует кабель (то есть висит на самом конце) ).

    Как легко понять по кабелю, есть два конца: терминал и то, что ему посылает байтики в кабель.

    Когда запускается шелл, то он получает в своё распоряжение виртуальное устройство /dev/tty, которое у каждого процесса своё — это «обратная» часть терминала. Передняя часть в случае кабеля реализуется путти+компьютер, в случае консоли компьютера, специализированным ядерным драйвером (виртуальными консолями). Важно: драйвер эмулирует наличие терминала.

    Существует интерфейс unix98 (/dev/ptmx), который позволяет создать парочку из «входа и выхода» для всех обратившихся программ. В этом случае одна половинка изображает из себя «обратную» половинку, а вторая — консоль. Используется, в частности, openssh'ем и x'овыми терминалками.

    В этом месте много путаницы, но правило простое: с одной стороны тот, кто рисует, с другой — тот, кто говорит, что рисовать. С той стороны, с которой рисуют, с той же находится и пользователь с клавиатурой. Его данные поступают на противоположную сторону к программе.

    В качестве самой частой программы со стороны «программы» выступает getty разных видов (mgetty, atetty и т.д.), задачей которой является выставление скорости работы канала и запуск команды login для ввода пароля.

    В качестве передней части (рисующей байтики) выступает либо виртуальная консоль линукса, либо программа-терминалка (почти любая), либо находящийся за последовательным шнурком терминал (например, другой компьютер).

    Каждое устройство по рисованию (терминал, виртуальная консоль и т.д.) имеют свой набор возможностей (поддерживаемых символов и команд). Тип терминала задаётся переменной TERM, но только в смысле, что он говорит программам, с каким терминалом они работают. Невозможно переменной TERM заставить терминал эмулировать другие терминалы — он про эту переменную ничего не знает.

    Внезапное применение: KVM, XEN (и, я не уверен, но, кажется, OpenVZ) используют этот механизм для доступа к консоли виртуальных машин: в виртуальной машине создаётся специализированное устройство, взаимодействующее с демоном в dom0. С точки зрения domU — у него есть последовательное устройство для терминала. Чтобы на этом устройстве увидеть строчку login, нужно прописать в inittab строчку с вызовом getty и разрешить логин (/etc/securetty).

    В dom0 демон видит последовательное устройство от domU, создаёт соответствующий псевдотерминал с помощью /dev/ptmx). Созданные устройства для подключения терминалов появляются в /dev/pts/*. Помимо этого consoled пишет в xenstore кому какой домен соответствует, специализированные терминалки (xenconsole) умеют это читать и выполнять. Когда даётся команда xl console (xm console), то она всего лишь вызывает xenconsole с заданным параметром.

    Вместо xenconsoled можно использовать любую другую терминалку — хоть minicom, хоть cu, хоть socat, хоть putty. После подключения к консоли правильным является задать тип используемой консоли (set TERM=linux или set TERM=xterm, установка в vt100 даст чёрно-белый экран).

    Ровно так же можно организовать подключение к машине по модему (если кто их ещё помнит) — модемы просто «удлиняют» последовательный порт на N километров. С одной стороны нужно настроить модем на автоответ и повесить mgetty (и не забыть про /etc/securetty), с другой стороны нужно набрать номер и получить обычное сообщение login.

    Это было очень сжатое и которое описание псевдотерминалов. Полное почти невозможно, ибо для полного понимания как это работает нужно начинать с телетайпов и устройства механических печатных машинок.

    Основным моментом, который нужно осознать, является то, что в tty всегда есть два участника, один из которых умеет рисовать (сам, или выбрасывая содержимое на экран так, чтобы терминалка пользователя это нарисовала), а другой — даёт команды что рисовать и принимает последовательности нажатия кнопок.

    Основной материал для чтения: tldp.org/HOWTO/Text-Terminal-HOWTO.html
    Share post

    Similar posts

    Comments 101

      0
      При переводе материала ни один гуглтранслейт не пострадал.
        +2
        Где вы тут перевод видите? Это мною написанный текст. Если бы я переводил text-console-howto, то получилось бы этак килобайт на 300.

        А что «не совсем понятно» — так потому это «краткое и боевое». Объяснение каждого нюанса даст те самые 300 кб.
          +21
          Тогда извините. Но прочитать не получилось. Напомнило мне мои краткие и боевые конспекты лекций в университете :)
            +2
            Просто довольно сумбурно получилось. Т.к. вы в этой теме разобрались, то вам тут всё сразу понятно, а вот остальным читается с трудом.
              0
              Если что, вот перевод руководства на русский.
              0
              Просто нарисуйте картинку. Я 2 раза читал в попытке разобраться что к чему. Так ничего и не понял. Вроде, не тупой.
              0
              Давно хотел спросить — как настроить putty, чтобы нажатием клавиш Alt-F1 и т.д. можно было бы между экранами (консолями) переключаться?

                0
                Какой режим эмуляции бы не выбирал, под FreeBSD не работает.
                  0
                  Никак. По сути «Alt-F1» это фича большой толстой персоналки под названием
                    +1
                    (пардон, отправилось)
                    Linux Virtual Console. Она изображает на одной клавиатуре 6 (или сколько скажут) терминалок, которые коннектятся к соответствующим tty и init на них login запускает.

                    Ближайшим аналогом будет screen.
                      0
                      Маловероятно чтобы название содержало слово «Linux», т.к. я пользовался Alt-Fx задолго до появления понятия Linux :)
                        0
                        >пользовался Alt-Fx задолго до появления понятия Linux :)

                        где?
                          0
                          FreeBSD
                            0
                            Наверно неправильно выразился, не задолго до понятия, а задолго до появления.
                              +1
                              в рифму, но неправда — когда в линуксе уже были виртуальные терминалы (1991), а были они там с самого начала, если верить «Just for fun», фря еще не существовала даже в виде свалки патчей к 386BSD (1993).

                              я не уверен, были ли виртуальные терминалы в 386BSD и переключались ли они по Alt-FX, но подозреваю, что нет, а машины с x86 для проверки под рукой нет.
                                +1
                                В 1991 линус только был в разработке, более-менее рабочая версия вышла в 1994 году, а FreeBSD это набор патчей для 386бсд, и практически в первой же версии уже был рабочим, и как раз где-то 1993, начало 1994 я им и пользовался.
                                  +1
                                  простите, но в 1994 уже вышла версия ядра linux 1.0, а вы бросаетесь громкими заявлениями.
                                    +1
                                    FreeBSD 1.0 была в 1993, и сразу после выхода применялась в работе (провайдер в Казахстане, еще uupc). Линус публично был выпущен в 1994том. Конечно есть вероятность что разработчики Фри/БСД подглядели в свеженаписаном коде Линуса новинку, но мне кажется это маловероятным.
                                      +1
                                      A virtual console (VC) – also known as a virtual terminal (VT) – is a conceptual combination of the keyboard and display for a computer user interface. It is a feature of some operating systems such as UnixWare, Linux, and BSD, in which the system console of the computer can be used to switch between multiple virtual consoles to access unrelated user interfaces. Virtual consoles date back at least to Xenix in the 1980s.
                        0
                        А зачем именно по Alt+F1? Screen не поможет?
                        Мне лично сильно помогает «putty c виндовой машины» to «screen на linux сервере»
                        +3
                        Статья напомнила про картинку, которая недавно проскакивала в комментариях.
                          +2
                          За картинку спасибо, да, рассмешило. Особенно после только что прочитанного объяснения, что это за LE-bell, который за восемь символов до конца строки звонит.
                          +30
                          Плохая, негодная лекция. Все ваши студенты уснули.
                            +2
                            Бессовестно перестал читать на шестом абзаце :(

                            Видимо надо остаться на своей Ubuntu и не читать статей «Linux для всех».

                            Ида, заголовок «Краткое введение в терминалы и консоль» определённо радует, спасибо.
                              +3
                              Для всех, означает, в том числе, и тех, кто с линуксом возится в серверном применении.
                              • UFO just landed and posted this here
                              –2
                              Очень смутило неоднократное упоминание в статье putty. Нет, я конечно знаю, что putty есть и под Linux, только пользователи Linux почти им не пользуются. Хотя по профилю автора и не скажешь, но статья явно попахивает авторством виндузятника, а блог то «Linux для всех».
                              Не холивара ради, чисто моё IMHO.
                                0
                                Ну, мой опыт наблюдения показывал, что большинство людей использует для подключения по последовательному порту именно putty. Вероятнее всего, это связано с тем, что putty среди мейнстримовых терминалок, единственная, без строгих ассоциаций с модемом. Тот же minicom нужно особо принуждать, чтобы он стал работать с нормальным последовательным портом, да и то, не со всяким будет… То же касается и cu, и даже в некотором смысле picocom.

                                А putty изначально делалась без прицела на модемы, так что никаких дурацких инит-скриптов и безуспешных попыток подёргать dtr она не делает.
                                  0
                                  Вы забыли упомянуть главное — putty GUI-евое приложение.
                                  А «консоль» и «терминал», все же, командная строка.
                                    +1
                                    поправьте если ошибаюсь но putty это просто win приложение для консоли *nix систем (аля фрибсд или линукс) и кроме командной строки там ничего нету
                                      +1
                                      При чём тут винды? Путти есть ровно так же и под другие ОС, где с успехом для некоторых задач и используется. Хороша тем, что имеет самостоятельный рендерер, не завязанный на tty/console.
                                        0
                                        простите, а зачем мне под линукс например путти, если в самом линуксе есть и ssh и telnet клиенты
                                          +1
                                          Потому что в какой-то момент вы столкнётесь с необходимостью работать по последовательному порту. И либо вы будете шаманить с терминалками отучая их от модемных замашек, либо запустите путти. Оба пути будут успешными.
                                            –1
                                            Вы переоценили вашу аудиторию.

                                            96,451% присутствующих под «putty» понимают вредоносно поименованный виндозный SSH клиент (http://www.chiark.greenend.org.uk/~sgtatham/putty/), а не юниксовый обработчик терминальных соединений.
                                              +3


                                              Эмм?
                                        +2
                                        Ошибаетесь. Не только для *nix. Для любого соединения по протоколам SSH/Telnet/Rlogin/RAW, а потом еще и Serial.
                                        Последнее появилось только в версии 0.59
                                        PuTTY can now connect to local serial ports as well as making network connections.
                                        пруфлинк — goo.gl/juwM
                                        –1
                                        Вы ошибаетесь. «Консоль» и «терминал» не имеют никакого отношения к командной строке. По-крайней мере, не большее, чем «монитор» и «клавиатура».

                                        Собственно, запустите aptitude без опций и найдите в нём командную строку. Если сильно поискать, да, есть. Но далеко не в штатном режиме, правда? А ведь вполне себе консольное приложение, работающее на текстовом терминале.
                                          +2
                                          Перефразирую, это TUI — но суть не поменялась. то есть, текстовый режим.
                                            +2
                                            Вы просто хотите назвать текстовый режим командной строкой. Нет, это не одно и то же. Текстовый режим — это использование алфавита (в компьютерном смысле «алфавит») для показа изображения. А интерфейс командной строки — это форма взаимодействия — интерфейса. Альтернативные ей — диалоговая, объектная формы и т.д. Вполне можно представить себе интерфейс командной строки с акустическим вводом и акустическим же выводом.

                                            Интерфейс командной строки может быть реализован через текстовый режим (хотя у меня сейчас штук 10 консолей открыто — ни в одной текстового режима нет, сплошные X'ы), но это не значит, что текстовый режим = интерфейс командной строки.

                                            Ровно так же мы можем говорить «раз чёрный экран с буковками, значит DOS».
                                              +2
                                              Если у Вас запущен xterm, это не значит, что сообщения в нем передаются графикой.
                                              из wiki — Эта категория используется для перечисления списка приложений, использующих низкоуровневый текстовый режим напрямую или посредством программного интерфейса, его реализующего.

                                              Так вот, в Вашем случае, консольная программа в X-ах и есть «программный интерфейс», а то что в ней — это текстовый режим.
                                                +2
                                                Короче, вы сейчас меня пытаетесь убедить, что gnome-terminal — текстовое приложение. Глупо, правда? Я-то знаю, что оно графическое, и только эмулирует xterm, который, в свою очередь, кое-как эмулирует linux, который в свою очередь есть суперсет от vt100, который в свою очередь надмножество (не знаю чего), который в свою очередь эмулирует телетайпы, который в свою очередь эмулирует печатную машинку, которая никого не эмулирует.

                                                Но это не меняет того, что для вывода изображения она использует X, а не растеризатор видеокарты.
                                                  +3
                                                  Я ни в чем никого не пытаюсь убедить, тем более в том, о чем вы написали — читайте внимательно о чем писал я.

                                                  Речь не о выводе видеокарты и т.д.
                                                  А О ТОМ, что хоть приложение и GUI-евое, оно эмулирует работу в ТЕКСТОВОМ режиме.

                                                  Вы очень не внимательный собеседник.
                                                  +2
                                                  Если у Вас запущен xterm, это не значит, что сообщения в нем передаются графикой.

                                                  xterm — это эмулятор терминала. А терминалы раньше бывали и графические. И xterm такие терминалы тоже умеет эмулировать. В качестве пруфлинка скриншот с ЛОРа.
                                            0
                                            путти — ГУЁВЫЙ терминальный клиент. в процессе взаимодействия пользователя с сервером, сервис(sshd) открывает псевдотерминал tty и эмулирует терминал на сокете(блабла с шифрованием пропустим). путти для удобства пользователя принимает правила протокола, и автоматизирует обработку некоторых фишек, таких как эмуляция нажатий спец. клавиш, комбинаций клавиш, обработка последовательностей спец.симоволов.
                                            +3
                                            И еще, putty, изначально, вообще не умело работать с последовательным портом. По сему, у Вас совсем не большой «опыт наблюдения».
                                            Если не изменяет память, работа с последовательным портом появилась только в ветке 0.5+
                                              –2
                                              Не умело. И? Я помню и старые версии путти с кривоватым юникодом. Но мы же не пытаемся реанимировать SLS, а говорим про современность?
                                                +2
                                                Согласен, все течет, все меняется, и надо быть современным, только в некоторых аспектах это не хляет.
                                                Например, putty vs minicom/openssh-client, или nano vs vim.
                                                А уж если речь идет про «консоль» и «терминал», в блоге «Linux для всех» (повторяюсь), то как-то не очень корректно.
                                              0
                                              я пользуюсь picocom, работает всегда без каких-либо проблем
                                              0
                                              Ваш комментарий явно попахивает авторством фанатика.

                                              Множество отличных администраторов серверов linux используют на десктопе виндовс. И это — нормально.
                                                0
                                                А Вы внимательно прочитали о чём речь? Думаю что нет.
                                                Не торопитесь отвечать, не прочитав всю ветку.
                                              +3
                                              стиль изложения как минимум халатный.

                                              >>> консоль это программа, которая принимает от пользователя кнопки,
                                              возникло ощущение что консоль — это бабка в ларьке, которая принимает стеклотару

                                              >>> а от соединения с компьютером — буквы на экран и спец. команды по рисованию картинки на экране.
                                              а от соединения с компьютером бывают дети
                                                0
                                                Я специально топтался вокруг этого невидимого в большинстве случаев линка между мастером и слейвом в pts. Он есть, он важен, но в большинстве случаев он не имеет физического воплощения (а в случае с виртуальной консолью, даже явно выраженного программного). Как я его должен был назвать?
                                                +3
                                                ох, я честно плохо понимаю Ваш стиль изложения ) Вы видимо хотели таким особым забавным стилем быстро и просто изложить техническую концепцию. Но для меня, честно, тяжело читается. Может я зануда.
                                                  0

                                                  Как тяжело в России по утрам…
                                                    +2
                                                    Терминал — обобщённое название как программы, так и специальной железки (таких больше нет в природе).

                                                    Мне кажется, тут существует некоторая путаница в определениях.

                                                    Терминал — оконечное устройство, через которое пользователь взаимодействует с основной (в т.ч. и удаленной) вычислительной системой.

                                                    Монитор + клавиатура или даже KVM + монитор + клавиатура, складывающийся в 1U — пассивные локальные терминалы.
                                                    Гугло-ноут — активный удаленный терминал.
                                                    «Терминал» как программа — эмулятор терминала и его железа.

                                                    Действительно умерли с приходом ПК — именно пассивные терминалы для удаленного доступа, железяки по типу VT-100 (типа, добавь модем и лезь в чужой мэйнфрейм).
                                                    На их место пришли программные эмуляторы пассивных терминалов и, с учетом облачных и SaaS-тенденций, современные активные терминалы — тонкие клиенты, нетбуки, планшеты, тысячи их.
                                                      0
                                                      Здрасьте, почему это они были пассивными? Там вполне был свой биос, свои настройки, своя память и даже автономная работа с принтером.

                                                      Просто ТЕПЕРЬ терминалами называют другие железки, которые делают архитектурно то же, что те старые. Но это просто переосмысление термина (как деревня не связана с деревом). Бесполезно пытаться притянуть сюда новое железо, я говорю именно о терминалах, которые прямая эволюция телетайпов. Если начинать растягивать смысл на всякие терминальные серверы и прочие современности, то нам придётся выдумать новое слово, которым нужно называть старые вещи, которые в то время назывались терминалами. Нафига?
                                                        +1
                                                        Согласен, жонглировать терминами можно бесконечно, тем более, если (как принято у нас в бывш. СССР) переводить технические термины дословно и искать в них массу скрытого смысла, а потом совмещать старые термины с новоязом и плодить монстров.

                                                        А я просто взял определение из энциклопедии кибернетики 74 года :)
                                                        Терминал, абонентский пульт, оконечное устройство — устройство оперативного ввода и вывода информации, используемое при взаимодействии человека с вычислительной машиной или вычислительной системой (часто удаленных от пользователя).

                                                        Терминалы разделяют на пассивные (без переработки информации) и активные (имеющие собственные вычисл. машины, входящие в состав вычислительных систем).


                                                        Если мыслить архитектурно, то контроллеры в клавиатуре и мониторе не делают их существенной частью распределенной вычислительной системы. У них другая задача.
                                                        То же и со старыми терминалами — они тупо послылали текст, принимали текст, печатали текст и обрабатывали эскейп-последовательности в тексте. По сравнению с мэйнфреймом, к которому они коннектились, они были ничтожны и взаимодействовали с ним на максимально низком уровне. Поэтому я причислил старые аппаратные терминалы к пассивным.

                                                        Для сравнения, тот же тонкий клиент против облака — разница только количественная, а не качественная, взаимодействие на высоком уровне и по спектру возможностей они равны (игровые консоли, например, все ближе и ближе к терминалам, а кластеры из кучи PS3 давали отличные практические результаты ). Поэтому это — активный терминал.
                                                      +2
                                                      Я думал, это для меня.
                                                      Я знаю что такое консоль.
                                                      Прикидываю что-такое терминал.
                                                      «Пора мне познать про терминал и прочие бла», подумал я.
                                                      Но что написано сверху? OMG! Это либо в юмор, либо в психушку.
                                                      Я не смог дочитать.
                                                      Да, я знаю, что сейчас 4 утра на часах (чуть покодил), но это не отменяет моей объективности.
                                                      Вот так думают настоящие программисты? Через пару лет я буду писать так-же?
                                                      Избавьте )
                                                        +2
                                                        > консоль это программа

                                                        Не в обиду, камрад.
                                                        Но может новичкам сразу давать правильные понятия, хотя бы кратко?
                                                        А то вот так и плодятся граждане, нахватавшиеся «верхов». Переучиваться намного сложнее, чем сразу учиться правильно.
                                                          –2
                                                          Ко всему вышесказанному бреду:
                                                          > так и специальной железки (таких больше нет в природе).

                                                          Автор, сначала разберись в теме а потом пиши статьи с претензией на полезность.
                                                          А лучше больше никогда ничего не пиши — в интернетах и без тебя хватает идиотов.
                                                            0
                                                            А на хабре хватает нетерпимости.
                                                              0
                                                              Это амарао-то идиот? Сходи почитай его статьи, надеюсь тебе захочется извиниться за фразу: «А лучше больше никогда ничего не пиши».
                                                                –2
                                                                Первым делом сделал именно это. огромное количество глупых высеров.
                                                                  +3
                                                                  Спасибо за конструктивную критику. Я изучил ваши посты и попробую им соответствовать. Главное — никаких технических подробностей. Что-то простенькое, в стиле DIY/unpacking.
                                                              0
                                                              Оффтопик немножко, но может кто знает. В каком-то старом голливудском фильме есть сцена, где сотрудники банков делают межбанковские проводки через какие-то терминалы (телетайпы?) Они печатают какие-то команды вперемешку с текстом так, что ещё успевают во время работы немного пошутить через такой чат с сотрудниками другого банка. Не знаете, это фантазия режиссёра или действительно через терминалы денежные переводы делались?
                                                                0
                                                                Терминалы к мейнфрейму с поддержкой write? Почему бы и нет?
                                                                +2
                                                                путано и все в кучу — сразу и зен и модены и VT. похоже на дамп мозга во время поиска информации.

                                                                >Когда запускается шелл, то он получает в своё распоряжение виртуальное устройство /dev/tty, которое у каждого процесса своё — это «обратная» часть терминала.

                                                                почему виртаульное? большинство драйверов tty — как раз настоящие. или это все именно про виртуальные терминалы линукса, а конкретно /dev/tty (без номера) вообще непомню что делает, наверное текущий активный VT.

                                                                почему «у каждого свое?», может на каждой виртуальной консоли свое?
                                                                  +1
                                                                  Простите, но консоль — ни разу не программа. Консоль = экран + клавиатура. Всё. Ни больше, ни меньше.
                                                                    +1
                                                                    А виртуальная консоль? А обработка Shift-PgUp?
                                                                      –1
                                                                      Ну так она же на то и виртуальная.
                                                                        +1
                                                                        Так вот эта самая виртуальная консоль — она программа или нет? И она консоль при этом?
                                                                          –1
                                                                          Виртуальная консоль — в первую очередь средство мультиплексирования доступа к консоли реальной. А реализуется уже виртуальная консоль, например, посредством программы, называющейся эмулятором терминала.
                                                                            +1
                                                                            Виртуальная консоль — программа? Программа. Нет, она не называется «эмулятор терминала», поскольку эмулятор терминала обеспечивает декодирование управляющих последовательностей, а не переключение виртуальных экранов. Консоль в линуксе не совсем самостоятельная программа, это часть ядра. Но это именно программный код, а не комбинация из клавиатуры и видеокарты.
                                                                              –1
                                                                              Поправка: виртуальная консоль в линуксах. Не реальная. Слово «виртуальная» опускать нельзя, именно оно подчёркивает мультиплексность. Настоящая же консоль — по-прежнему клавиатура и дисплей (не видеокарта!).
                                                                                +1
                                                                                А если дисплей — это порт IMPI-KVM'а? Да ещё встроенного в мамку, то есть с моей точки зрения консоль — это вообще java-приложение, запускающееся из браузера.

                                                                                Собственно, вернусь к тезису: в линуксе «под» эмулятором терминала находится ещё один слой кода, реализующий виртуальную консоль. Он там есть, там не сразу дрова-железо начинаются.
                                                                      +1
                                                                      еще скажите, что биос — это не программа.
                                                                        +1
                                                                        Неуместное сравнение. BIOS — вполне себе программа. А вот консолью называется исключительно устройство ввода вывода, состоящее обычно из дисплея с клавиатурой (хотя возможны модификации, например, вместо дисплея может быть принтер, либо могут добавляться другие устройства).
                                                                          0
                                                                          Консолью так же называют программу, эмулирующую поведение консоли посредством иных средств.
                                                                            +1
                                                                            Нет. Такую программу называют эмулятором терминала.
                                                                              +1
                                                                              Эмулятор терминала — программа, эмулирующее поведение специфичного терминала (то есть определяющая реакцию на esc последовательности). Эта программа использует нижележащие слои (другой терминал, или _консоль_) для реализации функционала терминала.

                                                                              Консоль — это код, который обеспечивает работу эмулятора терминала, она находится ниже.

                                                                              Собственно, что спорить:

                                                                              linux/linux-2.6.32$ find -name "console*" 
                                                                              ./kernel/power/console.c
                                                                              ./include/xen/interface/io/console.h
                                                                              ./include/linux/consolemap.h
                                                                              ./include/linux/console_struct.h
                                                                              ./include/linux/console.h
                                                                              ./arch/mips/dec/prom/console.c
                                                                              ./arch/mips/cobalt/console.c
                                                                              ./arch/alpha/kernel/console.c
                                                                              ./arch/alpha/include/asm/console.h
                                                                              ./arch/m68k/sun3/prom/console.c
                                                                              ./arch/sparc/prom/console_64.c
                                                                              ./arch/sparc/prom/console_32.c
                                                                              ./arch/xtensa/platforms/iss/console.c
                                                                              ./drivers/video/console
                                                                              ./drivers/char/consolemap.c
                                                                              ./drivers/usb/serial/console.c
                                                                              ./Documentation/console
                                                                              ./Documentation/console/console.txt
                                                                              

                                                                                +2
                                                                                Ещё раз, это не консоль. Консоль — физическое устройство, а не программа. Кстати, на эту тему хорошо написано в Википедии:
                                                                                'The system console, root console or simply console is the text entry and display device for system administration messages, particularly those from the BIOS or boot loader, the kernel, from the init system and from the system logger. It is a physical device consisting of a keyboard and a screen.'
                                                                                  +1
                                                                                  Мы сейчас завязнем в понимании того, что такое физическое устройство.

                                                                                  С моей точки зрения физические устройства вообще вне рассмотрения (может, я к этой консоли через IMPI с ипада подключился? Где у меня тут «физические» устройства?), а консоль, это то, что предоставляет стандартизированный интерфейс (вне зависимости текстовый это режим, или framebuffer) для эмулятора терминала. Код консоли берёт всю массу underlaying hardware и делает из неё унифицированное API для вышележащих слоёв.

                                                                                  Вот про что я говорил, и вот почему я показывал файлы исходного кода из ядра.

                                                                                  Если вы считаете, что это не консоль, объясняйте, откуда тогда в коде линукса слова console.
                                                                                    0
                                                                                    Нет уж, послушайте, как раз только физические устройства рассматривать здесь и можно, ведь именно таковой является по определению. И ссылка на исходники неадекватна, ибо там речь идёт о console drivers, то есть драйверов, работающих с консолью и виртуализирующих (мультиплексирующих) доступ к ней. Не бывает виртуальных консолей, это абстракция, существующая только для того, чтобы иметь более одного «контекста ввода», что ли. Точно также, как и виртуальные рабочие столы и так далее. Консоль всё равно одна и состоит из всё тех же дисплея и клавиатуры (если хотите, можете ещё и мышь сюда приплести).
                                                                                      0
                                                                                      Ну, собственно, я ровно про это и сказал. В линуксе есть слой кода, который реализует консоли из одной. Вы это называете «мультиплексированием» и говорите, что их не существует.

                                                                                      Я вполне согласен считать их программной абстракцией и говорю, что есть код, который её рализует.

                                                                                      В чём расхождение-то? В том, что вы отказываетесь признавать код виртуальных консолей линукса консолями?
                                                                                        0
                                                                                        Слушайте, Вы что, избирательно читаете то, что я Вам пишу? Консоль по определению бывает только физическая. Виртуальные консоли консолями не являются и являться не могут.
                                                                                          0
                                                                                          ок, я утверждаю, что виртуальная консоль — ровно такая же консоль как и все остальные. Вы утвержаете, что виртуальная консоль, это не консоль. Видимо, виртуальность её сильно попортила…
                                                                                            0
                                                                                            Скажите, драйвер модема — это модем? Или же это только лишь его драйвер?
                                                                                              0
                                                                                              Драйвер модема — не модем. А вот эмулятор модема посредством чего бы то ни было — вполне себе модем. Если кто-то зачем-то напишет «виртуальный модем», то он будет модемом.

                                                                                              Ровно так же у меня в хозяйстве некоторое количество виртуальных серверов, виртуальных коммутаторов. Все они — лишь абстракции и программный код, но это совершенно не мешает им быть серверами и коммутаторами.
                                                                                                0
                                                                                                Вот Вы же сами подтвердили, что фактически виртуальная консоль не может считаться консолью. Вдумайтесь. Основная «фишка» консоли — это то, что пользователю, грубо говоря, есть что нажать и есть откуда почитать. Виртуальные консоли Linux являются всего лишь «прослойкой» (собственно, ничем более они не могут являться, ибо это интерфейс драйвера консоли).
                                                                                                  0
                                                                                                  К существованию виртуальных серверов и виртуальных коммутаторов претензий нет?

                                                                                                  (это я так плавно подвожу к мысли, что виртуальное — не обязательно «несуществующее»).
                                                                                              0
                                                                                              И да, консоль — в первую очередь то, что находится «по эту сторону», а не по ту, поэтому виртуальность её именно что сильно испортила.
                                                                        +3
                                                                        amarao-san, почему бы не добавить изначально к статье картинку, сделанную в каком-нибудь mindmap-редакторе? Видно, что вы хотели «чтобы было понятно»

                                                                        Лично я на данный момент сильно интересуюсь всем, что связано с «Linux изнутри». Честно прочитал всю статью, прочитывая предложения иногда по 3 раза — но не понял все равно. Очень большой сумбур с определением терминов.

                                                                        На данный момент я пишу статью в тот же блог, и хочу сказать вот что: я уже вступление более 5 раз переписывал. Перечитываю то что написал постоянно, исправляю то или иное слово, правлю или полностью заменяю предложение, иногда переписываю весь абзац или местами его меняю. Все ради двух целей — 1) как можно сильнее сжать информацию (меньше «воды») и 2) сделать ее структурированной и понятной с первого раза даже непрофессионалам
                                                                          0
                                                                          Краткое введеньице в терминалки и консольку.
                                                                            0
                                                                            Есть задача автоматически отслеживать состояние экрана в терминале в интерактивном режиме. Может он как-то по другому называется?! Это тот режим который использует специальные последовательности для вывода символов с позиционированием в нужную часть экрана (библиотека ncurses). Он же позволяет строить «окна». Этим кто-нибудь занимался?
                                                                            Есть два варианта:
                                                                            1. Использовать скрипты к программе-терминалу. Есть такие?
                                                                            2. Добавить свою функциональность в программу-терминал. Есть кто программировал программы терминалы? Как вариант расшарить экран для других программ-обработчиков (межпроцессное взаимодействие). В какой это легче сделать?
                                                                              +1
                                                                              Я программировал. В самом тупом виде это выглядит как
                                                                              a=file(«q»,'rb+')
                                                                              while true:
                                                                              a.write(«something»);
                                                                              print a.read();

                                                                              Я утрирую, но оно примерно так и выглядит.

                                                                              Вас, вероятнее всего, интересует возможность «получить» вывод программы. Это делается созданием своего псевдотерминала.

                                                                              Вообще, для вашей задачи — однозначно читать целиком ссылку из поста.
                                                                                0
                                                                                Второй вариант другими словами можно озвучить так: интересует предоставить доступ к экрану терминала (чтение) другим программам для обработки.
                                                                                По терминалам некоторое представление имею, но здесь вопрос более к программированию. И в данном случае (чтобы не изобретать велосипед) можно воспользоваться уже имеющимися наработками: putty, rxvt,… т.е. теми терминальными программами, которые имеют свободные лицензии.
                                                                              0
                                                                              Локальный случай

                                                                              Удалённый случай
                                                                                0
                                                                                Блин, случайно отправилось. Набросал для себя диаграммки, сверху «локальный» случай, снизу «удалённый». Раньше с темой терминалов никак не разбирался, нарисовал, как понимаю (наверное неправильно). Поправьте меня, если ещё осталось время/желание объяснять эту тему.
                                                                                  0
                                                                                  Если честно, совсем неправильно. шелл находится с «обратной» стороны tty. Грубо: клавиатура — консоль — эмулятор терминала, устройство терминала с одной стороны, устройство терминала с другой стороны, шелл.
                                                                                    0
                                                                                    Не очень понял. У нас в удалённом случае участвуют и консоль, и эмулятор терминала? Чем тогда они отличаются друг от друга и каковы их функции? В локальном случае они тоже участвуют в паре? Где тогда консоль, когда я, скажем, открываю gnome-terminal или xterm, в котором запускается самый что ни на есть обычный bash? Вот пока новая версия: локальный случай, удалённый случай. Извините за задержку.
                                                                                  +1
                                                                                  писатель, оттачивай стиль. читать такое очень сложно.

                                                                                  Only users with full accounts can post comments. Log in, please.