Director de sesión en el aula - GNU/Linux & UNIX

Profesor Alejandro de la Torre

GUI - X Window System - Clientes gráficos - Escritorios

Documentos


Arquitectura del servidor X (español)
Configuración del servidor X (inglés)
http://xwinman.org/ (catálogo de productos X)
Xfree86 - Documentation
freedesktop project
CCCM

Puntos de desarrollo

GUI en Linux/Unix: piezas y conceptos.

X Window System (X server).

Desarrollado en el MIT en los 80 para proveer de un entorno gráfico a los sistemas UNIX. Por si mismo no aporta resultados gráficos, es una implementación software con arquitectura de servidor que hace transparente al programador las particularidades del hardware gráfico de la máquina (tarjeta gráfica, ratón, teclado y pantalla) debiendo este crear programas clientes que exploten los servicios de X. Su arquitectura permite la ejecución del cliente en una máquina y el servidor en otra.

El desarrollo, licencia y propiedad ha pasado por tres estadios:

Proyecto Athena en el MIT: Hasta 1984.

XFree86: Hereda el proyecto Athena y hasta 2004 se distribuye con licencia MIT.

X.org: Partiendo de XFree86 aparece en 2004 como respuesta al cambio de licencia de XFree86, la cual, presenta algunas incompatibilidades con la GPL. Actualmente es el más utilizado en las distribuciones GNU/Linux.

Se estructura en los siguientes elementos:

X: Núcleo del servidor.

Xprotocol: Protocolo que comunica el cliente con el servidor X.

Xlib: API de X. Permite el acceso a las funciones elementales de X ("p.e.:dibuja una línea entre el punto A y el B") y envuelve a Xprotocol.

Xintrinsics: Conjunto de funciones de más alto nivel que las proporcionadas por Xlib para crear widgets toolkits por parte de terceros. Facilita el acceso a Xlib.




Gestores de ventanas.about:

En inglés Window Manager se pueden considerar los clientes de primer nivel. Hay una gran variedad (enlightenment, fvwm, amiwm, icewm, windowmaker, afterstep, sawfish,...) y son necesarios para crear software gráfico más sofisticado puesto que evitan pararse en cosas tan laboriosas como posicionar en la pantalla una ventana de un tamaño determinado.

Widget Libraries or toolkits.

Continuando con las facilidades que los gestores de ventanas aportan encontramos estos componentes. Son Librerías que suman funciones para ser utilizadas por el software de aplicación y que permiten hacer cosas como pintar un botón y asignarle código para ejecutar tras un evento (click de ratón sobre él). Buenos ejemplos de estos productos son GTK (GIMP ToolKit) y Qt (de la empresa Qt software).

Escritorio.

En inglés Desktop Environment. Es un paso más allá de X server, gestores de ventanas y toolkits. Es la unión de los tres elementos junto con aplicativo de alto nivel y todo ello envuelto en unas directrices de uso, aspecto y comportamiento para proporcionar un entorno de usuario final y desarrollo de software unificado. Es la respuesta a los sistemas que intrínsecamente cuentan con un entorno gráfico inseparable (MS Windows, Mac OS). Por ejemplo KDE, es un escritorio que utiliza un único gestor de ventanas (KWM), el ToolKit Qt ampliado con funciones propias de KDE (kdelibs) y mucho software de aplicación como Konqueror, Kpanel, etc.. que suman funcionalidades para el usuario y para los desarrolladores. Aquellos que quieran desarrollar software para KDE lo deben hacer de acuerdo a los mecanismos establecidos en este Desktop Environment.

Instalación de una GUI.

Opción "llave en mano".

Como ya se ha dicho, hay varias piezas en el entramado de una GUI y cada una de ellas hecha por un constructor diferente. Además, cada una de estas piezas se subdivide en otras mas pequeñas que a su vez dependen de software de terceros y todo el conjunto se entrelaza entre si para obtener el resultado final. Es por ello que los creadores de distribuciones GNU/Linux, así como los de sistemas Unix, unen todas las piezas intrincándolas con el resto de sus sistemas para obtener completos entornos gráficos listos para usar. El proceso de instalación de un GNU/Linux o un Unix lleva aparejado el establecimiento de dicho entorno a excepción de algunas distribuciones y/o sistemas que otorgan al instalador la posibilidadde optar o no a él, en cualquier caso, la mejor opción para disponer de un entorno gráfico es instalarlo desde la oferta de software del constructor de nuestra distribución o sistema.

Opción "montamos el puzzle"

Tanto servidores como clientes pueden obtenerse de los sitios oficiales e instalarlos siguiendo las instrucciones. Al respecto de los procesos de instalación de los productos más utilizados, dígase servidor xfree86, servidor x.org, desktop GNOME y desktop KDE se habla más abajo, pudiéndose comprobar que no se ciñen al conocido procedimiento universal (configure, make, make install). Por otra parte, debemos saber que una vez instalado X server (lo menos laborioso) existen clientes ligeros (tanto escritorios como gestores de ventanas) que proporcionan un "suficiente" entorno de trabajo y cuya instalación SI se basa en el mecanismo download .tgz + configure + make + make install, si bien es cierto que habrá que pasar por alguna que otra interrupción para resolver dependencias.

Visitados los sitios oficiales en Enero de 2015 encontramos lo siguiente al respecto de la instalación:

x.org (muy complicado): ...The best place to get X is from your operating system or distribution vendor. X.Org currently provides no binaries.“

gnome.org (hay que ser muy experto): "...While you can easily install GNOME inside a distribution, in some cases you will prefer to enjoy the wild terminal screen and build GNOME from source. If you are a developer, programmer, scientist or interested somehow, you are in the right place."

