Aprende GNU/Linux, GNU/Linux 17

Las interfaces gráficas en Linux

En el mundo Linux existe una gran variedad de entornos gráficos, siendo para algunos una bendición de posibilidades y para otros un dolor de cabeza de fragmentación. En este artículo no voy a entrar en valoraciones sobre si es bueno o malo que existan tantas alternativas, simplemente voy a limitarme a hablar de las diferentes capas que componen las interfaces gráficas en Linux y su funcionamiento, de forma que se entienda porque es posible que existan tantas opciones.

X Window system, la base.

X11LogoMientras que en otros sistemas operativos (Windows de Microsoft por ejemplo) la interfaz gráfica viene integrada en lo más profundo del sistema, en Linux y Unix se utiliza un software independiente al sistema operativo. Este software que fue desarrollado por el MIT en la década de los 80, se denomina X Window System, o de forma más corriente, X Window o X11 ( debido a que se encuentra en la versión 11 ).

X Window es un sistema gráfico completo que se encarga de dibujar y gestionar los eventos de los componentes de un entorno gráfico: ventanas, botones, menús, listas, el cursos, etc. Este sistema de gráficos es la capa más baja de la interfaz gráfica en Linux y gestiona las interacciones entre máquina y humano, además de dibujar los componentes gráficos que se le indica. Pero X Window no contiene los componentes (el aspecto) a dibujar, estos son ofrecidos por el gestor de ventanas del que hablo más adelante.

El modelo cliente/servidor

X Window funciona bajo el modelo cliente/servidor, ¿ Pero cómo es esto?cliente_servidorx11

En X window existe un servidor que se encarga de proporcionar herramientas para acceder a la pantalla, teclado y ratón, es decir, un ordenador corriente que disponga de estos periféricos. Y por otra parte están los clientes, aplicaciones que utilizan estos recursos para interaccionar con el usuario. Normalmente tanto el cliente como el servidor están en un mismo ordenador, pero X Window ofrece la posibilidad de realizar la comunicación vía red gracias a un protocolo denominado Xprotocol y la librería Xlib. Las aplicaciones son clientes porque el servidor X les provee “servicio de ventanas”.

El proceso se efectúa de la siguiente manera: Cuando un sistema Linux con interfaz gráfica inicia, lo hace con el servidor X, cada vez que se inicia una aplicación se crea un cliente que se comunicara con el servidor para ofrecer una interfaz gráfica por pantalla. Por otra parte al interactuar con el ratón o el teclado, el servidor enviara la señal al cliente (aplicación) y ésta ejecutara las acciones pertinentes, después se enviara el resultado al servidor para que sea visualizado en la pantalla.

Ejemplo: click con el mouse en un menú (servidor) envía señal al programa (comunicación servidor-cliente) el cliente realiza la operación de abrir el menú (cliente) le envía la señas de visualización al servidor (comunicación cliente-servidor) el servidor lo muestra en la pantalla (servidor)

Los gestores de ventanas

X11 solo se encarga de dibujar la ventana, pero no sabe como renderizar los diferentes elementos que la componen. Para este cometido existe el gestor de ventanas o window manager que se encarga de indicar al servidor X como dibujar los diferentes elementos que requiere una ventana: movimientos, selecciones, elementos y decoraciones. En resumidas cuentas, el Servidor X visualiza lo que este gestor le indica.

En el mundo del pingüino existe una gran variedad de gestores de ventanas, la diferencia entre estos radica en diferentes aspectos como pueden ser la apariencia visual, el consumo de memoria, las opciones de personalización, etc.

Lista de gestores de ventanas populares <Wikipedia>

Widgets y toolkits

Los gestores de ventanas son algo primitivos por si solos, y les falta una mayor integración de los diferentes programas en el entorno. Para poder integrar de manera adecuada los programas, existen diferentes librerías que se ocupan de esto. Teniendo en cuenta que a los elementos que componen una interfaz gráfica ( menús, botones, campos de entradas, etc ) se les conoce como widgets, las librerías se encargan de proporcionar funciones para gestionar y dibujar estos widgets. Cuando una de estas librerías contiene un kit completo de widgets, se le denomina widget toolkit o simplemente toolkit. Existen diferentes toolkits, pero los dos más utilizados son:

gtk

GTK (Gimp toolkit) : En un principio se escribió para el programa GIMP de retoque de imágenes, pero con el tiempo se a vuelto independiente a este gracias a su eficacia. Está escrito en C y es la librería por defecto del conocido entorno gráfico GNOME.

qtQT (Cute) : Esta escrita en c++ pero tiene compatibilidad con muchos otros lenguajes. QT además de ser una toolkit, ofrece un entorno de desarrollo de aplicaciones. KDE utiliza QT como librería por defecto.

Estas dos librerías no son compatibles de manera nativa, pero es posible abrir programas desarrollados en una en sistemas que usen por defecto la otra. Simplemente la visualización cambiará.

Los entornos de escritorio o gráficos.

