Ejemplos

  1. Ejecutando una aplicación X simple.

    Para empezar ejecutaremos la aplicación xlogo que muestra el logotipo de X en una ventana. Prueba primero a ejecutarla especificando el display en la línea de comandos:
    	csh> xlogo -display mihost:0 &
    

    A continuación utiliza el modo más frecuente especificando el display en la variable de entorno DISPLAY:

    	csh> setenv DISPLAY mihost:0 
    	csh> xlogo &
    

    Para terminar la aplicación se puede:

    Por último en este ejemplo se propone ejecutar la aplicación X de uso más frecuente: el emulador de terminal xterm, que crea una ventana que se comporta como un terminal alfanumérico convencional.

    NOTA: Recuerda que mihost es el nombre de la máquina donde está ejecutando el servidor X que controla el terminal gráfico sobre el que queremos que aparezcan las ventanas. En el caso de un terminal X, es el nombre del terminal X.


  2. Ejecutando aplicaciones X remotas sobre el display local

    En este ejemplo se plantea una de las situaciones típicas cuando se trabaja con X: el usuario trabaja con aplicaciones tanto locales como remotas que crean sus ventanas sobre la pantalla del usuario.

    Desde la ventana de un xterm arrancado localmente, prueba el siguiente ejemplo:

    	mihost> xhost +hostremoto
    	mihost> telnet hostremoto
    	..................
    	hostremoto> setenv DISPLAY mihost:0
    	hostremoto> xbiff &
    	hostremoto> exit
    	mihost> xhost +asterix
    	mihost> telnet asterix
    	..................
    	asterix> setenv DISPLAY mihost:0
    	asterix> xterm &
    	asterix> exit
    	mihost>
    

    NOTA: El comando xhost +hostremoto notifica al servidor X de que cualquier aplicación ejecutando en hostremoto tiene permiso para realizarle peticiones (por ejemplo, abrir una ventana). Ejecuta xhost sin parámetros para ver que máquinas tienen permiso y xhost -hostremoto para revocar el permiso.

    Después de la ejecución de esta secuencia de comandos, habrá al menos tres ventanas en la pantalla que corresponden a tres clientes:

    Para comprobar esta situación, ejecuta el comando xlsclients que mostrará que aplicaciones están actuando como clientes del servidor.


  3. Gestor de ventanas como un cliente más

    Este ejemplo trata de mostrar que el gestor de ventanas no está incluido en el servidor, sino que es cliente con algunos privilegios.

    Suponiendo que en este momento se está trabajando con un gestor de ventanas (estará activo un gestor de ventanas si las ventanas presentan algún tipo de decoración y el usuario es capaz de moverlas e iconizarlas), se plantea en primer lugar matar ese gestor de ventanas. Hay varias posibilidades:

    Al matar al gestor, las ventanas se quedan congeladas, el usuario no tiene control sobre ellas. Sin embargo, las aplicaciones siguen funcionando perfectamente. Prueba a ejecutar, por ejemplo, un xterm.

    Por último arranca otro o el mismo gestor de ventanas y comprueba lo que sucede.


  4. Viendo los eventos que ocurren en una ventana.

    En este ejemplo, se ejecutará el comando xev que crea una ventana e imprime por la salida estándar los eventos que ocurren en dicha ventana. Se recomienda realizar las siguientes operaciones:

    El objetivo del ejemplo no es comprender toda la información que escribe el comando sino comprobar la cantidad de eventos que se generan.


  5. Mostrando la jerarquía de ventanas

    En este ejemplo, se plantea usar el comando xwininfo para mostrar toda la jerarquía de ventanas asociada a una pantalla. Con él se pretende hacer notar al alumno la gran cantidad de ventanas que se generan durante el trabajo normal en X, no siendo consciente el usuario de la existencia de muchas de ellas.

    Se ejecutará el siguiente comando:

    	$ xwininfo -tree -root
    
    Se recomienda tratar de identificar algunas de las ventanas que muestra el comando por su salida estándar.

  6. Creando una ventana con XCreateSimpleWindow

    Como primera toma de contacto con un programa X se va a presentar un programa que crea una ventana usando XCreateSimpleWindow y la proyecta con XMapWindow. El programa va a recibir como argumentos la geometría de la ventana (y opcionalmente el color del fondo y del borde) y va a crear una ventana con esas características. Debido al uso de la primitiva XCreateSimpleWindow, el resto de los atributos de la ventana no pueden especificarse en su creación y heredarán el valor de la ventana padre.

    Nótese el uso de las macros DefaultScreen, para obtener la pantalla por defecto del servidor (normalmente sólo tiene una), y de BlackPixel y WhitePixel que devuelven el índice de color que en el servidor corresponde al negro y al blanco respectivamente.



  7. Creando una ventana con XCreateWindow

    En este caso se utiliza la llamada XCreateWindow que permite controlar todos los atributos de la nueva ventana. En este ejemplo se fija la geometría de la ventana (ya experimentada en el ejemplo anterior) y se "juega" modificando alguno de los atributos configurables (color de fondo, color de borde, override-redirect y tipo de cursor) dependiendo de los argumentos que reciba el programa.

    Obsérvese que para especificar alguno de estos atributos se debe rellenar una estructura de tipo XSetWindowAttributes y pasarle a la función XCreateWindow dicha estructura más una máscara que especifique qué valores se han fijado. El resto de los atributos de la estructura tomarán los valores por defecto.



  8. Cambiando atributos de una ventana existente

    Se trata de un ejemplo con el mismo comportamiento que el anterior pero en el cual los atributos de la ventana se fijan después de su creación usando la primitiva XChangeWindowAttributes.



  9. Creando una jerarquía de ventanas y cambiando geometría

    En este ejemplo se crea una jerarquía de ventanas. Se crea una ventana principal con una barra de "scroll" a la izquierda. Dicha barra estará compuesta por otras dos ventanas: una ventana hija de la principal que representará el fondo de la barra y una ventana hija de la anterior que corresponderá con el cursor. Asimismo, el programa muestra cómo cambiar los atributos geométricos de una ventana existente. En concreto, se modifica la posición de una ventana realizando una especie de animación consistente en ir avanzando el cursor de la barra de "scroll".



  10. Creando una ventana con un pixmap de fondo