Не плутати з операційною системою LinuxConsole.[1]
Консоль Linux — це внутрішня системна консольядра Linux (системна консоль — це пристрій, який отримує всі повідомлення ядра і дозволяє входити в систему в режимі одного користувача). [2] Консоль Linux забезпечує можливість для ядра та інших процесів отримувати дані від користувача та надсилати текстову відповідь. Користувач зазвичай вводить текст за допомогою клавіатури комп'ютера і читає вихідний текст на моніторі комп'ютера . Ядро Linux підтримує віртуальні консолі – консолі, які логічно відокремлені, але мають доступ до однієї фізичної клавіатури та дисплея. [3] Консоль Linux (і віртуальні консолі Linux) реалізовані підсистемою VT ядра Linux і не покладаються на жодне програмне забезпечення з простору користувача.[4]
Консоль Linux була однією з перших функцій ядра. Вона була написана Лінусом Торвальдсом у 1991 році [5] (див. історію Linux ). Є дві основні реалізації: кадровий буфер і текстовий режим . Реалізація кадрового буфера є типовою в сучасних дистрибутивах Linux і разом із налаштуванням режиму ядра забезпечує підтримку апаратного забезпечення відображення та функцій, таких як відображення графіки під час завантаження системи, на рівні ядра. [6] Застаріла реалізація текстового режиму використовувалася в ПК-сумісних системах з відеокартами CGA, EGA, MDA і VGA. Архітектури, що не належать до x86, використовували режим кадрового буфера, оскільки їхні відеокарти не могли реалізувати текстовий режим. [6] Консоль використовує растрові зображення та Monospace шрифти фіксованого розміру, за замовчуванням це 8x16 пікселів на символ. [6]
Консоль Linux є додатковою функцією ядра, і більшість вбудованих систем Linux її не вмикають. Ці системи зазвичай забезпечують альтернативний користувальницький інтерфейс (наприклад, веборієнтований) або завантажуються в графічний інтерфейс користувача і використовують його, як основний засіб взаємодії з користувачем. Інші реалізації консолі Linux включають консоль Брайля для підтримки оновлюваних дисплеїв Брайля[7] і консоль послідовного порту.[8]
Мета
Консоль Linux забезпечує спосіб для ядра та інших процесів виводити текстові повідомлення користувачеві та отримувати текстові дані від користувача. У Linux системною консоллю можна використовувати кілька пристроїв: віртуальний термінал, [9] послідовний порт, [10] послідовний порт USB, [11] VGA в текстовому режимі, [12] кадровий буфер. [13] Деякі сучасні системи на базі Linux заборонили введення та виведення текстового режиму на основі ядра, і замість цього показують графічний логотип або індикатор виконання під час завантаження системи, після чого запускають графічний інтерфейс користувача (наприклад, сервер X.Org на настільні дистрибутиви та SurfaceFlinger на Android).
Під час завантаження ядра консоль зазвичай використовується для відображення журналу логів ядра. Журнал логів містить інформацію про виявлене обладнання та стан процесу завантаження. На даний момент, ядро є єдиним запущеним програмним забезпеченням, і, отже, ведення журналу через простір користувача (наприклад, syslog ) неможливе, тому консоль забезпечує зручне місце для виведення цієї інформації. Після того, як ядро завершило завантаження, воно запускає процес ініціалізації (також надсилаючи вихідні дані на консоль), який обробляє завантаження решти системи, включаючи запуск будь-яких фонових демонів .
Після завершення процесу початкового завантаження, консоль використовуватиметься для мультиплексування кількох віртуальних терміналів (доступних, натиснувши Ctrl-Alt-F1, Ctrl-Alt-F2 тощо, Ctrl-Alt-LeftArrow, Ctrl-Alt-RightArrow або за допомогою chvt[14] ). На кожному віртуальному терміналі запускається процес Getty, який, у свою чергу, запускає /bin/login для автентифікації користувача. Після автентифікації буде запущена командна оболонка. Віртуальні термінали, як і консоль, підтримуються на рівні ядра Linux. [15]
Віртуальні консолі
Віртуальні консолі дозволяють зберігати декілька текстових буферів, дозволяючи різним консольним програмам працювати одночасно, але взаємодіяти з користувачем у різних контекстах. З точки зору користувача, це створює ілюзію кількох незалежних консолей.
Кожна віртуальна консоль може мати власний набір символів і розкладку клавіатури. У Linux 2.6 з’явилася можливість завантажувати інший шрифт для кожної віртуальної консолі (версії ядра, попередні до 2.6, змінюють шрифт лише на вимогу).
Консоль текстового режиму
Реалізація текстового режиму використовується в системах на базі ПК із застарілою відеокартою CGA/EGA/MDA/VGA, яка реалізує текстові режими відео. У текстовому режимі ядро надсилає на відеокарту двовимірний масив символів, а відеокарта перетворює символи в пікселі для відображення.
Шрифт, набір символів та розкладка клавіатури
Текстовий буфер є частиною пам'яті VGA, яка описує вміст текстового екрана в термінах кодових точок і атрибутів символів. Кодові точки в текстовому буфері та шрифті, як правило, не те саме, що кодування, яке використовується в семантиці текстового терміналу для розміщення символів на екрані. Набір гліфів на екрані визначається поточним шрифтом . Текстовий екран обробляється за допомогою драйверів console.c і consolemap.c. Існує утиліта для зміни шрифтів і термінальних кодувань під назвою consolechars.
Ядро Linux (keyboard.c ) майже повністю підтримує введення з клавіатури ( розкладки клавіатури ), але воно залишається дещо непослідовним, оскільки погано взаємодіє з різними наборами символів. Макети завантажуються за допомогою утиліти loadkeys
Консоль Linux може підтримувати будь-який текстовий режим у стилі VGA, але саме ядро має дуже обмежені засоби для налаштування цих режимів. SVGATextMode допомагає увімкнути більш складні текстові режими, ніж стандартні EGA та VGA. Він повністю сумісний із Console Tools, але має деякі конфлікти з dosemu, SVGAlib та віконним інтерфейсом .
Наразі немає підтримки різних режимів на різних віртуальних консолях.
Порівняння з Windows і DOS
Microsoft Windows (будь-якої версії) не має повнофункціональної підтримки консолі. Найбільш наближеною функцією, але лише для прикладного програмного забезпечення, є консоль Win32 .
Консоль фреймбуфера Linux
Фреймбуфер Linux (fbdev) — це графічний апаратно-незалежний рівень абстракції, який спочатку був реалізований, щоб дозволити ядру Linux емулювати текстову консоль на таких системах, як Apple Macintosh, які не мають відображення текстового режиму. Тепер він пропонує емуляцію текстового режиму простору ядра на будь-якій платформі. Його перевага перед SVGATextMode(на даний момент не підтримується) полягає в надійності та кращій апаратній сумісності. Це також дозволяє подолати всі технічні обмеження текстових режимів VGA .
Консоль фреймбуфера Linux відрізняється від консолі VGA лише способом виводу символів. Обробка подій клавіатури та підтримка віртуальних консолей абсолютно однакові.
Консоль послідовного порту Linux
Послідовна консоль Linux — це реалізація консолі через послідовний порт, увімкнена опцією CONFIG_SERIAL_CONSOLE у конфігурації ядра. Вона може використовуватися в деяких вбудованих системах і на серверах, де пряма взаємодія з оператором не передбачається. Послідовна консоль забезпечує такий самий режим доступу до системи, але зазвичай на меншій швидкості через малу пропускну здатність RS-232 . Послідовна консоль часто використовується під час розробки програмного забезпечення для вбудованих систем, та іноді залишається доступною через порт налагодження .
Консоль також підтримує розширені вихідні послідовності, послідовності режиму ANSI CSI і послідовності приватного режиму DEC. [17][16] Ці розширені послідовності можуть керувати кольорами, візуальними ефектами, такими як миготіння, підкреслення, інтенсивність та інверсивне відео, частота та тривалість сигналу дзвінка, інтервал гасіння екрана VESA. Крім закриття тексту, немає відомого способу перевести адаптер VGA в режим очікування.
Плани на майбутнє
Проект Kmscon має на меті створити сучасну заміну простору користувача для консолі Linux. [18][19] Пріоритети розробки включають підтримку налаштувань кількох моніторів, відтворення шрифтів Unicode з допомогою Pango, керування клавіатурою XKB та прискорення GPUOpenGL.[20] Скарги на поточну реалізацію ядра включають в себе те, що «це користувацький інтерфейс у просторі ядра, код погано обслуговується, погано обробляє сигнали клавіатури, створює погану візуалізацію шрифтів, пропускає налаштування режиму та підтримку кількох головок і має обмежену роботу з гарячим підключенням, обмежену VT102 ». [4]
↑config VT: Virtual terminal. Linus Torvalds. Архів оригіналу за 2 жовтня 2014. Процитовано 7 грудня 2021. If you say Y here, you will get support for terminal devices with display and keyboard devices. These are called "virtual" because you can run several virtual terminals (also called virtual consoles) on one physical terminal. This is rather useful, for example one virtual terminal can collect system messages and warnings, another one can be used for a text-mode user session, and a third could run an X session, all in parallel. Switching between virtual terminals is done with certain key combinations, usually Alt-<function key>.
↑Replacing CONFIG_VT/Linux-Console. FOSDEM. 2 лютого 2013. Архів оригіналу за 9 червня 2013. Процитовано 7 грудня 2021. CONFIG_VT is the kernel configuration option that enables virtual terminals in the kernel. Initially written by Linus himself, it has been around since 1991.
↑ абвThe Framebuffer Console. kernel.org. Архів оригіналу за 8 червня 2018. Процитовано 7 грудня 2021. The framebuffer console (fbcon), as its name implies, is a text console running on top of the framebuffer device. It has the functionality of any standard text console driver, such as the VGA console, with the added features that can be attributed to the graphical nature of the framebuffer. In the x86 architecture, the framebuffer console is optional, and some even treat it as a toy. For other architectures, it is the only available display device, text or graphical. What are the features of fbcon? The framebuffer console supports high resolutions, varying font types, display rotation, primitive multihead, etc. Theoretically, multi-colored fonts, blending, aliasing, and any feature made available by the underlying graphics card are also possible.
↑CONFIG_VT_CONSOLE: Support for console on virtual terminal. Архів оригіналу за 3 квітня 2013. Процитовано 7 грудня 2021. The system console is the device which receives all kernel messages and warnings and which allows logins in single user mode. If you answer Y here, a virtual terminal (the device used to interact with a physical terminal) can be used as system console.
↑CONFIG_SERIAL_CONSOLE: Support for console on serial port. Архів оригіналу за 28 березня 2013. Процитовано 7 грудня 2021. If you say Y here, it will be possible to use a serial port as the system console (the system console is the device which receives all kernel messages and warnings and which allows logins in single user mode). This could be useful if some terminal or printer is connected to that serial port.
↑CONFIG_USB_SERIAL_CONSOLE: USB Serial Console device support. Архів оригіналу за 24 травня 2013. Процитовано 7 грудня 2021. If you say Y here, it will be possible to use a USB to serial converter port as the system console (the system console is the device which receives all kernel messages and warnings and which allows logins in single user mode). This could be useful if some terminal or printer is connected to that serial port.
↑CONFIG_VGA_CONSOLE: VGA text console. Архів оригіналу за 3 квітня 2013. Процитовано 7 грудня 2021. Saying Y here will allow you to use Linux in text mode through a display that complies with the generic VGA standard. Virtually everyone wants that.
↑Michael Larabel (28 березня 2013). KMSCON: A DRM-Based Terminal Emulator. Phoronix. Архів оригіналу за 7 грудня 2021. Процитовано 7 грудня 2021. Announced yesterday was the release of kmscon, a terminal emulator for Linux that's similar to what's offered inside the kernel, but instead it's in user-space and relies upon the kernel's DRM interfaces as well as Mesa.
↑Michael Larabel (8 лютого 2013). The Linux Kernel Console Is Being Killed Off. Phoronix. Архів оригіналу за 7 грудня 2021. Процитовано 7 грудня 2021. CONFIG_VT has been part of the Linux kernel going back to the early 90s but hasn't really advanced much in that time. David Herrmann, a developer that got going on this new initiative as a student part of Google Summer of Code, wants a new solution that's built with multi-seat and multiple monitors in mind, incorporates Unicode font rendering, XKB-like keyboard handling, graphics hardware acceleration, VT220-VT510 compatibility, and other features.