miércoles, 15 de febrero de 2012

Las X, entornos de escritorio y gestores de ventanas

Introducción a las X

Muchos sistemas operativos libres como los que utilizan el núcleo Linux utilizan el llamado "X-Window-System" como la manera de generar los gráficos por pantalla. En general, (obviando tecnologías como DRI para gráficos avanzados como 3D) se sigue el siguiente esquema:
  • Tenemos un servidor X, que no es más que un programa, un proceso que se está ejecutando en la máquina del usuario. Se comunica con el hardware de video (tarjeta gráfica -> monitores) a través del driver gráfico que tengamos instalado y se encarga de "dibujar cosas" en pantalla. Dibuja lo que le mande cada cliente en cada momento. Se encarga también de recibir las entradas del usuario (como clics de ratón o escritura desde el teclado) y devolvérselas a su cliente correspondiente.
  • Tenemos clientes X. Son básicamente cualquier programa ejecutándose en modo gráfico. Envían instrucciones al servidor X sobre qué tiene que dibujar, y reciben las entradas de usuario desde el servidor, a las que responden. Para ello utilizan diferentes librerías de programación, la más básica se llama Xlib. Para comunicarse, el cliente y el servidor utilizan el llamado protocolo X.



Esto permite arrancar un sistema GNU/Linux sin tener por qué ejecutar el servidor X, ya que hay muchos programas que no necesitan obligatoriamente una interfaz gráfica y podemos acelerarlos mucho si los ejecutamos en la simple consola. Es decir, el servidor X no es una parte básica del sistema operativo, no está dentro del núcleo, lo que permite por ejemplo que un error del servidor gráfico X no cuelgue definitivamente el PC completo.




El protocolo X se puede transmitir por la red, de forma que, por ejemplo, podemos conectarnos desde el limitado PC de casa corriendo un servidor X a un potente ordenador de la universidad que ejecuta clientes X, y de esa forma trabajar desde casa, entre otras muchas posibilidades. Pero lo usual, claro está, es que tanto el servidor X como los clientes X estén en el mismo ordenador, que es el caso de la mayoría de nosotros.


Los gestores de ventanas


El cliente X más importante que se suele ejecutar es el llamado gestor de ventanas. Los gestores de ventanas no son más que programas encargados de gestionar la apariencia, comportamiento e interrelación de las llamadas ventanas, que como todos sabemos son "espacios" rectangulares pertenecientes a cada programa con interfaz gráfica (recordemos: cliente X) dentro de los cuales dicho programa trabaja y nos muestra la mayoría de sus funciones.

Se encargan de dotar a todas las ventanas de elementos comunes como, en algunos gestores, botones de acción (los típicos de Windows de minimizar, maximizar y cerrar, por ejemplo), barras de título con el nombre del programa... O se encargan de controlar qué acciones del mouse o combinaciones de teclas van a afectar a las ventanas y ejecutar en ellas acciones como abrir, cerrar, minimizar, maximizar, mover y escalar.

También gestionan la disposición de las ventanas en el escritorio. Existen básicamente dos opciones para ello:

Metacity en Gnome
  • Gestores de ventanas de pila: Las ventanas se pueden mover libremente, solapándose unas con otras, y mostrándose la ventana activa en lo más alto de la pila. Se consigue dibujando en el servidor X la ventana activa después de las no activas, de forma que queden por encima. Ejemplos de este tipo de gestores, tenemos los de Gnome y KDE (Metacity y Kwin), los de Windows y Mac, etc.



wmii
  • Gestores de ventanas de mosaico: Las ventanas no se pueden solapar, sino que rellenan completamente la pantalla, pudiendo elegir su tamaño, disposición y otras opciones. Ejemplos de este tipo de gestores, tenemos el awesome, el dwm, el wmii (que es el que uso yo y al que dedicaré una entrada dentro de poco)...



Los entornos de escritorio

Los entornos de escritorio completos como KDE o Gnome (o los más ligeros Xfce, LXDE, etc.) son un conjunto de programas interrelacionados para el disfrute diario del usuario y gestionar completamente el ordenador. Algunos de sus componentes son el gestor de ventanas propio de cada uno, un navegador de archivos, "panel de control" para la administración del sistema con accesos directos a gran parte de la configuración, "demonios" gestores encargados de tareas como reloj, calendario, portapapeles, automontaje de unidades USB, mostrar iconos en el fondo del escritorio, etc.