Por ultimo tenemos los entornos de escritorio, se basan en los toolkits y ofrecen una solución completa de interfaz gráfica. Un entorno de escritorio provee al usuario de iconos, barras de herramientas, aplicaciones e integración entre aplicaciones con habilidades como arrastrar y soltar que hacen un manejo más amigable. Unos de los más usados son :

GNOME KDE SC Unity XFCE
GNOME Shell KDE 4 Unity Xfce

<wikipedia>

Existen muchos más, y los últimos años han aparecido nuevos entornos de todo tipo, pero hablar de todos ellos llevaría un artículo a parte.

El futuro, Wayland

wayland

Una vez comentadas todas las capas que componen las interfaces gráficas en Linux y hablado de como funcionan e interactúan entre ellas, es conveniente hablar de lo que depara el futuro, y parece que el futuro depara Wayland.

Wayland es un sistema de gráficos basado en OpenGL que empezó a desarrollarse en 2008 por el ingeniero de software Kristian Høgsberg para sustituir a X Window System . Pero la pregunta clave es ¿Hace falta remplazar X Window System?

X window lleva desde hace años acarreando una serie de problemas que se han solucionado con parches sobre parches, convirtiendo X11 en un sistema muy pesado y por lo tanto, menos eficiente. Los problemas técnicos de X Window se analizan en este artículo (en ingles) de forma muy clara y concisa.

Y es en el contexto de estos problemas donde entra Wayland, que esta escrita con un diseño más eficiente y limpio, adaptándose a los sistemas gráficos modernos. Las principales ventajas de Wayland según sus desarrolladores son:

Cada frame es perfecto, sin retardos, lag o cualquier efecto negativo en la visualización, sin importar la carga del sistema.

Sistema mínimo, sin cosas innecesarias que solo afectan negativamente en el rendimiento y no sirven para nada.

Posibilidad de crear versiones especificas para un tipo de hardware, pero sin ser necesario.

En este artículo se exponen todas las ventajas que trae consigo Wayland. Por otra parte, entre los desarrolladores de Wayland están algunos de los antiguos desarrolladores de X Window, que conocen perfectamente los problemas de X11 y por lo tanto, saben a que se enfrentan.

Fedora, KDE y otros proyectos Open Source ya han manifestado sus intenciones de migrar a este nuevo sistema y puede que en en los siguientes años otros proyectos tomen el mismo rumbo.

Dicho esto, también existen detractores que creen que todo queda muy bonito sobre el papel pero que a la hora de implementarlo el rendimiento no sera el mismo del que se habla o que sera muy similar al de X11. Además tanto Nvidia como ATI han dicho que de momento no esta entre sus planes adaptar sus drivers a Wayland, siendo este un gran inconveniente. Por ultimo, es importante decir que X Window es un sistema completamente testeado y estable, mientras que Wayland, no.

Personalmente creo que cuantas mas opciones mejor, y si encima son opciones innovadoras que modernizan sistemas arcaicos, mejor que mejor. Aun así abra que ver como evoluciona el proyecto y si al final realmente cumple con los que se dice, y más importante, si los proyectos open source deciden adoptarlo.

Conclusión

Como hemos visto, las interfaces gráficas en Linux están compuestas por diferentes capas, en la siguiente imagen se pueden observar estas capas y la interacción entre ellas:

capas_GUI

«Esquema de las capas de la interfaz gráfica de usuario» por Noelia Sales Montes

Lo fantástico de abstraer en diferentes capas la GUI, es que es posible crear y utilizar diferentes interfaces y permite mucha mayor adaptación a cada persona o situación. Pero también tiene parte negativa, el desarrollo de aplicaciones se hace específicamente para un tipo de toolkit, dando incompatibilidades y en el caso de los usuarios nuevos tener diferentes tipo de interfaces puede ser un poco complicado.

¡Espero que os sea de ayuda!

Sobre el autor / 

AsierPH

Entusiasta de las tecnologías libres y fundador de OvToaster.com | “Las obras de conocimiento deben ser libres, no hay excusas para que no sea así“

Articulos relacionados

