La consola de Linux es una consola de sistema interna al núcleo de Linux . Una consola de sistema es el dispositivo que recibe todos los mensajes y advertencias del núcleo y que permite inicios de sesión en modo de usuario único. [1] La consola de Linux proporciona una forma para que el núcleo y otros procesos envíen salida de texto al usuario y reciban entrada de texto del usuario. El usuario generalmente ingresa texto con un teclado de computadora y lee el texto de salida en un monitor de computadora . El núcleo de Linux admite consolas virtuales : consolas que están lógicamente separadas, pero que acceden al mismo teclado físico y pantalla. [2] La consola de Linux (y las consolas virtuales de Linux) se implementan mediante el subsistema VT (terminal virtual) del núcleo de Linux y no dependen de ningún software de espacio de usuario . [3] Esto contrasta con un emulador de terminal , que es un proceso de espacio de usuario que emula una terminal y generalmente se usa en un entorno de visualización gráfica.
La consola Linux fue una de las primeras características del núcleo y fue escrita originalmente por Linus Torvalds en 1991 [4] (ver historia de Linux ). Hay dos implementaciones principales: framebuffer y modo texto . La implementación framebuffer es la predeterminada en las distribuciones Linux modernas , y junto con la configuración del modo kernel , proporciona soporte a nivel de kernel para hardware de visualización y características como mostrar gráficos mientras el sistema se está iniciando. [5] La implementación del modo texto heredado se usó en sistemas compatibles con PC con tarjetas gráficas CGA , EGA , MDA y VGA . Las arquitecturas que no eran x86 usaban el modo framebuffer porque sus tarjetas gráficas no implementaban el modo texto. [5] La consola Linux usa mapas de bits de tamaño fijo , fuentes monoespaciadas , generalmente con un valor predeterminado de 8x16 píxeles por carácter. [5]
La consola Linux es una característica opcional del núcleo y la mayoría de los sistemas Linux integrados no la permiten. Estos sistemas suelen proporcionar una interfaz de usuario alternativa (por ejemplo, basada en la web) o arrancan inmediatamente en una interfaz gráfica de usuario y la utilizan como medio principal de interacción con el usuario. Otras implementaciones de la consola Linux incluyen la consola Braille para admitir pantallas Braille actualizables [6] y la consola de puerto serie . [7]
La consola de Linux proporciona una forma para que el núcleo y otros procesos envíen mensajes de texto al usuario y reciban entradas de texto del usuario. En Linux, se pueden utilizar varios dispositivos como consola del sistema: una terminal virtual, [8] puerto serie, [9] puerto serie USB, [10] VGA en modo texto, [11] framebuffer. [12] Algunos sistemas modernos basados en Linux han dejado obsoleta la entrada y salida en modo texto basada en el núcleo y, en su lugar, muestran un logotipo gráfico o una barra de progreso mientras el sistema se está iniciando, seguido del inicio inmediato de una interfaz gráfica de usuario (por ejemplo, el servidor X.Org en distribuciones de escritorio o SurfaceFlinger en Android).
Durante el arranque del núcleo, la consola se utiliza habitualmente para mostrar el registro de arranque del núcleo. El registro de arranque incluye información sobre el hardware detectado y actualizaciones sobre el estado del procedimiento de arranque. En este momento, el núcleo es el único software que se ejecuta y, por lo tanto, no es posible el registro a través del espacio de usuario (por ejemplo, syslog ), por lo que la consola proporciona un lugar conveniente para mostrar esta información. Una vez que el núcleo ha terminado de arrancar, ejecuta el proceso init (que también envía la salida a la consola), que se encarga del arranque del resto del sistema, incluido el inicio de cualquier daemon en segundo plano .
Una vez completado el proceso de arranque , la consola se utilizará para multiplexar múltiples terminales virtuales (accesibles presionando Ctrl-Alt-F1, Ctrl-Alt-F2, etc., Ctrl-Alt-Flecha izquierda, Ctrl-Alt-Flecha derecha o usando chvt [13] ). En cada terminal virtual , se ejecuta un proceso getty , que a su vez ejecuta /bin/login para autenticar a un usuario. Después de la autenticación, se ejecutará un shell de comandos . Los terminales virtuales, como la consola, son compatibles a nivel del kernel de Linux. [14]
La consola de Linux implementa un tipo de terminal de "linux" y las secuencias de escape que utiliza están en la página del manual console_codes . [15]
Las consolas virtuales permiten almacenar varios buffers de texto, lo que permite que distintos programas de consola se ejecuten simultáneamente pero interactúen con el usuario en diferentes contextos. Desde el punto de vista del usuario, esto crea la ilusión de varias consolas independientes.
Cada consola virtual puede tener su propio conjunto de caracteres y disposición de teclado. Linux 2.6 introdujo la posibilidad de cargar una fuente diferente para cada consola virtual (las versiones del kernel anteriores a la 2.6 cambian la fuente solo cuando se lo solicita).
La implementación del modo de texto se utiliza en sistemas basados en PC con una tarjeta de video CGA/EGA/MDA/VGA antigua que implementa modos de video basados en texto. En el modo de texto, el núcleo envía una matriz de caracteres 2D a la tarjeta de video, y esta convierte los caracteres en píxeles para su visualización.
El búfer de texto es una parte de la memoria VGA que describe el contenido de una pantalla de texto en términos de puntos de código y atributos de caracteres. Los puntos de código en el búfer de texto y la fuente generalmente no son los mismos que la codificación utilizada en la semántica de la terminal de texto para colocar caracteres en la pantalla. El conjunto de glifos en la pantalla está determinado por la fuente actual . La pantalla de texto es manejada por los controladores console.c y consolemap.c . Existe una utilidad para alterar las fuentes y las codificaciones de la terminal llamada consolechars .
El núcleo de Linux ( controlador keyboard.c ) ofrece un soporte casi completo para la entrada mediante teclado ( distribuciones de teclado ), pero sigue siendo un poco inconsistente porque interactúa mal con diferentes conjuntos de caracteres. Las distribuciones se cargan mediante la utilidad loadkeys .
Estas dos utilidades y los archivos de datos correspondientes están empaquetados en las herramientas de consola de Linux http://lct.sourceforge.net/ que se envían con muchas distribuciones de Linux .
Los esfuerzos para internacionalizar Linux a nivel de kernel comenzaron ya en 1994 por Markus Kuhn y Andries Brouwer .
La consola Linux es capaz de soportar cualquier modo de texto de estilo VGA, pero el núcleo en sí tiene medios muy limitados para configurar estos modos. SVGATextMode ayuda a habilitar modos de texto más complejos que los modos EGA y VGA estándar. Es totalmente compatible con Console Tools, pero tiene algunos conflictos con dosemu , SVGAlib y servidores de visualización .
Actualmente, no hay soporte para diferentes modos en diferentes consolas virtuales.
Microsoft Windows (de cualquier versión) no cuenta con un soporte totalmente funcional de la consola [ ¿cuándo? ] . La característica comparable, pero solo para software de aplicación, es la consola Win32 .
El framebuffer de Linux (fbdev) es una capa de abstracción gráfica independiente del hardware, que se implementó originalmente para permitir que el núcleo de Linux emulara una consola de texto en sistemas como Apple Macintosh que no tienen una pantalla en modo texto. Ahora ofrece una emulación de modo texto en el espacio del núcleo en cualquier plataforma. Su ventaja sobre SVGATextMode (actualmente sin mantenimiento) es la dependencia y una mejor compatibilidad con el hardware. También permite superar todas las restricciones técnicas de los modos de texto VGA .
Una consola Linux con framebuffer se diferencia de una VGA únicamente en la forma de dibujar los caracteres. El procesamiento de los eventos del teclado y la compatibilidad con las consolas virtuales son exactamente los mismos.
La consola serial de Linux es una implementación de consola a través del puerto serial , habilitada mediante la opción CONFIG_SERIAL_CONSOLE en la configuración del kernel. Puede usarse en algunos sistemas embebidos y en servidores , donde no se espera una interacción directa con el operador . La consola serial permite el mismo modo de acceso para el sistema, pero generalmente a una velocidad más lenta debido al pequeño ancho de banda de RS-232 . Una consola serial se usa a menudo durante el desarrollo de software para sistemas embebidos y, a veces, se deja accesible a través de un puerto de depuración .
La consola responde a una serie de caracteres de control : [17]
Para ^[ presione la tecla Escape.
La consola también admite secuencias de escape extendidas, secuencias de modo ANSI CSI y secuencias de modo privado DEC. [15] [17] Estas secuencias extendidas pueden controlar colores, efectos visuales como parpadeo, subrayado, intensidad y video inverso, frecuencia y duración del tono de campana, intervalo de borrado de pantalla VESA. Aparte del borrado de texto, no se conoce ninguna forma de poner el adaptador VGA en modo de espera.
El proyecto Kmscon tiene como objetivo crear un reemplazo moderno en el espacio de usuario para la consola Linux. [18] [19] Las prioridades de desarrollo incluyen soporte para configuraciones de múltiples monitores , renderizado de fuentes Unicode con Pango , manejo de teclado XKB y aceleración GPU OpenGL . [20] Las quejas sobre la implementación actual del kernel incluyen "que es una interfaz de usuario en el espacio del kernel, el código está mal mantenido, maneja mal los teclados, produce una mala representación de fuentes, no tiene configuración de modo y soporte para múltiples cabezales, no contiene conciencia de múltiples terminales y solo tiene un manejo limitado de conexión en caliente, limitado al cumplimiento de VT102 ". [3]
La consola del sistema es el dispositivo que recibe todos los mensajes y advertencias del núcleo y que permite iniciar sesión en modo de usuario único.
Si responde Y aquí, obtendrá soporte para dispositivos terminales con dispositivos de pantalla y teclado. Estos se llaman "virtuales" porque puede ejecutar varios terminales virtuales (también llamados consolas virtuales) en un terminal físico. Esto es bastante útil, por ejemplo, un terminal virtual puede recopilar mensajes y advertencias del sistema, otro puede usarse para una sesión de usuario en modo texto y un tercero puede ejecutar una sesión X, todo en paralelo. El cambio entre terminales virtuales se realiza con ciertas combinaciones de teclas, generalmente Alt-<tecla de función>.
CONFIG_VT es la opción de configuración del núcleo que habilita terminales virtuales en el núcleo. Escrita inicialmente por el propio Linus, existe desde 1991.
La consola Framebuffer (fbcon), como su nombre lo indica, es una consola de texto que se ejecuta sobre el dispositivo Framebuffer. Tiene la funcionalidad de cualquier controlador de consola de texto estándar, como la consola VGA, con las características adicionales que se pueden atribuir a la naturaleza gráfica del Framebuffer. En la arquitectura x86, la consola Framebuffer es opcional, y algunos incluso la tratan como un juguete. Para otras arquitecturas, es el único dispositivo de visualización disponible, de texto o gráfico. ¿Cuáles son las características de fbcon? La consola Framebuffer admite altas resoluciones, diferentes tipos de fuentes, rotación de pantalla, multicabezal primitivo, etc. Teóricamente, también son posibles las fuentes multicolor, la combinación, el alias y cualquier característica disponible por la tarjeta gráfica subyacente.
La consola del sistema es el dispositivo que recibe todos los mensajes y advertencias del kernel y que permite inicios de sesión en modo de usuario único. Si responde Y aquí, se puede utilizar una terminal virtual (el dispositivo utilizado para interactuar con una terminal física) como consola del sistema.
Si responde Y aquí, será posible utilizar un puerto serie como consola del sistema (la consola del sistema es el dispositivo que recibe todos los mensajes y advertencias del kernel y que permite inicios de sesión en modo de usuario único). Esto podría ser útil si alguna terminal o impresora está conectada a ese puerto serie.
Si responde "S" aquí, será posible utilizar un puerto de conversión USB a serie como consola del sistema (la consola del sistema es el dispositivo que recibe todos los mensajes y advertencias del núcleo y que permite inicios de sesión en modo de usuario único). Esto podría ser útil si alguna terminal o impresora está conectada a ese puerto serie.
Si responde "S" aquí, podrá usar Linux en modo texto a través de una pantalla que cumpla con el estándar VGA genérico. Prácticamente todo el mundo quiere eso.
Un sistema Linux tiene hasta 63 consolas virtuales
Ayer se anunció el lanzamiento de kmscon, un emulador de terminal para Linux similar al que se ofrece dentro del núcleo, pero en lugar de eso se encuentra en el espacio de usuario y se basa en las interfaces DRM del núcleo, así como en Mesa.
CONFIG_VT ha sido parte del núcleo de Linux desde principios de los años 90, pero en realidad no ha avanzado mucho en ese tiempo. David Herrmann, un desarrollador que se puso en marcha en esta nueva iniciativa como estudiante que forma parte de Google Summer of Code, quiere una nueva solución que esté diseñada teniendo en cuenta la posibilidad de trabajar con varios usuarios y monitores, que incorpore renderizado de fuentes Unicode, manejo de teclado similar a XKB, aceleración de hardware de gráficos, compatibilidad con VT220-VT510 y otras características.