kde.org (posible con paciencia): http://techbase.kde.org

xfree86.org (se puede hacer): Más fácil y accesible. Es un producto veterano que aporta mucha información y herramientas para su correcta instalación. Seguir la pista a este enlace ubicado en xfree86.org y comprobar lo exhaustivo de las explicaciones. Se puede optar por compilar los fuentes o descargar binarios preparados para nuestra plataforma.

Ficheros de configuración, scripts y ejecutables relevantes.

xinit

Tal y como lo define la documentación de XFree86, este ejecutable es el X Window System initializer, es decir, el que arranca el servidor gráfico (X server) y el que arranca el/los primer/os programa/s cliente/s. El usuario lo utilizará en caso de no activarse automáticamente una sesión gráfica en el arranque de la máquina. Es conveniente que se estudie el comportamiento de este programa en la documentación:http://asir.sudo.es/docnux/X/xfree86/xinit.1.html

startx

Es un shell script implementado para funcionar como frontend de xinit y permitir al usuario una más sencilla puesta en marcha de la sesión gráfica (X server + primer/os programa/s cliente/s). Lo normal es ejecutarlo sin parámetros.

XF86Config / xorg.conf

Los servidores xfree86 y X.org tienen ficheros de configuración con nombres distintos ("XF86Config" para xfreee86 y "xorg.conf" para X.org) pero de idéntica sintaxis y estructura interna. Un ejemplo puede consultarse en http://asir.sudo.es/docnux/X/XF86Config_ejemplo.txt y para conocer los detalles debe consultarse: http://asir.sudo.es/docnux/X/xfree86/XF86Config.5.html

El comando xf86config ayuda a generar un fichero de configuración de acuerdo a las especificaciones hardware de los componenetes gráficos, las cuales, deben ser conocidas por el que ejecuta la herramienta ya que realiza su trabajo preguntando datos muy técnicos.

El servidor puede funcionar sin fichero de configuración. El programa getconfig averigua (en la medida de lo posible) la configuración hardware antes delarranque y pasa la información al servidor.

configuración de los programas clientes:

Cada cliente marca sus propias directrices en cuanto a los nombres y contenidos de los ficheros de configuración. En el caso de los entornos de escritorio son extensas estructuras de directorios.

xserverrc || $HOME/.xserverrc

Este archivo encierra la secuencia de ejecución que xinit seguirá para levantar el servidor gráfico. Puede residir en el directorio $HOME del usuario que invova a xinit, en cuyo caso el nombre debe ir precedido por el punto (".") o puede residir en una ubicación general del árbol de directorios para ser empleado por todos los usuarios. Es en este fichero donde el usuario debe actuar para cambiar el comportamiento del servidor gráfico cuando se arrancar una sesión gráfica.

xinitrc || $HOME/.xinitrc

Este archivo encierra la secuencia de ejecución que xinit seguirá para levantar el/los programa/s cliente/s que correspondan. Puede residir en el directorio $HOME del usuario, en cuyo caso el nombre debe ir precedido por el punto (".") o puede residir en una ubicación general del árbol de directorios para ser empleado por todos los usuarios. Es aquí donde el usuario debe actuar para cambiar el escenario visible de la sesión gráfica.

xsetroot -solid gray &
xbiff -geometry -430+5 &
oclock -geometry 75x75-0-0 &
xload -geometry  -80-0 &
xterm -geometry +0+60 -ls &
xterm -geometry +0-100 &
exec twm

Acceso remoto al servidor X.

Puertos Xserver

6000 udp/tcp, 177 udp/tcp

Método1 (poco recomendable, el tráfico no está encriptado): Autorizar conexiones TCP/IP al servidor X.

X, por defecto, admite peticiones remotas vía TCP/IP, es por eso que los procesos de instalación dejan esta puerta cerrada por seguridad, lo hacen pasando el modificador argumentado -nolisten tcp al núcleo de X en la invocación del mismo. Dicho esto, para hacer uso del servidor X que se ejecuta en otra máquina daremos los siguientes pasos:

En el sistema que actua como servidor X:

En el sistema que actua como cliente X

export DISPLAY=10.0.0.15:0.0

Esta forma de conexión genera tráfico no cifrado con los riesgos que conlleva.

Método 2 (el más recomendable): X11 Forwarding usando ssh.

ssh permite hacer forwarding del protocolo X11, es decir, crea un tunel encriptado entre un cliente ssh y el servidor sshd para llevar y traer el protocolo X11 por su interior, asegurando así la comunicación entre cliente gráfico y servidor X.

Para utilizar esta interesante funcionalidad hay que dotar y configurar convenientemente ambos extremos (cliente y servidor) verificando estas dos cosas:

1) debe estar instalado en ambos extremos el comando xauth
2)
prestar atención a los parámetros ubicados en los ficheros  ./ssh_config (configuración del cliente ssh) y ./sshd_config (configuración del servidor sshd) en las máquinas de ambos extremos.

EXTREMO FICHERO PARAMETRO VALOR
Servidor X; Donde se posiciona el usuario. ssh_config ForwardX11 yes
ssh_config ForwardX11Trusted yes
Cliente X; Donde se invocan los programas previa conexión ssh. sshd_config X11Forwarding yes

Verificado lo anterior, sólo queda conectar a la máquina que hace la función de cliente desde la máquina que hace la función de servidor (ssh -X <user>@<client_host>) y una vez allí, invocar el cliente gráfico (xclock, xmessage, firefox, etc...) visualizaremos la ventana de dicho cliente en la máquina servidor. NO dónde se invocan.



Amplio repositorio de documentos para estudiantes y profesionales de TI