17 comentarios

  1. lifernux 19 febrero, 2015 at 5:15 pm -  Responder

    Muy educativo este artículo. Y creo que muy bien explicado para los no expertos.

    • AsierPH 19 febrero, 2015 at 7:49 pm -  Responder

      ¡Muchas gracias por el comentario Lifernux!

  2. Manuel 29 enero, 2015 at 6:08 pm -  Responder

    Buenas tardes, leyendo tu artículo me ha entrado curiosidad acerca del roadmap de Ubuntu y la incorporación de Wayland y parece que ya han tomado la decisión de no considerarlo.

    https://wiki.ubuntu.com/Wayland

    Al contrario están desarrollando uno nuevo que sirva tanto para dispositivos de escritorio como para móviles

    https://wiki.ubuntu.com/Mir

    Saludos

    • AsierPH 29 enero, 2015 at 9:20 pm -  Responder

      Hola Manuel:
      Pues mira, la verdad es que ya había leído sobre MIR y la convergencia entre dispositivos. Pero no se porque he incluido a Ubuntu en la lista de las posibles distribuciones que adopten Wayland. Gracias por la corrección 🙂

  3. willarmand 29 enero, 2015 at 6:21 am -  Responder

    Muchas gracias Asierph, de por si solo rtcwake tiene muchas opciones y se amplian mucho mas al integrarlo al cron y las posibilidades son casi infinitas con un script, solo que en este punto es de tener mayor cuidado.
    Voy a hacer pruebas y ensayos, ya que la terminal de GNU/Linux es un verdadero laboratorio donde experimentar. Echare una ojeada a un post que hiciste anteriormente acerca de scripts. Mas adelante te voy a molestar acerca de scripts mas especificos para usarse con este interesante comando.
    Saludos.

    • AsierPH 29 enero, 2015 at 3:52 pm -  Responder

      Verdaderamente la terminal es un laboratorio xD, ya sabes que si necesitas algo y tengo tiempo, te ayudo en lo que pueda 🙂
      ¡Un saludo!

  4. willarmand 28 enero, 2015 at 5:35 pm -  Responder

    Muchas gracias Asierph, por la sugerencia de rtcwake, es justo lo que buscaba, ya me quedo claro como funciona y lo mejor es que viene por defecto en casi todas las distribuciones, solo me queda una duda, y es saber si se puede integrar al Cron.
    Saludos.

    • AsierPH 28 enero, 2015 at 9:49 pm -  Responder

      Me alegro que te sea útil, el rtcwake si que se puede usar en cron. En este link tienes el código de un script y luego lo añade al crontab.
      Échale un ojo y me comentas.
      Un saludo!

  5. rv 28 enero, 2015 at 5:24 pm -  Responder

    Muy buen artículo, bien claro y resumido. ¡Gracias por la info!
    Ahí lo estoy compartiendo…

    • AsierPH 28 enero, 2015 at 9:45 pm -  Responder

      ¡Gracias por el comentario rv!

  6. willarmand 27 enero, 2015 at 6:39 pm -  Responder

    Muchas gracias, le voy a echar una mirada, ya que este tema se ha vuelto complicado y dificil de resolver, ha de tener alguna salida satisfactoria.
    Creo que si en Windows se puede, tambien en Linux.
    Saludos

  7. willarmand 27 enero, 2015 at 7:42 am -  Responder

    Saludos, de vez en cuando me doy una pasada a ver que hay de nuevo. muy interesante articulo.
    Tengo unas interrogantes, me salgo del tema pero tal vez algo sabras.
    Quiero saber a ciencia cierta si el bendito Cron puede despertar de la hibernacion a la pc.
    ¿porque con el Cron?
    Bueno necesito programar que salga de la hibernacion sola, haga la tarea, la termine, vuelva a hibernar; unas horas mas adelante vuelva a despertar, ejecute la tarea, la termine y se apague o hiberne segun lo programe yo, todo esto en mi ausencia.
    No se si soy muy ambicioso o le pido demasiado a GNU/Linux, pero con el simple programador de tareas del obsoleto Windows xp, vengo por años y años haciendolo.
    Ya que el programador de tareas de Windows si despierta a la pc, cuantas veces se le programe.
    No me sirve darle una sola hora de encendido por medio de la bios, sino varias horas programadas de encendido y de hibernacion en mi ausencia.
    ¿habra algun comando para el Cron? ¿ o simplemente no se puede?
    O ¿habra algun script que saque de la hibernacion a la pc?
    no se si me serviria pm utils.

    Saludos

    • AsierPH 27 enero, 2015 at 3:33 pm -  Responder

      Buenas Williarmand:
      La verdad que nunca he tenido que programar algo así, pero se que existe el comando rtcwake que puedes usar en cron o script. Además también en este artículo explican otra forma de realizar esa tarea (esta en ingles pero es sencillo de entender).
      El primer comando que te hablo tiene una sintaxis de tipo : rtcwake -m [modo de suspensión] [-s segundos]. El comando tiene varios parámetros mas, en el link de arriba tienes todas las opciones.
      ¡Un saludo espero que te sea de ayuda!
      PD: es difícil pedir de mas a GNU/Linux 😛

  8. Antonio 25 enero, 2015 at 10:31 pm -  Responder

    Si señor. Muy buen artículo. Muchas gracias amigo.

    • AsierPH 25 enero, 2015 at 10:59 pm -  Responder

      Muchas gracias Antonio 🙂

  9. RobeR 22 enero, 2015 at 7:48 pm -  Responder

    y wayland como entraria aqui?,cual seria sus ventajas de las que tanto hablan. gracias

    • AsierPH 22 enero, 2015 at 8:22 pm -  Responder

      Hola Rober,
      Cuando escribí el articulo decidí no hablar de ello, pero me he dado cuenta que ha sido un error, este fin de semana añado una sección hablando de Wayland 🙂
      Gracias por comentar

Deja tu comentario

Tu correo no sera publicado. Los campos requeridos están marcados *