Es decir, son "cómodos" y tienen todo integrado. Cualquiera de ellos es conveniente si vienes de utilizar un sistema Windows o Mac, ya que dichos SO tienen cada uno su propio entorno de escritorio. Sin embargo en estos entornos no son todo ventajas: Suelen ser muy pesados y por ende ocupar mucha RAM y tiempo de procesador; tener librerías propias y/o compartidas entre todas sus aplicaciones; "obligatoriedad" de instalar muchos programas que son parte de la "suite" y que tal vez no necesites; larga lista de dependencias para cada programa propio, etc.


Por supuesto, no es necesario instalar un entorno de escritorio para utilizar a gusto un servidor gráfico en un sistema GNU/Linux. La mayoría de los gestores de ventanas son independientes, los puedes instalar en cualquier distribución o incluso en otros sistemas Unix-like. Son las maravillas del software libre, que puedes elegir diferentes alternativas para cada pedazo de tu sistema operativo, no dependes de una sola opción integrada en un gran paquete, al estilo de los SOs privativos ya nombrados.

Es más, la opción de no instalar un entorno pesado puede conllevar una comodidad y una rapidez de uso general del ordenador muy superior, a pesar de sus desventajas, como la dificultad de configuración y la necesidad de tener un nivel más bien avanzado de conocimientos relativos a los sistemas GNU/Linux. Ahora mismo, en mi portátil, utilizo el gestor de ventanas de tipo mosaico wmii, y ningún tipo de entorno de escritorio, y la verdad que es una gozada, va como un tiro sin ser una maravilla de PC.



Fuentes:


3 comentarios:

  1. Gracias

    Si queremos o necesitamos averiguar qué entorno de escritorio (o gestor de ventanas en su defecto) emplea la distribución de GNU/Linux que estamos utilizando podemos tener en cuenta (si la distro tiene varios EE -o GV- creo que sería aquel con el que se ha iniciado sesión) ...

    He probado las mejores opciones que he encontrado por ahí (con alguna adaptación) con a) GNOME bajo Linux Mint instalado; b) GNOME bajo Linux Mint Live USB; c) MATE bajo Linux Mint; d) LXDE bajo Lubuntu; e) JWM bajo Puppy Linux (JWM no es un entorno de escritorio -como los anteriores- sino un gestor de ventanas -de pila concretamente-). Mis resultados:

    1) (regular) Comando (en terminal o consola):
    env | grep DESKTOP_SESSION=
    a)&b) DESKTOP_SESSION=gnome ; c) DESKTOP_SESSION=default.desktop ; d) DESKTOP_SESSION=Lubuntu ; e) (nada)

    2) (regular) Comando (en terminal o consola):
    echo $GDMSESSION
    a)&b) gnome ; c) (nada) ; d) Lubuntu ; e) (nada)

    3) (bien, pero no perfecto) Comando (en terminal o consola):
    pgrep -l "gnome|kde|mate|cinnamon|lxde|xfce|jwm"
    o bien
    ps -A | egrep -i "gnome|kde|mate|cinnamon|lxde|xfce|jwm"
    a)&b) (BIEN) ; c) (BIEN) ; d) (MAL) ; e) (nada) & (BIEN)

    4) (muy bien, pero no perfecto) Programa o aplicación que viene de serie con todos los probados (en distros que no, se podría instalar fácilmente):
    HardInfo
    a) (nada) ; b) GNOME 2.32.0 ; c) MATE ; d) LXDE (Lubuntu) ; e) Unknown (Window Manager: JWM)

    CONCLUSIÓN: Una combinación de HardInfo y del comando ps -A | egrep -i "gnome|kde|mate|cinnamon|lxde|xfce|jwm" probablemente nos dará la respuesta buscada.

    ResponderEliminar
    Respuestas
    1. Este comando parece útil:
      ls /usr/bin/*session*
      -> en GNOME devuelve /usr/bin/gnome-session (y más)
      -> en MATE devuelve /usr/bin/mate-session (y más)
      -> en LXDE devuelve /usr/bin/lxsession (y más)
      -> en JWM devuelve /usr/bin/icewm-session (debería ser jwm-session, ¿¡no!?)

      Eliminar
    2. Los mejores comandos parecen ser:
      pgrep -l "gnome|kde|mate|cinnamon|lx|xfce|jwm"
      y
      ps -A | egrep -i "gnome|kde|mate|cinnamon|lx|xfce|jwm"

      Eliminar

Si te ha sido útil, por favor, comenta, me haces ver que lo que pongo aquí sirve para algo, un saludo :)